关于Java Swing开发中的布局器问题

292 阅读1分钟

缘起:晚上在调试自己的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。希望明天可以多学习一会。