java - 不可调整大小的 JFrame 更改 pack() 上的位置

标签 java swing user-interface resize jframe

我想写一个JFrame,它的内容可以改变大小。 JFrame 应根据其内容的大小进行调整。此外,JFrame 不应调整大小。

这是我的代码:

public class MyFrame {
    public static void main(String[] args) {
        new MyFrame();
    }

    private JFrame frame;
    private JLabel label;
    private boolean labelVisible = false;

    public MyFrame() {
        label = new JLabel("label");

        frame = new JFrame();
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(new GridLayout(0, 1, 5, 5));
        frame.getContentPane().add(createButton());
        frame.pack();
        frame.setVisible(true);
    }

    private JButton createButton() {
        JButton button = new JButton("toggleLabel");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (labelVisible) {
                    frame.getContentPane().remove(label);
                } else {
                    frame.getContentPane().add(label);
                }
                labelVisible = !labelVisible;
                frame.pack();
                System.out.println(frame.getLocation());
            }
        });
        return button;
    }
}

问题是:如果我调整 JFrame 的大小(通过添加或删除标签),JFrame 会更改其位置(它向下移动一点)。但是,如果我删除 frame.setResizable(false) 行,JFrame 的位置将不再更改。

我能做点什么吗?我可以有一个不能由用户调整大小但由代码调整大小的 JFrame 吗?

<小时/>

编辑:

这是多次单击按钮后的输出:

java.awt.Point[x=75,y=62]
java.awt.Point[x=75,y=90]
java.awt.Point[x=75,y=118]
java.awt.Point[x=75,y=146]
java.awt.Point[x=75,y=174]
java.awt.Point[x=75,y=202]
java.awt.Point[x=75,y=230]
java.awt.Point[x=75,y=286]
java.awt.Point[x=75,y=286]
java.awt.Point[x=75,y=314]
java.awt.Point[x=75,y=342]

如您所见,y 坐标随着每次点击而增加。

<小时/>

编辑2:

正如 @camickr 在评论中指出的那样,这似乎是一个特定于平台的问题。

我使用 Ubuntu 14.04 64 位和 java-7-oracle 64 位 (1.7.0_67)。

最佳答案

我使用完全相同的代码,输出如下:

java.awt.Point[x=894,y=493]
java.awt.Point[x=894,y=493]
java.awt.Point[x=894,y=493]
java.awt.Point[x=894,y=493]
java.awt.Point[x=894,y=493]
java.awt.Point[x=894,y=493]
java.awt.Point[x=894,y=493]
java.awt.Point[x=894,y=493]
java.awt.Point[x=894,y=493]

这可能是与平台相关的问题...

关于java - 不可调整大小的 JFrame 更改 pack() 上的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25475972/

相关文章:

java - JTextField 无法调整大小

java - 更改 ENTER 键功能

java - 使用一个来源的两个 GUI

c++ - GUI系统架构?

java - HTTP GET 检索压缩文件

javamail - 获取邮件正文内容格式错误

java - 如何在 Android 上将 ISO 8601 字符串解析为 Java 日期

java - 调整多个 JPanel 的大小以适应窗口

java - Linux 中的 "Error occurred during initialization of VM"

java - 如何最好地定位 Swing GUI?