由于我收到的答案,我现在正在做这个不同的方式。覆盖setPreferredSize()和getPreferredSize()
是否有任何方法可以重写setPreferredSize()和getPreferredSize(),因此它实际上将组件的大小设置为比实际输入更高的数字,并获取比实际值更小的数字?
这里我重写了这两种方法,将面板的大小设置为比实际放置在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);
}
}
谢谢。
更改逻辑,排序,JComponents将其PreferredSize返回给客户端,JPanel返回给JFrame,JComponents返回JPanel – mKorbel 2013-03-09 07:51:06
@mKorbel您能更具体一点吗? – 2013-03-09 07:53:47
默认JCompoents返回没有任何问题适当的坐标到容器(不包括空的JPanel,JPanel只包含图形,JScrollPane和JComboBox),我想念这个问题的真正原因(事件是很好的描述,并包括SSCCE) – mKorbel 2013-03-09 07:57:14