Java force panel一定的大小

时间:2016-06-08 00:29:50

标签: java swing jframe jpanel

当我将一个尺寸应为(300,300)的JPanel添加到我的主JFrame时,整个JFrame是(300,300),这不应该是。 JPanel本身应该是(300,300)。

import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Tester extends JFrame {

    public Tester() {
        this.getContentPane().add(new Window());
        this.pack();

        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                formMouseClicked(evt);
            }
        });
    }

    private void formMouseClicked(java.awt.event.MouseEvent evt) {                                  
        System.out.println("x: " + evt.getX() + ", y: " + evt.getY());
    }  

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Tester().setVisible(true);
            }
        });
    }

    public class Window extends JPanel {

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(300, 300);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

  

整个JFrame是(300,300),不应该是。

为什么这么说?如果单击右下角,则会看到大于300的值。

也许你想要的是:

    //this.getContentPane().add(new Window());
    JPanel panel = new Window();
    this.getContentPane().add(panel);
    this.pack();
    //addMouseListener(new java.awt.event.MouseAdapter() {
    panel.addMouseListener(new java.awt.event.MouseAdapter() {

现在所有鼠标点都相对于面板。

答案 1 :(得分:1)

JFrame的默认布局为BorderLayout,当您添加组件而未指定区域时,默认情况下会显示center区域和中心区域不尊重其组件的首选大小。

关于框架的大小,pack方法根据内部组件的首选大小计算它。