Java 在JPanel上使用Jbutton隐藏/显示JFrame

Java 在JPanel上使用Jbutton隐藏/显示JFrame,java,swing,jframe,Java,Swing,Jframe,在我的Swing应用程序中,我有两个JFrame A和B。当我单击JFrame A上的按钮时,它会打开JFrame B并隐藏它自己(我设法做到了这一点) 在JFrame B上,我在JTabbedPane上放置了4个JPanel。每个JPanel有2个按钮 当我在JPanels上单击Jbutton并再次显示JFrame A时,我试图隐藏JFrame B 我该怎么做 //JPanel类 公共类AddItemPanel扩展了javax.swing.JPanel{ public AddItemPan

在我的Swing应用程序中,我有两个JFrame A和B。当我单击JFrame A上的按钮时,它会打开JFrame B并隐藏它自己(我设法做到了这一点)

在JFrame B上,我在JTabbedPane上放置了4个JPanel。每个JPanel有2个按钮

当我在JPanels上单击Jbutton并再次显示JFrame A时,我试图隐藏JFrame B

我该怎么做

//JPanel类

公共类AddItemPanel扩展了javax.swing.JPanel{

  public AddItemPanel() {
        initComponents();
  }

  private void btnCancelActionPerformed(java.awt.event.ActionEvent evt) {                                          

      if(evt.getSource() == btnCancel)
      {
        ItemFrame d = new ItemFrame();      
             d.setVisible(false);// not working
             this.setVisible(false);// not working
      }
}
}

//JFrame类

公共类ItemFrame扩展了javax.swing.JFrame{

  public ItemFrame() {

        initComponents();
        jTabbedPane1.add("Add Items",new AddItemPanel());
        jTabbedPane1.add("Delete Items",new DeleteItemPanel());
        jTabbedPane1.add("Update Items",new UpdateItemPanel());
        jTabbedPane1.add("Search Items",new SearchItemPanel());
 }

}

试试这个例子,希望对你有用

  import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.*;
import javax.swing.*;

public class JframeTest implements ActionListener
{
    JButton b1;
    JButton b2;
    JFrame f1 ;
    JFrame f2;

public void init()
{
 f1 = new JFrame("Frame one");
 f2 = new JFrame("Frame two");

 f1.setSize(400,400);
 f2.setSize(400,400);

 f1.setLayout(new FlowLayout());
 f2.setLayout(new FlowLayout());

 b1 = new JButton("Open Frame two");
 b2= new JButton("Open Fram one");
 JPanel p1 = new JPanel();
 JPanel p2 = new JPanel();

 p1.setBackground(Color.white);
 p2.setBackground(Color.white);
 p1.add(b1);
 p2.add(b2);

f1.getContentPane().add(p1);
f2.getContentPane().add(p2);

f1.setVisible(true);
f2.setVisible(false);
f1.setDefaultCloseOperation(3);
f2.setDefaultCloseOperation(3);

b1.addActionListener(this);
b2.addActionListener(this);
}
public void actionPerformed(ActionEvent evt)
{
    if(evt.getSource() == b1)
    {
        f1.setVisible(false);
        f2.setVisible(true);
    }else if(evt.getSource()==b2)
    {
        f1.setVisible(true);
        f2.setVisible(false);
    }

}

public JframeTest()
{
    this.init();
}
public static void main(String...argS)
{
    new JframeTest();
}
}

使用“setVisible()”方法隐藏和显示框架请注意,框架B应该是一个(可能是模态的)对话框,框架a应该是主应用程序。而且永远不会消失。
公共类Java Extendes JFrame实现ActionListener
名称不正确的类,除非添加新功能,否则不要扩展frame,最好创建匿名侦听器或操作。。我不会推荐此代码用于研究。此外,对代码块使用一致的逻辑缩进。代码的缩进旨在帮助人们理解程序流程。感谢您的回复。我成功地以这种方式运行了程序。但当我将Jbutton放在JPanel上时,我不能使用setVisible()方法隐藏或显示第一个JFrame。@AndrewThompson谢谢您的评论。我会努力在这方面做得更好future@Azad很抱歉我忘了提到我使用了4个扩展的JPanel作为单独的类。在我的jb框架上,我有Jtabpane。我像这样添加了这4个JPanel
code
PublicItemFrame(){jTabbedPane1.add(“添加项目”,new AddItemPanel());jTabbedPane1.add(“删除项目”,new DeleteItemPanel());;}
code
每个面板有2个按钮。我想做的是,当我在每个Jpanel上单击“取消”按钮时,我想隐藏当前JFrame并再次显示第一帧。@user2033382:您可以编辑您的问题以包含新代码,就像Azad Eng根据Andrew的有用注释“+1”更新其答案一样。另请参见,这也适用于小程序。