1

我有 2 个类,mainFrame 和面板。通过单击 mainFrame 上的按钮,我从另一个类调用面板并将其设置在 JFrame(mainFrame 类)中的选项卡式窗格中。现在,我在面板类的面板上有另一个按钮 (btnRemove)。因此,当我单击该按钮时,我想从 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){

        }
    });

}
}
4

1 回答 1

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

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

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

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

于 2012-06-22T18:35:52.853 回答