2013-02-26 28 views
0

在我的Swing应用程序中,我的MainFrame中带有“添加客户”按钮。当我点击“添加客户”按钮时,我希望客户窗体在MainFrame消失时出现。客户表单只有JTabbedPane。 AddCustomerPanel是一个独立的类,它只有取消按钮。 AddCustomerPanel作为选项卡添加到Customer窗体的JTabbedPane。当我点击取消按钮时,我希望客户框架消失,并再次出现主机。我尝试使用setVisible()方法。但它没有奏效。请帮助我做到这一点。setVisible()方法不适用于放置在JPanel上的JButton

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

class MainFrame extends JFrame{ 
    private JButton btnMain; 

    MainFrame(){ 
     setSize(400,200); 
     setVisible(true); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
     setLayout(new FlowLayout());   
     btnMain = new JButton("Add Customer"); 

     btnMain.addActionListener(new ActionListener(){ 
       public void actionPerformed(ActionEvent e){ 
         new Customer().setVisible(true); 
         this.setVisible(false); // Not working 
       } 
     }); 

     add(btnMain); 
    } 
    public static void main(String args[]){ 
     new MainFrame(); 
    } 
} 

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

class Customer extends JFrame{ 
    private JTabbedPane tabMain; 

    Customer(){ 
     setSize(500,300); 
     setVisible(true); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
     setLayout(new FlowLayout()); 
     tabMain = new JTabbedPane(); 
     tabMain.setPreferredSize(new Dimension(490,290)); 
     tabMain.add("Add Customer",new AddCustomerPanel()); 
     add(tabMain); 
    } 
} 

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

class AddCustomerPanel extends JPanel{ 

    private JButton btnCancel; 

    AddCustomerPanel(){ 
     setSize(400,200); 
     setVisible(true); 
     setLayout(new FlowLayout()); 
     btnCancel = new JButton("Cancel"); 
     btnCancel.addActionListener(new ActionListener(){ 
       public void actionPerformed(ActionEvent e){ 
         this.setVisible(false); // Not working 
         new MainFrame().setVisible(true); 

       } 
     }); 
     add(btnCancel); 
    } 
} 
+0

我找到了答案:) SwingUtilities.getWindowAncestor(本).setVisible(假); new MainFrame()。setVisible(true); – amal 2013-02-26 14:12:05

+0

@Dukeling - 我已经发布它作为答案。但我必须等待20小时才能接受它。 – amal 2013-02-27 14:22:59

回答

1

我找到了解决办法。

SwingUtilities.getWindowAncestor(this).setVisible(false); 

new MainFrame().setVisible(true);