JPanel问题中的Java清理组件

JPanel问题中的Java清理组件,java,swing,jpanel,Java,Swing,Jpanel,我正试图以一种比硬编码更容易的方式清除JPanel中的所有内容。我有一个for循环,它对JTextFields非常有效,但除此之外就没有了。注释掉的块使一切都正常工作,但我想看看是否可以在动态中添加包含的JPanel List<Component> controls = new ArrayList<>(); controls.addAll(Arrays.asList(this.getComponents())); /*controls.addAll(Arrays.asLi

我正试图以一种比硬编码更容易的方式清除JPanel中的所有内容。我有一个for循环,它对JTextFields非常有效,但除此之外就没有了。注释掉的块使一切都正常工作,但我想看看是否可以在动态中添加包含的JPanel

List<Component> controls = new ArrayList<>();
controls.addAll(Arrays.asList(this.getComponents()));
/*controls.addAll(Arrays.asList(jPanel1.getComponents()));
controls.addAll(Arrays.asList(jPanel2.getComponents()));
controls.addAll(Arrays.asList(jPanel3.getComponents()));
controls.addAll(Arrays.asList(jPanel4.getComponents()));
controls.addAll(Arrays.asList(jPanel5.getComponents()));
controls.addAll(Arrays.asList(jPanel6.getComponents()));
controls.addAll(Arrays.asList(jPanel7.getComponents()));
controls.addAll(Arrays.asList(jPanel8.getComponents()));
controls.addAll(Arrays.asList(jPanel9.getComponents()));
controls.addAll(Arrays.asList(jPanel10.getComponents()));
controls.addAll(Arrays.asList(jPanel11.getComponents()));
controls.addAll(Arrays.asList(jPanel12.getComponents()));
controls.addAll(Arrays.asList(jPanel13.getComponents()));*/
for(Component control : controls) {
    if(control instanceof JTextField) {
        System.out.println(control.toString());
        JTextField ctrl = (JTextField) control;
        ctrl.setText("");
    } else if (control instanceof JList) {
        System.out.println(control.toString());
        JList list = (JList) control;
        for (int i = 0; i < list.getModel().getSize(); i++) {
            list.remove(i);
        }
    } else if (control instanceof JTable) {
        System.out.println(control.toString());
        JTable table = (JTable) control;
        for (int i=0;i < table.getRowCount();i++) {
            table.getModel().setValueAt("", i, 0);
        }
        for (int i=0;i < table.getColumnCount();i++) {
            table.getModel().setValueAt("", 0, i);
        }
    } else if (control instanceof JRadioButton) {
        System.out.println(control.toString());
        JRadioButton radio = (JRadioButton) control;
        radio.setSelected(false);
    } else if (control instanceof JPanel) {
        JPanel panel = (JPanel) control;
        controls.addAll(Arrays.asList(panel.getComponents()));
    }
}

面板有什么问题?拆下所有的?。或者您想退房,这将允许您交换viewspanelsAh peeskillet!几天前我根据你的建议使用了CardLayout。我还在学习它能做什么。交换视图到底意味着什么?它只是意味着可以切换组件。就像框架有一个主面板一样,您可以将主面板替换为另一个面板。这就是全部。我想这就是你要做的,从面板上移除所有组件。你这样做对我来说毫无意义。这只是为了练习吗?我们正在尝试从一个基于终端文本的数据库管理系统切换到一个GUI系统,我对GUI的所有体验都是小程序。我有一个jframe,左边有一棵树,右边有一个jpanelcard布局,根据他们在树上选择的内容,jpanel会切换到正确的卡。现在面板中有一个库存维护面板,如果有人正在编辑零件信息,不想保存他们的工作,我有一个清除按钮,我想清除所有组件,以便他们可以选择不同的零件进行编辑。我不完全理解要求,但要从面板中删除所有组件,使用panel.removeAll;重新验证;重新油漆;这将消除一切。与添加相同,您需要在添加新组件后重新验证和重新绘制。请记住,您可以在任何级别使用CardLayout。如果库存维护面板需要更换为其他面板,则可以使用该面板的卡片布局。