Java 当 JButton 单击并显示另一个 JInternalFrame 时如何关闭 JInternalFrame?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/20774628/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 04:15:29  来源:igfitidea点击:

How to Close JInternalFrame when JButton click and show another JInternalFrame?

javaswingjbuttonjdesktoppane

提问by Schreiner

For Example:

例如:

When JButton1click JInternalFrame1Show on the JDesktopPaneAnd when JButton2Click JInternalFrame1Close and JInternalFrame2Show on the JDesktopPane.

JButton1点击JInternalFrame1显示在JDesktopPaneJButton2点击JInternalFrame1关闭,并JInternalFrame2显示在JDesktopPane

thx before

谢谢之前

Edit: with code from comment

编辑:来自评论的代码

if (JInternalFrame1 == null) { 
    JInternalFrame1 = new FJInternalFrame(); 
    Desktop.add(JInternalFrame1); 
    JInternalFrame1.toFront();
} else { 
    JInternalFrame1.dispose();
}

采纳答案by Paul Samsotha

Take a look at this example. I created a custom JInternalFrame that has a different title every time you create a new frame. when you click on the button, a new one is created and the old one disapears

看看这个例子。我创建了一个自定义 JInternalFrame,每次创建新框架时都有不同的标题。当你点击按钮时,一个新的被创建,旧的消失

Here is the important code that may help you out. I add a new frame if the desktop size is equal to 0, other wise I remove the previous one, add a new frame, and revalidate

这是可以帮助您的重要代码。如果桌面大小等于 0,我添加一个新框架,否则我删除前一个框架,添加一个新框架,然后重新验证

   button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (desktop.getAllFrames().length == 0) {
                desktop.add(new MyInternalFrame());

            } else {
                desktop.remove(0);
                desktop.add(new MyInternalFrame());
                revalidate();
                repaint();
            }
        }
    });


Here is the complete code. It's two different files.

这是完整的代码。这是两个不同的文件。

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class InternalFrameDemo1 extends JPanel {

    JDesktopPane desktop;
    JButton button;

    public InternalFrameDemo1() {
        desktop = new JDesktopPane();
        button = new JButton("Get Next Frame");

        setLayout(new BorderLayout());
        add(desktop, BorderLayout.CENTER);
        add(button, BorderLayout.SOUTH);

        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (desktop.getAllFrames().length == 0) {
                    desktop.add(new MyInternalFrame());

                } else {
                    desktop.remove(0);
                    desktop.add(new MyInternalFrame());
                    revalidate();
                    repaint();
                }
            }
        });
    }

    public static void createAndShowGui() {
        JFrame frame = new JFrame();
        frame.add(new InternalFrameDemo1());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationByPlatform(true);
        frame.pack();
        frame.setVisible(true);

    }

    public Dimension getPreferredSize() {
        return new Dimension(500, 500);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGui();
            }
        });
    }
}

import javax.swing.JInternalFrame;

public class MyInternalFrame extends JInternalFrame {
    static int openFrameCount = 0;
    static final int xOffset = 30, yOffset = 30;

    public MyInternalFrame() {
        super("Document #" + (++openFrameCount),
              true, //resizable
              true, //closable
              true, //maximizable
              true);//iconifiable

        setSize(300,300);
        setLocation(xOffset*openFrameCount, yOffset*openFrameCount);
        setVisible(true);
    }
}

enter image description here

在此处输入图片说明