【问题标题】:how to know the exact size of container or windows on screen?如何知道屏幕上容器或窗口的确切大小?
【发布时间】:2012-11-04 13:45:12
【问题描述】:

我有一个JFrame,其中包含一个JButton,当JFrame 出现时,用户将调整JFrame 的大小,然后单击JButton 即可:

System.out.print("actual size now = "+JFrame.getsize");

但大小不会导致屏幕上JFrame 的实际大小。

我用的时候尺寸还是不对:

  • JFrame.getSize

  • JFrame.getPrefferedSize

  • JFrame.getMinimumSize

  • JFrame.getMaximumSize

  • JFrame.getBounds

  • JFrame.getHeight & getwidth

我该怎么办?

非常感谢您的任何帮助

【问题讨论】:

    标签: java swing size jframe containers


    【解决方案1】:

    您得到的大小是JFrames contentPane 的大小和添加的Insets 的大小。只需调用JFrame#getInsets() 并从JFrames widthheight 中减去它们,您可以通过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]

    插图:java.awt.Insets[top=30,left=8,bottom=8,right=8]

    宽度:300.0 高度:300.0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多