JButton在JFrame中没有正确显示

时间:2016-02-06 21:38:23

标签: java swing jframe jbutton

我正在制作一个JFrame菜单,它有3个按钮,但启动时按钮没有正确显示

这是我的代码:

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MainMenu {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Nakib Group Managment System");
        frame.setSize(500, 200);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        JButton addRequest = new JButton("Add request");
        addRequest.addActionListener(new AddRequest());
        JButton viewRequests = new JButton("View requests");
        viewRequests.addActionListener(new ViewRequests());
        JButton addCab = new JButton("Add a cab");
        addCab.addActionListener(new AddCab());
        panel.add(addRequest);
        panel.add(viewRequests);
        panel.add(addCab);
        frame.add(panel);
    }
}

当我运行它时,它会显示以下内容(由于信誉不足,无法发布图像): first run

然而,当我调整窗口大小时,按钮将显示: resized

我的操作系统环境是Windows 10,我正在研究Java。

1 个答案:

答案 0 :(得分:2)

问题是您在将组件添加到框架之前将框架设置为可见,这会导致组件层次结构无效。来自the docs for the add method

  

如果已经显示了容器,则必须在此后验证层次结构才能显示添加的组件。

要更正此问题,您应在添加frame.setVisible(true)后将行panel移至最后。或者,您也可以在结尾处拨打revalidaterepaint,以强制更新和重新绘制。

现在它仅在调整大小后才起作用,因为这会强制它再次放置所有内容,并正确更新组件层次结构。