Java Swing将类动态加载到面板中

时间:2012-10-10 17:28:36

标签: java swing jpanel jcombobox

我的程序看起来像这样!

enter image description here

我想让底部动态地将框架加载到底部框架中,具体取决于在ComboBox中选择的项目。例如,如果选择了第一个项目,我希望显示PresentValue.java文件中的面板。我的想法是每个选项都有一个java文件,它显示我在各自的java文件中设计的内容。

enter image description here

enter image description here

这两个java文件应放在我的第一个屏幕截图的“底部”框中,具体取决于组合框的选择。

我更习惯Android编程,我会简单地从片段中调用replace方法来交换加载的片段......在这里寻找类比。

final JComboBox selectorBox = new JComboBox(selection);
    selectorBox.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            int selectionID = selectorBox.getSelectedIndex();

        }
    });

但是找不到办法去做我想做的事。请解释一下。

2 个答案:

答案 0 :(得分:4)

对于您拥有的每个Java文件,该Java文件的输出应为JPanel。不是JFrame

在显示任何内容之前,请执行您拥有的所有Java文件。创建所有可能的JPanel

在GUI中创建JFrame,然后使用JFrame的删除和添加方法删除或添加所需的JPanel

以下是我的一个GUI的示例。

public void updatePartControl() {
    Thread thread = new CountdownThread(model, this, displayPanel);
    thread.start();

    frame.remove(alarmPanel.getPanel());
    frame.add(displayPanel.getPanel());
    frame.validate();
    frame.pack();
    frame.setBounds(getBounds());
}

如果显示JPanel大于或小于警报JPanel,则setBounds方法会重置边界。

您的应用应该有一个JFrame。您可以使用多个JPanel来创建GUI。

答案 1 :(得分:3)

更改底部组件取决于正在使用的布局管理器。 CardLayout旨在交换面板。

public void actionPerformed(ActionEvent arg0) {
   int selectionID = selectorBox.getSelectedIndex();
   if (selectionID == 0) {
      cardLayout.show(basePanel, SELECTED_1);
   } 
   // handle other selections

}