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

时间:2012-06-22 18:29:29

标签: java swing jtabbedpane

我有2个类,mainFrame和panel。通过单击mainFrame上的按钮我从另一个类调用面板并将其设置在JFrame(mainFrame类)中的选项卡式窗格中。现在,我在面板类的面板上有另一个按钮(btnRemove)。因此,当我单击该按钮时,我想从mainFrame类中的选项卡式窗格中删除我的面板。我该如何正确地写出我的听众?

mainFrame类:

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 个答案:

答案 0 :(得分:2)

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

如果您希望代码保持工作,即使您将按钮嵌套在子面板中,也应该使用以下内容:

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

附注:请尊重Java命名约定:类以大写字母开头。