2011-12-16 7 views
0

У меня проблема с Swing. У меня есть JFrame под названием FrameMain. Внутри это JPanel под названием panelChoices.Управление другим классом из другого класса

Когда FrameMain называется/создан, он заполняет panelChoices объект с рядом PanelEntries объектов, что является JPanel с рядом JButton с в нем (это другой класс, который я написал).

То, что я хочу сделать, когда я нажимаю на одну из кнопок внутри PanelEntries объекта, я хочу уничтожить/удалить FrameMain, наряду с остальной частью него компонентов (в том числе PanelEntries объекта, который содержит JButton).

Я попытался с помощью super, но он возвращает JPanelPanelEntries объект), который держит JButton и не FrameMain, что держит их вместе. Как я могу это достичь?

EDIT: Кажется, что я недостаточно ясен, так что вот немного больше информации из моей работы. У меня нет фактического кода прямо сейчас, потому что я на другой машине, но надеюсь, что это поможет уточнить мой вопрос.

public class FrameMain() { 
    private JFrame frameMain; 
    private JPanel panelChoices; 

    public FrameMain(args) { 
     createGUI(); 
     loadData(); 
    } 

    private void createGUI() { 
     JFrame frameMain = new JFrame(); 
     JPanel panelChoices = new JPanel(new GridLayout(1,1)); 
     frameMain.add(panel); 
     // removed formatting and other design codes since they are not important. 
     pack(); 
    } 

    private void loadData() { 
     boolean available; 
     for (int i = 1; i <= 10; i++) { 
      // do some if/else and give value to boolean available 
      PanelEntries panel = new PanelEntries(i, available); 
      frameMain.add(panel); 
      // more code here to handle data. 
     } 
    } 
} 

public class PanelEntries() extends JPanel { 

    public PanelEntries(int num, boolean avb) { 
     JButton button = new JButton("Button Number " + num); 
     button.setEnabled(avb); 
     add(button); 
     // add action listener to created button so that it calls 'nextScreen()' when clicked. 
     // more code 
     pack(); 
    } 

    private void nextScreen() { 
     // destroy/dispose MainFrame here. 
     // See Notes. 
     AnotherFrame anotherFrame = new AnotherFrame(); 
    } 
} 

Примечания:

  1. Все классы в их собственном .java файле.
  2. Мне нужно знать , как распоряжаться FrameMain с помощью кнопки внутри объекта PanelEntries объекта, а не просто располагать JFrame.
+1

Можете ли вы предоставить отрывок из вашего кода. Я думаю, это было бы более понятно, чем стена текста – fyr

+0

Похоже, вы пытаетесь «выйти» из приложения. Это верно? –

+1

Что делает 'super' в' JPanel'? Возвращает ли он «FrameMain»? 'super.dothis()' для запуска 'dothis()' в 'JPanel'. Тогда 'super.dothat()' в 'Jpanel' должен дать вам то, что вам нужно. – abhinav

ответ

2

Согласно данной информации,

  1. Если вы хотите, чтобы выйти из приложения, его не большая польза сделка System.exit(0); :)

  2. Если вы имеете в виду расположить рамку, jframe.dispose();

  3. Если вы хотите удалить компонент/все компоненты, вы можете использовать .remove(Component)/.removeAll() etc

Если это не помогло, пожалуйста, перепишите свой вопрос с дополнительной информацией.

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