由于我收到的答案,我现在以不同的方式做这件事。
是否有任何方法可以覆盖setPreferredSize()和getPreferredSize(),因此它实际上会将组件的大小设置为高于实际输入的数字,并获得一个低于实际数字的数字?< / p>
这里我重写了两种方法,将面板的大小设置为比我实际放入setPreferredSize()中的大100个像素,如果我要获得首选大小,我希望它返回我放在setPreferredSize中的内容()
我怀疑Swing使用getPreferredSize()来设置大小,那么我是否可以覆盖另一种方法来实现这一点,或者我不得不使用另一种方法来返回我想要的值?
import java.awt.*;
import java.beans.Transient;
import javax.swing.*;
public class PreferredSize extends JPanel{
public static void main(String[] args) {
JPanel background = new JPanel();
PreferredSize ps = new PreferredSize();
ps.setPreferredSize(new Dimension(200, 200));
ps.setBackground(Color.CYAN);
JPanel panel = new JPanel();
panel.setBackground(Color.BLUE);
panel.setPreferredSize(new Dimension(200, 200));
background.add(ps);
background.add(panel);
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(background);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
@Override
public void setPreferredSize(Dimension preferredSize) {
super.setPreferredSize(new Dimension(preferredSize.width+100, preferredSize.height+100));
}
@Override
@Transient
public Dimension getPreferredSize() {
return new Dimension(super.getPreferredSize().width-100, super.getPreferredSize().height-100);
}
}
感谢。
答案 0 :(得分:4)
您面临的问题是,首选大小只是布局管理员可以使用的指南,用于决定如何布置组件。布局管理器忽略这些提示是完全合理的。
以ip为例;
JPanel
的默认大小为0x0,因此当您加入并减去100像素时,它现在再次为0x0。JFrame
的默认布局管理器为BorderLayout
,如果可用尺寸大于或小于首选尺寸,则会忽略首选尺寸真正的问题是,你实际想要实现的目标是什么?