Java 如何使我的JComponent符合JFrame.pack和布局管理器?
我制作了一个JComponent,它显示一个指定颜色的矩形。(还没有找到任何其他方法来达到这种效果)。问题是,它并不像预期的那样遵循JFrame.pack()和布局管理器 代码: 我尝试在pack和显式指定帧的大小之间进行实验。以下是我的GUI在各种设置下的默认外观: 普通大型机.pack(): 大型机。设置大小(500500): 大型机。设置大小(500300):Java 如何使我的JComponent符合JFrame.pack和布局管理器?,java,swing,layout-manager,jcomponent,Java,Swing,Layout Manager,Jcomponent,我制作了一个JComponent,它显示一个指定颜色的矩形。(还没有找到任何其他方法来达到这种效果)。问题是,它并不像预期的那样遵循JFrame.pack()和布局管理器 代码: 我尝试在pack和显式指定帧的大小之间进行实验。以下是我的GUI在各种设置下的默认外观: 普通大型机.pack(): 大型机。设置大小(500500): 大型机。设置大小(500300): 最接近我想要实现的是mainFrame.setSize(500500),尽管我计划再添加几个组件,但我预计它会很脆弱。如您所
最接近我想要实现的是mainFrame.setSize(500500),尽管我计划再添加几个组件,但我预计它会很脆弱。如您所见,在另外两个组件中,“操作”按钮与ColorSample组件重叠——就像它没有遵循我设置的布局管理器一样。然后查看如何包装ColorSample组件的切割。关于如何实现所需效果的任何提示?
pack()
使用组件的getPreferredSize()
。因此,只需返回矩形的所需大小,该大小将在LayoutManager
中使用,LayoutManager可以根据需要自由调整/定位组件的大小,组件不能强制它们,只能在getXXSize(XX==min/pref/max)方法中给出提示。因此,组件实现所能做的最好的事情就是
- 实现所有getXXSize并返回理想的大小
- 实施油漆组件以应对不同的尺寸
public class MyBox extends JComponent {
Dimension boxSize;
public void setBoxSize(Dimension box) {
this.boxSize = new Dimension(box);
...
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
// position the box in the actual size
// and paint it
}
@Override
public Dimension getPreferredSize() {
return getBoxSize();
}
@Override // same for min/max
public Dimension getM...Size( {
return getBoxSize();
}
}
解决方法:使用空的
JLabel
,将其大小设置为所需大小,然后调用setBackground(color)
?哇。老实说,我没想到。只是,ColorSample将来必须改变形状——我实际上是在制作一些类似于儿童托儿所的软件。不过我会记住的达恩。。被打败了,而且更短:-)
public class MyBox extends JComponent {
Dimension boxSize;
public void setBoxSize(Dimension box) {
this.boxSize = new Dimension(box);
...
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
// position the box in the actual size
// and paint it
}
@Override
public Dimension getPreferredSize() {
return getBoxSize();
}
@Override // same for min/max
public Dimension getM...Size( {
return getBoxSize();
}
}