缘起:晚上在调试自己的swing程序时发现自己写的自定义控件表现形式和想象中的不一样。就开始了自己的单步调试之旅。
解决
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JPanel;
public class MyControl extends JPanel {
@Override
protected void paintComponent(Graphics g) {
// TODO Auto-generated method stub
super.paintComponent(g);
int width=this.getWidth();
int height=this.getHeight();
g.setColor(new Color(250,150,230));
g.fillRect(0, 0, width, height);
this.setPreferredSize(new Dimension(5,25));
}
}
先说一下怎么样创建自己的个性化控件吧。先继承一下JPanel(有人会问了JPanel不是面板容器吗?怎么变成了控件呢?怎么说呢,其实都可以算是吧。),然后右键resource,override,在JComeponent中找到paintComponent方法,然后就可以重写了。
我遇到的问题是root(容器名)添加了新建的个性化控件后显示的结果与预期不符合。布局方式不同,经过三百六十度无死角的检查代码和调试后,发现原来问题出在我曾经用了另一种自定义的布局器,导致和想象中的位置不同,而且还改变不了控件的大小。(其实就是我偷懒了,其实应该重新写一个java文件的)
有一个想法:为什么写了坐标是(0,0),显示的还是在中间呢?
看了一些回答,原来因为没有设置布局器,默认是把控件放在中间,然后坐标是相对于JPanel而言的。
总结
今天写的文章有点水,原因是今天活动和会议太多了,所以写的技术点比较简单,只能是记录一下自己写的一个bug。希望明天可以多学习一会。