2012-06-22 2 views
0

У меня есть 2 класса, mainFrame и панель. Нажимая кнопку на mainFrame, я вызываю панель из другого класса и устанавливаю ее в панели с вкладками, которая находится в JFrame (класс mainFrame). Теперь у меня есть еще одна кнопка (btnRemove) на моей панели в классе панели. Поэтому, когда я нажимаю эту кнопку, я хочу удалить панель из панели с вкладками в классе mainFrame. Как написать свой слушатель правильно?Снятие панели с JTabbedPane с помощью кнопки на панели

класс 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

Вы хотите удалить панель или всю вкладку? BTW - 1) Не расширяйте 'JFrame' или' JPanel' - вместо этого есть экземпляр фрейма и метод для создания 'JPanel' 2) Не вызывайте' setSize() '3) Используйте' JFrame.DISPOSE_ON_CLOSE' 4) Не вызывайте 'setVisible (true)' до тех пор, пока не будут добавлены компоненты и вызывается 'pack()'. 5) Графический интерфейс должен быть создан и изменен на EDT. 6) Изучите общие [соглашения об именах Java] (http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#73307) (в частности, для имен, используемых для имен) для класса , имя метода и атрибутов и использовать его последовательно. –

ответ

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

Если вы хотите, чтобы код, чтобы продолжать работать, даже если гнездо кнопки внутри вложенной панели, вы должны использовать следующее:

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

Примечание: соблюдайте соглашения об именах Java: классы начинаются с прописных букв.

+0

Извините за нарушение стандартов. И спасибо за ответ. –

+0

@ brano88: Стандарты приносят пользу, делая код более читабельным, следовательно, его легче критиковать. – trashgod

+3

+1, но чтобы избежать камней, посмотрите на [SwingUtilities] (http://docs.oracle.com/javase/7/docs/api/javax/swing/SwingUtilities.html) – mKorbel

Смежные вопросы