通过面板上的按钮从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){
}
});
}
}
答
panel.this.getParent().remove(panel.this);
如果你想要的代码继续工作,即使你嵌套子板内侧的按钮,你应该使用下面是:
SwingUtilities.getAncestorOfClass(JTabbedPane.class, panel.this).remove(panel.this);
注意:请尊重Java命名约定:类以大写字母开头。
你想删除面板,,或整个标签?顺便说一句,不要扩展'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)(具体用于名称的情况) ,方法和属性名称并一致使用。 –