【问题标题】:Hide/Show JFrame using Jbutton on JPanel使用 JPanel 上的 Jbutton 隐藏/显示 JFrame
【发布时间】:2013-02-09 16:02:48
【问题描述】:

在我的 Swing 应用程序中,我有 2 个 JFrame A 和 B。当我单击 JFrame A 上的按钮时,它会打开 JFrame B 并隐藏自身(我设法做到了那部分)

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

当我单击 JPanel 上的 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());
 }

}

【问题讨论】:

标签: java swing jframe


【解决方案1】:

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

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

【讨论】:

  • public class Java extends JFrame implements ActionListener 命名不佳的类,除非添加新功能,否则不要扩展框架,最好创建匿名侦听器或操作。我不推荐使用此代码进行学习。此外,对代码块使用一致且合乎逻辑的缩进。代码的缩进是为了帮助人们理解程序流程。
  • 感谢您的回复。我设法以这种方式运行程序。但是当我将 Jbutton 放在 JPanel 上时,我无法使用 setVisible() 方法来隐藏或显示第一个 JFrame。
  • @AndrewThompson 感谢您的评论。未来我会努力变得更好
  • @Azad Eng 嗨。对不起,我忘了提到我使用 4 个扩展的 JPanel 作为单独的类。在我的 JFrame B 上,我有 Jtabpane。我已经像这样添加了这 4 个 JPanel。 codepublic ItemFrame() { jTabbedPane1.add("添加项目",new AddItemPanel()); jTabbedPane1.add("删除项目",new DeleteItemPanel());; }code 每个面板有 2 个 Jbutton。我想要做的是,当我单击每个 Jpanel 上的取消按钮时,我想隐藏当前的 JFrame 并再次显示第一帧。
  • @user2033382:您可以编辑您的问题以包含新代码,就像 Azad Eng 更新他的答案以响应 Andrew 的有用 cmets'+1。另请参阅Initial Threads,它也适用于小程序。
猜你喜欢
  • 2011-05-16
  • 1970-01-01
  • 2014-12-27
  • 1970-01-01
  • 1970-01-01
  • 2014-10-02
  • 2011-05-24
  • 2012-11-21
  • 2014-09-09
相关资源
最近更新 更多