【问题标题】:How to Close JInternalFrame when JButton click and show another JInternalFrame?当JButton单击并显示另一个JInternalFrame时如何关闭JInternalFrame?
【发布时间】:2014-01-13 12:10:11
【问题描述】:

例如:

JButton1点击JInternalFrame1JDesktopPane上显示 而当JButton2点击JInternalFrame1关闭并在JInternalFrame2上显示JDesktopPane

感谢之前

编辑:使用注释中的代码

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

【问题讨论】:

  • 似乎没有那么难的任务。你能展示一下你试过的代码吗?
  • if (JInternalFrame1 == null) { JInternalFrame1 = new FJInternalFrame(); Desktop.add(JInternalFrame1); JInternalFrame1.toFront(); } else { JInternalFrame1.dispose();}
  • 请学习常见的Java naming conventions(特别是用于名称的大小写)用于类、方法和属性名称,并始终如一地使用它们。顺便说一句 - 你为什么要关闭第一个内部框架而不是简单地将新的内部框架放在它前面?您能否以对最终用户有意义的方式向我解释这一点?看起来使用CardLayout 的单个组件确实会更好。
  • 可能看起来像是连续动作的单例方法,请帮助我
  • 我尝试了另一种方法,但不起作用,有人可以帮助我吗?公共 int Check() { JInternalFrame JIF[] = Desktop.getAllFrames(); if (JIF.length > 0) { JInternalFrame1.dispose();返回 1; } 其他 { 返回 0; } }

标签: java swing jbutton jdesktoppane


【解决方案1】:

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

以下是可能对您有所帮助的重要代码。如果桌面大小等于 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();
            }
        }
    });

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

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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 2012-11-29
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多