我正在制作一个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。
答案 0 :(得分:2)
问题是您在将组件添加到框架之前将框架设置为可见,这会导致组件层次结构无效。来自the docs for the add method:
如果已经显示了容器,则必须在此后验证层次结构才能显示添加的组件。
要更正此问题,您应在添加frame.setVisible(true)
后将行panel
移至最后。或者,您也可以在结尾处拨打revalidate
和repaint
,以强制更新和重新绘制。
现在它仅在调整大小后才起作用,因为这会强制它再次放置所有内容,并正确更新组件层次结构。