当我将Swing组件(比如JButton)添加到JPanel中时,它会按照其“首选大小”进行渲染。
然而,首选大小实际上比绘制的按钮要大。它似乎周围有一个不可见的边框。
这是一个包含我的测试面板的简单框架:
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TestPanel pnl = new TestPanel();
frame.getContentPane().add(pnl);
frame.pack();
frame.setVisible(true);
这是我的测试面板...
public class TestPanel extends JPanel {
JButton btn1 = new JButton("Test1");
JButton btn2 = new JButton("Test2");
public TestPanel() {
this.add(btn1);
this.add(btn2);
}
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.RED);
Dimension dim = btn1.getPreferredSize();
g.drawRect(btn1.getX(), btn1.getY(), (int)(dim.getWidth()), (int)(dim.getHeight()));
}
}
注意,我将btn1的“PreferredSize”标记为红色,以证明preferredSize实际上比按钮本身要大。
我的问题是,如何确定绘制的按钮的宽度和高度,而不是JButton的preferredSize?
非常感谢任何帮助!
更新
因为我需要让这适用于所有Swing组件,所以这里有一个屏幕截图,其中包含更多组件。
不幸的是,我需要解决这个问题,确定可见小部件的“真实”大小对我的应用程序至关重要。
JButton
实现的一部分,因此被“隐藏”了(您可以通过阅读代码来检查如何计算额外边框)。无论如何,您需要那个值做什么?可能有另一种方法来实现同样的事情。 - asermaxbtn1.getBorder().getBorderInsets(btn1)
,我会及时更新进展。 :) - user550738