一旦選擇了 JComboBox,我就會嘗試從 Frame 中洗掉一個組件。但是,當我選擇其中一個框時,整個框架會凍結,除了調整大小或移動它之外,您無法執行任何操作。
JFrame frame = new JFrame();
frame.setSize(800 , 800);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane() , BoxLayout.Y_AXIS));
Gui gui = new Gui();
JComboBox<ParabolaType> comboBox = new JComboBox<>(ParabolaType.values());
comboBox.addActionListener(e -> {
System.out.println("started");
frame.remove(frame.getComponents().length - 1);
frame.revalidate();
System.out.println("finished");
});
frame.add(gui);
frame.add(comboBox);
started
finished
似乎 EventQueue 執行緒根本沒有停止。為什么會這樣?
uj5u.com熱心網友回復:
這是因為
frame.remove(frame.getComponents().length - 1);
洗掉了JRootPane,所以您正在洗掉根容器。
相反frame.getContentPane().remove(comboBox);,將洗掉組合框。
這里有一個作業示例
JFrame frame = new JFrame();
frame.setSize(800, 800);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
JLabel gui = new JLabel("okokok");
JComboBox<String> comboBox = new JComboBox<String>(new String[]{"Someting1", "Something2"});
comboBox.addActionListener(e -> {
System.out.println("started");
frame.getContentPane().remove(comboBox);
frame.repaint();
System.out.println("finished");
});
frame.add(gui);
frame.add(comboBox);
frame.setVisible(true);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/436587.html
下一篇:使用gorm插入表時外鍵約束失敗
