2013-12-11 2 views
1

У меня есть проблема, чтобы использовать прослушиватель действий для вызова функции void в том же классе.использовать actionlistener для вызова функции void в том же классе

пример .. код:

public class Product extends JPanel { 

    JButton add; 
    JPanel pAdd; 
    JLabel test; 
    JFrame frame; 

    public Product() { 
     add = new JButton("Add Product"); 
     add.addActionListener(new ButtonListener()); 

     add(add); 
    } 

    public void panelAdd(){ 
     pAdd = new JPanel(); 
     pAdd.add(new JLabel("try")); 
     add(pAdd); 

    } 

    private class ButtonListener implements ActionListener { 
     public void actionPerformed(ActionEvent event) { 
      panelAdd(); 
     } 
    } 
} 

Как сделать называть недействительным метод panelAdd?

+1

Создание продукта статичным, или создать конструктор для ButtonListener с экземпляром продукта, чтобы держать его в поле – Charline

+1

я не получаю вашу проблему. Класс компилируется. Таким образом, вы можете назвать свой метод void таким! Итак, каков ваш реальный вопрос? – bobbel

+0

bobbel .. да, класс компилируется .. но мой gui не появляется .. сначала я запускаю общедоступный метод продукта .. тогда, когда я нажимаю кнопку «добавить», я хочу, чтобы он запускал метод panelAdd .. но это не появляется .. –

ответ

0

При добавлении компонентов к видимым JFrame/JPanel/другие компоненты, вы NEET вызвать revalidate() и repaint() методы после добавления. Измените ваш panelAdd() как следующий:

public void panelAdd(){ 
    pAdd = new JPanel(); 
    pAdd.add(new JLabel("try")); 
    add(pAdd); 
    revalidate(); 
    repaint(); 
} 
+0

thankx .. это работа :) –

0

Если вы поставите

System.out.println("hi"); 

в

public void panelAdd(){ 
    System.out.println("hi"); 
    pAdd = new JPanel(); 
    pAdd.add(new JLabel("try")); 
    add(pAdd); 

}

вы увидите привет печататься на вашей консоли, ваш код работает, но у вас есть проблемы в макете.

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