使用 JComboBox 冻结 JFrame
JFrame is frozen by using a JComboBox
我试图在 select 编辑 JComboBox 后从框架中删除一个组件。但是,当我 select 其中一个框时,整个框架冻结,除了调整大小或移动它之外,你什么也做不了。
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 线程似乎根本没有停止。为什么会这样?
这是因为
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);
我试图在 select 编辑 JComboBox 后从框架中删除一个组件。但是,当我 select 其中一个框时,整个框架冻结,除了调整大小或移动它之外,你什么也做不了。
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 线程似乎根本没有停止。为什么会这样?
这是因为
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);