我对Swing有点问题。我有一个称为JFrameFrameMain。它的内部是一个称为JPanelpanelChoices

调用/创建FrameMain时,它将用许多panelChoices对象填充PanelEntries对象,这是其中包含许多JPanelJButton(这是我编写的另一类)。

我想要做的是,当我单击PanelEntries对象内的按钮之一时,我想销毁/删除FrameMain以及其他组件(包括包含PanelEntriesJButton对象)。

我试过使用super,但它返回的JPanel(即PanelEntries对象)保存了JButton,而不是将它们全部保存在一起的FrameMain。我该如何实现?

编辑:我似乎还不够清楚,因此这里有一些我的工作信息。我现在没有实际的代码,因为我在另一台计算机上,但是我希望这将有助于阐明我的问题。

public class FrameMain() {
    private JFrame frameMain;
    private JPanel panelChoices;

    public FrameMain(args) {
        createGUI();
        loadData();
    }

    private void createGUI() {
        JFrame frameMain = new JFrame();
        JPanel panelChoices = new JPanel(new GridLayout(1,1));
        frameMain.add(panel);
        // removed formatting and other design codes since they are not important.
        pack();
    }

    private void loadData() {
        boolean available;
        for (int i = 1; i <= 10; i++) {
            // do some if/else and give value to boolean available
            PanelEntries panel = new PanelEntries(i, available);
            frameMain.add(panel);
            // more code here to handle data.
        }
    }
}

public class PanelEntries() extends JPanel {

    public PanelEntries(int num, boolean avb) {
        JButton button = new JButton("Button Number " + num);
        button.setEnabled(avb);
        add(button);
        // add action listener to created button so that it calls 'nextScreen()' when clicked.
        // more code
        pack();
    }

    private void nextScreen() {
        // destroy/dispose MainFrame here.
        // See Notes.
        AnotherFrame anotherFrame = new AnotherFrame();
    }
}

笔记:
  • 所有类都在自己的.java文件中。
  • 我需要知道如何从FrameMain对象内部的按钮处理PanelEntries,而不仅仅是处理JFrame。
  • 最佳答案

    根据给定的信息,

  • 如果您想退出该应用程序,请不要使用System.exit(0); :)
  • 如果您打算布置框架,jframe.dispose();
  • 如果要删除组件/所有组件,则可以使用.remove(Component) / .removeAll()

  • 如果这样做没有帮助,请使用更多信息重新编写您的问题。

    09-27 17:11