我有一个JFrame,其中包含一个JButton,当JFrame出现时,用户将调整JFrame的大小,然后单击将执行的JButton:
System.out.print("actual size now = "+JFrame.getsize");但是大小不会导致屏幕上JFrame的实际大小。
当我使用:
JFrame.getSizeJFrame.getPrefferedSizeJFrame.getMinimumSizeJFrame.getMaximumSizeJFrame.getBoundsJFrame.getHeight & getwidth我该怎么办?
非常感谢你的帮助
发布于 2012-11-04 14:34:16
您要得到的大小是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.Dimensionwidth=316,height=338 嵌体: java.awt.Insetstop=30,left=8,bottom=8,right=8 宽: 300.0高: 300.0
https://stackoverflow.com/questions/13219065
复制相似问题