TLDR; :
我正在寻找一种重新加载JPanels及其组件的方法。
我想实现一个动态变化的JComboBox。
这种情况:
有一个按钮,它在后台生成数据(“生成内容”),这里只是一些随机数。生成数据后,该数据应该在JComboBox内部是可选的。
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel = new JPanel();
frame.getContentPane().add(panel, BorderLayout.CENTER);
panel.setLayout(null);
comboBox = new JComboBox<String>();
comboBox.setBounds(39, 63, 144, 20);
panel.add(comboBox);
btnGenerateContent = new JButton("generate content");
btnGenerateContent.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
comboContent = fillrandoms();
comboBox = new JComboBox<>(fillrandoms());
}
});
btnGenerateContent.setBounds(39, 11, 117, 23);
panel.add(btnGenerateContent);
}
private static String[] fillrandoms() {
String[] array = new String[10];
for (int i = 0; i < 10; i++) {
array[i] = "" + Math.random() * 100;
}
return array;
}
现在,当我执行程序时,它将在显示数据之前声明并初始化组合框。我现在的想法是,当我点击“生成内容”按钮时,这还将更新面板或ComboBox的UI。但是当我插入panel.updateUI()
或comboBox.updateUI()
时什么也没发生。
经过研究,我发现了一些使用CardLayouts进行处理的方法,但是我没有在JComboBox中使用它们,因此我很可能需要另一种方法。
我什至不知道这是常见的方法还是还有其他更好的方法。
答案 0 :(得分:0)
要使用方法panel.revalidate()
,panel.repaint()
或revalidate()
更新UI。
revalidate()和repaint()方法是反映UI更新任务的正确方法。