我有JFrame
JButton
,当JFrame
出现时,用户会调整JFrame
的大小,然后点击JButton
,它会执行以下操作:< / p>
System.out.print("actual size now = "+JFrame.getsize");
但尺寸不会导致屏幕上JFrame
的实际尺寸。
使用时尺寸仍然错误:
JFrame.getSize
JFrame.getPrefferedSize
JFrame.getMinimumSize
JFrame.getMaximumSize
JFrame.getBounds
JFrame.getHeight
&amp; getwidth
我该怎么办?
非常感谢任何帮助
答案 0 :(得分:2)
您获得的尺寸是JFrame
的contentPane的大小以及添加的Inset
的大小。只需致电JFrame#getInsets()
并从JFrame
的宽度和身高中减去它们,您可以通过JFrame#getSize()
获取它们。
以下是一个例子:
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Test {
public Test() {
initComponents();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Test();
}
});
}
private void initComponents() {
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel() {
@Override
public Dimension getPreferredSize() {//the frame should now return a width and height of 300
return new Dimension(300, 300);
}
};
JButton button = new JButton("Get JFrame real width and height");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
Dimension frameSize = frame.getSize();
Insets insets = frame.getInsets();
System.out.println("Frame size via getSize(): " + frameSize);
System.out.println("Insets: " + insets);
double width = frameSize.getWidth();
double height = frameSize.getHeight();
//calculate real width/height
double realWidth = width - (insets.left + insets.right);
double realHeight = height - (insets.top + insets.bottom);
System.out.println("Width: " + realWidth + " Height: " + realHeight);
}
});
panel.add(button);
frame.add(panel);
frame.pack();
frame.setVisible(true);
}
}
输出:
通过getSize()的帧大小:java.awt.Dimension [width = 316,height = 338]
Insets:java.awt.Insets [top = 30,left = 8,bottom = 8,right = 8]
宽度:300.0高度:300.0