通过面板上的按钮从JTabbedPane中移除面板

问题描述:

我有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)(具体用于名称的情况) ,方法和属性名称并一致使用。 –

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