2013-02-26 98 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);