2012-06-22 54 views
0

我有2個類,mainFrame和panel。通過單擊mainFrame上的按鈕,我可以從另一個類調用面板,並將其設置在JFrame(mainFrame類)中的選項卡式窗格中。現在,我在面板類的面板上還有另一個按鈕(btnRemove)。所以當我點擊那個按鈕時,我想從mainFrame類的選項卡窗格中移除我的面板。我如何正確編寫我的聽衆?通過面板上的按鈕從JTabbedPane中移除面板

大型機級:

import javax.swing.*; 
import java.awt.event.*; 
import java.awt.*; 
public class MainFrame extends JFrame { 
JTabbedPane tPane = new JTabbedPane(); 
JButton btn = new JButton("Add panel"); 
public MainFrame(){ 
    setSize(400,300); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setVisible(true); 
    setLayout(new BorderLayout()); 
    add(tPane, BorderLayout.CENTER); 
    add(btn,BorderLayout.NORTH); 
    btn.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e){ 
      panel p = new panel(); 
      tPane.add("Panel",p); 
     } 
    }); 
} 

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

面板類:

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 
public class Panel extends JPanel{ 
JButton btnRemove = new JButton("Remove panel"); 

public Panel(){ 
    setLayout(new FlowLayout()); 
    add(btnRemove); 
    btnRemove.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e){ 

     } 
    }); 

} 
} 
+1

你想刪除面板,,或整個標籤?順便說一句,不要擴展'JFrame'或'JPanel' - 而應該有一個框架實例和一個產生'JPanel'的方法。2)不要調用setSize()。3)使用'JFrame.DISPOSE_ON_CLOSE' 4)在添加組件並調用pack()後,不要調用'setVisible(true)'。 5)應該在EDT上創建和更改GUI。 6)請學習常見的[Java命名約定](http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#73307)(具體用於名稱的情況) ,方法和屬性名稱並一致使用。 –

回答

2
panel.this.getParent().remove(panel.this); 

如果你想要的代碼繼續工作,即使你嵌套子板內側的按鈕,你應該使用下面是:

SwingUtilities.getAncestorOfClass(JTabbedPane.class, panel.this).remove(panel.this); 

注意:請尊重Java命名約定:類以大寫字母開頭。

+0

抱歉違反標準。並感謝您的回答。 –

+0

@ brano88:通過使代碼更具可讀性,標準將使您受益匪淺,因此更易於審查。 – trashgod

+3

+1但是爲了避免stonesedges,請看[SwingUtilities](http://docs.oracle.com/javase/7/docs/api/javax/swing/SwingUtilities.html) – mKorbel