1

メインフレームとパネルの 2 つのクラスがあります。メインフレームのボタンをクリックして、別のクラスからパネルを呼び出し、JFrame (メインフレーム クラス) にあるタブ付きペインに設定します。これで、パネル クラスのパネルに別のボタン (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 に答える