java - 如何让 JFrame 自动调整大小以显示所有按钮

标签 java swing jframe jpanel layout-manager

我有一个简单的 swing 应用程序,由一个 JLabel 和三个按钮组成。这三个按钮位于它们自己的 JPanel 中,该 JPanel 与 JLabel 一起位于 JFrame 中。 JPanel 使用 flowlayout 管理器水平排列按钮,JFrame 使用 BorderLayout 管理器垂直排列 JLabel 和 JPanel。

我的问题是,当我启动应用程序时,在使用过程中,其中一个按钮上的文本发生变化,从而增加了其宽度。但是,窗口不会调整大小以适应这一情况,并且其中一个按钮会消失。我想过再次调用 pack() ,但是 JFrame 是我的构造函数中的局部变量,而且,我不应该告诉我的程序调整大小,对吗?我在谷歌或这里找不到任何可以帮助我的东西,但必须有一个简单的解决方案,我错过了什么?代码如下。

    playButton = new JButton("Play");
    pauseButton = new JButton("Pause");
    stopButton = new JButton("Stop");
    curTrackLabel = new JLabel("No Track Selected");

    JFrame myFrame = new JFrame("MediaPlayer");
    myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    myFrame.setTitle("MediaPlayer");
    myFrame.setLocation(400,300);

    JPanel topPanel = new JPanel();
    topPanel.setLayout(new BorderLayout());
    myFrame.add(topPanel);
    JPanel buttonPanel = new JPanel(new FlowLayout());

    buttonPanel.add(playButton);
    buttonPanel.add(pauseButton);
    buttonPanel.add(stopButton);
    topPanel.add(buttonPanel, BorderLayout.CENTER);
    topPanel.add(curTrackLabel, BorderLayout.NORTH);

    playButton.addActionListener(new playButtonHandler());
    pauseButton.addActionListener(new pauseButtonHandler());
    stopButton.addActionListener(new stopButtonHandler());

    myFrame.pack();
    myFrame.setVisible(true);

最佳答案

也许可以尝试一下

((JFrame)myButton.getTopLevelAncestor()).pack();

其中 myButton 是在执行过程中修改文本的按钮。

关于java - 如何让 JFrame 自动调整大小以显示所有按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4269577/

相关文章:

java - JTable 不会刷新

java - 在 JFrame 上画一条线

java - 反序列化 json 对象的嵌套数组返回 null

java - 如何在 JTable 单元格中使用 JLists?

java - JTable隐藏网格线的方法

java - JPanel 获取 PaintComponent 在输入子项时被调用

java - 使用 vlcj 从文件夹流式传输多个文件

java - eclipse java代码显示行号

java - FlexJSON 没有完全序列化类对象

java - JFrame getRootPane() 返回 Null