2016-09-21 2 views
0

Я изучаю, как создавать прослушиватели событий в Java для нажатия кнопки. Я хочу, чтобы панель всплывала с элементами формы. Я создал панель в контрукторе исполнителя действия, но при ее открытии она пуста. Я думал, что имеет смысл только построить этот, а затем просто показать его, когда нажимается кнопка (actionPerformed). Очевидно, что нет :)Почему мой JPanel пуст после нажатия кнопки?

Ниже мой ActionListener класс:

package biz.martyn.budget; 

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JComboBox; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class NewTransaction implements ActionListener { 

    protected JPanel panel = new JPanel(new GridLayout(0, 1)); 

    public void NewTransaction() {  
     String [] category = {"Internet", "Clothes", "Rent", "Salary", "Groceries"}; 
     JComboBox combo = new JComboBox(category); 

     panel.add(combo); 

     panel.add(new JLabel("Description:")); 
     JTextField desc = new JTextField(); 
     panel.add(desc); 

     panel.add(new JLabel("Date:")); 
     JTextField date = new JTextField(); 
     panel.add(date); 

     panel.add(new JLabel("Amount:")); 
     JTextField amount = new JTextField(); 
     panel.add(amount); 
    } 

    @Override 
    public void actionPerformed(ActionEvent arg0) { 
     int result = JOptionPane.showConfirmDialog(null, panel, "New transaction", 
      JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); 
    } 
} 

Вот как я крепление события:

JButton newTransactionButton = new JButton("New transaction"); 
newTransactionButton.addActionListener(new NewTransaction()); 
toolbar.add(newTransactionButton); 

Я бы признателен за любые дополнительные консультации по конвенциям, делая это я вроде начинаю, спасибо.

+0

Используйте [ 'CardLayout'] (http://download.oracle.com/javase/8/docs/api/java/awt/CardLayout .html), как показано в [этом ответе] (http://stackoverflow.com/a/5786005/418556). –

ответ

2

Я построил панель в действии застройщик слушателя, но он пуст, когда он открывает

Ниже ...

public void NewTransaction() { 

... это метод, а не Конструктор. Вы должны явно вызвать его, или изменить его в конструктор

public NewTransaction() { 
Смежные вопросы