Java 如何在打开另一个JFrame时关闭JFrame?
我有一个主框架。有两个按钮:项目和销售 当我单击按钮项目时,它会打开一个框架项目 我想,当我点击button Sale时,它应该关闭商品并打开销售 这是一个项目框架: 更新:-这是我的销售课程Java 如何在打开另一个JFrame时关闭JFrame?,java,swing,jframe,Java,Swing,Jframe,我有一个主框架。有两个按钮:项目和销售 当我单击按钮项目时,它会打开一个框架项目 我想,当我点击button Sale时,它应该关闭商品并打开销售 这是一个项目框架: 更新:-这是我的销售课程 public class Sale extends JFrame { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() {
public class Sale extends JFrame {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Sale frame = new Sale();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
只需使用dispose方法关闭上一个项目JFrame 在您的情况下,我认为您还应该向按钮添加ActionListener
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
frameToClose.dispose();
}
});
你应该处理;按钮的ActionListener中的框架,由于您在类中扩展JFrame,因此它表示您;实例本身。大概是这样的:
public class Main extends JFrame {
public Main() {
Sale sale = new Sale();
Items item = new Items();
JButton btnSale = new JButton("Sale");
getContentPane().add(btnSale, BorderLayout.WEST);
JButton btnItems = new JButton("Items");
getContentPane().add(btnItems, BorderLayout.CENTER);
btnSale.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
sale.setVisible(true);
if(item.isVisible()) {
item.dispose();
}
}
});
btnItems.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
item.setVisible(true);
if(sale.isVisible()) {
sale.dispose();
}
}
});
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Main frame = new Main();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
我看,第二个“框架”可能是一个对话框。有关备选方案,请参见公认的答案。2为了更快地得到更好的帮助,贴一个or。为什么你甚至需要关闭和打开一个新的框架。为什么你不尝试一个带有面板的卡片布局来出售和其他东西呢。单击销售时,调用卡布局下一个方法。您甚至可以在需要时返回到其他面板。这让你的生活变得轻松。关闭和打开一个框架需要时间,而且不好。看起来JTabbedPane正是您所需要的。你的两个按钮被替换为“标题”选项卡,当用户单击这些标题时,就可以实现关闭/处理和打开帧的效果。这不起作用我有三个帧。。。一个有两个按钮的框架。使用这些按钮可以打开的两个框架。。。我想要的是,当我点击一个按钮打开一个新的框架时,有按钮的框架也应该是可见的。然后当我点击销售按钮时,它应该关闭商品框架并打开销售框架。你能提供一些关于错误的详细信息吗?处理程序在JFrame关闭时工作。控制台中没有错误。。它只是不关闭框架将这三个框架作为面板,并将它们作为卡片布局添加到框架中。现在,您需要做的就是根据单击的按钮调用卡片布局的下一个或上一个方法。这将比关闭和打开框架更简单。当我在主框架中键入销售时,它不会给出处置建议;有getFrames和getWindows选项。甚至手动输入也会产生错误。但当我点击查看产生了什么错误时。它说没有建议是正确的available@Manjit萨哈。你们的销售课程是否扩展了JFrame?如果没有,您可以调用类的框架,我不知道您给它起了什么名字,但类似sale.frame.dispose。还要确保将Sale类中的框架公开,以便可以在主框架中使用class@Manjitsahaif条件中也应该是ifsale.frame.isVisible{}。如果您试图调用的类没有扩展JFrame,那么我将把所有类都扩展到JFrame。
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
frameToClose.dispose();
}
});
public class Main extends JFrame {
public Main() {
Sale sale = new Sale();
Items item = new Items();
JButton btnSale = new JButton("Sale");
getContentPane().add(btnSale, BorderLayout.WEST);
JButton btnItems = new JButton("Items");
getContentPane().add(btnItems, BorderLayout.CENTER);
btnSale.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
sale.setVisible(true);
if(item.isVisible()) {
item.dispose();
}
}
});
btnItems.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
item.setVisible(true);
if(sale.isVisible()) {
sale.dispose();
}
}
});
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Main frame = new Main();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}