Java中的动作监听器

时间:2013-10-01 21:45:22

标签: java swing actionlistener japplet

我有一个使用Japplet的类。表单有2个输入字段和一个按钮。它还有一个TextPanel来显示用户输入的信息。我遇到的问题是使用动作侦听器显示在文本区域中输入的信息。我不知道我错过了什么。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.util.*;

public class CreatePanel extends JPanel
{
 private Vector accountList;
 private JButton button1;
 private TransferPanel transferPanel;
 final int FIELD_WIDTH = 10;
   final int ROWS = 50;
 final int COLUMNS = 50;



public CreatePanel(Vector accountList, TransferPanel tPanel)
 {
this.accountList = accountList;
this.transferPanel = tPanel;


JLabel label1 =new JLabel("Account ID: ");
JLabel label2 = new JLabel("Amount: ");
JTextField accountID = new JTextField();
JTextField amount = new JTextField();


button1 = new JButton("Create an Account");



JTextArea textArea = new JTextArea(ROWS, COLUMNS);
textArea.append("No account");
textArea.setEditable(true);

JPanel infoPanel = new JPanel();
infoPanel.setLayout(new GridLayout(3,2));
infoPanel.add(label1);
infoPanel.add(accountID);
infoPanel.add(label2);
infoPanel.add(amount);
infoPanel.add(button1);

add(infoPanel);

ActionListener listener = new ButtonListener();
button1.addActionListener(listener);

JPanel textPanel = new JPanel();
textPanel.add(textArea);

   add(textPanel);




  }



   private class ButtonListener implements ActionListener
    {


public void actionPerformed(ActionEvent event)
   {



   } //end of actionPerformed method
 } //end of ButtonListener class

} //end of CreatePanel class

3 个答案:

答案 0 :(得分:2)

建议:

  • 首先,请努力格式化您的代码。如果格式不正确(例如您当前正在显示的随机百搭缩进),我们将无法很好地理解您的代码,并且您经常会出错。每个代码块应缩进相同的数量,我通常使用2-3个空格(一个或另一个并保持一致)。另外,一行空白空间很多。
  • 至于你的问题,你的字段不应该是构造函数的本地字段,而应该是类字段,以便类的方法可以访问它们。特别是你的JTextArea。否则,您的ButtonListener将无法识别JTextArea变量,因为变量的范围将限制为声明它的块 - 这里是您的构造函数。

所以改变这个:

public class CreatePanel extends JPanel
{
 private Vector accountList;
 private JButton button1;
 private TransferPanel transferPanel;
 final int FIELD_WIDTH = 10;
   final int ROWS = 50;
 final int COLUMNS = 50;



public CreatePanel(Vector accountList, TransferPanel tPanel)
 {
this.accountList = accountList;
this.transferPanel = tPanel;


JLabel label1 =new JLabel("Account ID: ");
JLabel label2 = new JLabel("Amount: ");
JTextField accountID = new JTextField();
JTextField amount = new JTextField();


button1 = new JButton("Create an Account");



JTextArea textArea = new JTextArea(ROWS, COLUMNS);
textArea.append("No account");
textArea.setEditable(true);

// .... etc

到此(请注意格式更改):

public class CreatePanel extends JPanel {
  public static final int FIELD_WIDTH = 10;
  public static final int ROWS = 50;
  public static final int COLUMNS = 50;

  private Vector accountList;
  private JButton button1;
  private TransferPanel transferPanel;
  private JTextField accountID = new JTextField();
  private JTextField amount = new JTextField();
  private JTextArea textArea = new JTextArea(ROWS, COLUMNS);

  public CreatePanel(Vector accountList, TransferPanel tPanel) {
    accountList = accountList;
    transferPanel = tPanel;

    JLabel label1 =new JLabel("Account ID: ");
    JLabel label2 = new JLabel("Amount: ");

    button1 = new JButton("Create an Account");

    textArea.append("No account");
    textArea.setEditable(true);

    // .... etc

现在ButtonListener可以访问textArea字段。

答案 1 :(得分:0)

JTextField的{​​{3}}与JTextArea getText合并;

答案 2 :(得分:0)

我不知道我是否在某种程度上误解了你的问题,但是在ButtonListener类的actionPerformed方法中 - 你应该对传入的ActionEvents做出反应。