2016-09-21 8 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() { 
関連する問題