Java 当JButton单击并显示另一个JInternalFrame时,如何关闭JInternalFrame?
例如: 当Java 当JButton单击并显示另一个JInternalFrame时,如何关闭JInternalFrame?,java,swing,jbutton,jdesktoppane,Java,Swing,Jbutton,Jdesktoppane,例如: 当JButton1点击JInternalFrame1显示在JDesktopPane 当JButton2点击JInternalFrame1关闭并JInternalFrame2显示在JDesktopPane上 thx之前 编辑:使用注释中的代码 if (JInternalFrame1 == null) { JInternalFrame1 = new FJInternalFrame(); Desktop.add(JInternalFrame1); JInterna
JButton1
点击JInternalFrame1
显示在JDesktopPane
当JButton2
点击JInternalFrame1
关闭并JInternalFrame2
显示在JDesktopPane
上
thx之前
编辑:使用注释中的代码
if (JInternalFrame1 == null) {
JInternalFrame1 = new FJInternalFrame();
Desktop.add(JInternalFrame1);
JInternalFrame1.toFront();
} else {
JInternalFrame1.dispose();
}
看看这个例子。我创建了一个自定义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);
}
}
看看这个例子。我创建了一个自定义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);
}
}
这项任务似乎并不难。您可以显示您尝试过的代码吗?如果(JInternalFrame1==null){JInternalFrame1=new FJInternalFrame();Desktop.add(JInternalFrame1);JInternalFrame1.toFront();}其他{JInternalFrame1.dispose();}请学习常见的(特别是用于名称的大小写)对于类、方法和属性名称,请一致使用它们。顺便说一句,为什么要关闭第一个内部框架,而不是简单地将新的内部框架放在它前面?你能用对最终用户有意义的方式向我解释一下吗?使用
CardLayout
的单个组件似乎工作得更好。也许它看起来像是连续操作中的singleton方法,请帮助我尝试另一种方法,但不起作用,有人能帮我吗?public int Check(){JInternalFrame JIF[]=Desktop.getAllFrames();if(JIF.length>0){JInternalFrame1.dispose();return 1;}否则{return 0;}}看起来并不是那么困难的任务。您可以显示您尝试过的代码吗?如果(JInternalFrame1==null){JInternalFrame1=new FJInternalFrame();Desktop.add(JInternalFrame1);JInternalFrame1.toFront();}其他{JInternalFrame1.dispose();}请学习常见的(特别是用于名称的大小写)对于类、方法和属性名称,请一致使用它们。顺便说一句,为什么要关闭第一个内部框架,而不是简单地将新的内部框架放在它前面?你能用对最终用户有意义的方式向我解释一下吗?使用CardLayout
的单个组件似乎工作得更好。也许它看起来像是连续操作中的singleton方法,请帮助我尝试另一种方法,但不起作用,有人能帮我吗?public int Check(){JInternalFrame JIF[]=Desktop.getAllFrames();if(JIF.length>0){JInternalFrame1.dispose();return 1;}else{return 0;}