0

私のプログラムは、画面とメイン フレームにいくつかのウィンドウ (jframe と jpanel) を表示します。ユーザーがメイン フレームでこれらのウィンドウの 1 つを削除するオプションを選択すると、選択したウィンドウを閉じる必要があります。

それらのウィンドウを配列にしています。ユーザーが閉じるウィンドウを選択すると、その jframe と配列からの jpanel が消去され、その jframe を閉じる必要がありますが、そうではありません。エラーは表示されず、プログラムを再度実行すると、すべてが想定どおりになり、削除されたフレームは表示されません。私の結論は、jframe を閉じて正しく動作していないということです。プログラムの残りの部分は問題ありません。

私が試してみました:

windows[Frame_to_close].setDefaultCloseOperation(windows[Frame_to_close].DISPOSE_ON_CLOSE );

windows[Frame_to_close].setVisible(false); 
windows[Frame_to_close].dispose();

ウィンドウを閉じるときに何か間違ったことをしていますか? ウィンドウを閉じる他の方法はありますか(JframeとJpanel)?

4

1 に答える 1

1

ユーザーは閉じるウィンドウをどのように選択しますか? 以下のコードを使用すると、ボタンを押してウィンドウを閉じるか、ウィンドウを直接閉じることができます (この場合、フレームはリストから削除されません)。

private void createManyFrames() {
    final JFrame mainFrame = new JFrame("Stack Overflow: closing frames");
    mainFrame.setBounds(100, 100, 240, 600);
    mainFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    mainFrame.getContentPane().setLayout(new FlowLayout());
    final List<JFrame> frames = initializeFrames(Arrays.asList("one", "two", "three"));
    for (final JFrame frame : frames) {
        final JButton button = new JButton(frame.getTitle());
        mainFrame.getContentPane().add(button);
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(final ActionEvent e) {
                frame.dispose();
                frames.remove(frame);
            }
        });
        frame.setVisible(true);
    }
    mainFrame.setVisible(true);
}

private List<JFrame> initializeFrames(final List<String> frameNames) {
    final List<JFrame> frames = new ArrayList<JFrame>();
    for (final String frameName : frameNames) {
        final JFrame frame = new JFrame(frameName);
        frame.setBounds(480, 120 * (1 + frames.size()), 200, 100);
        final JPanel panel = new JPanel();
        panel.add(new JLabel("Label in panel in frame " + frameName + "."));
        frame.getContentPane().add(panel);
        frames.add(frame);
    }
    return frames;
}
于 2013-03-30T21:40:37.587 に答える