java - Java 中的 Action 监听器

标签 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

最佳答案

建议:

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

所以改变这个:

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 字段。

关于java - Java 中的 Action 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19126519/

相关文章:

java - 如何从方法访问私有(private)变量?

java - 本地关闭错误意味着使用 jetty http 客户端发送 https 调用是什么意思?

java - 用于测试中调试语句的 Logger 或 System.out.print

java - 从 Jfilechooser 检索文件名到 JList

java - jTable swing中不出现垂直滚动条

java - 将 GUI 组件声明为字段是否有特定原因? ActionListener 也应该是匿名的吗?

java - 关于Jcheckbox状态,java

java - 与 GridbagLayout 一起使用时,setSize()、setMaximumSize()、setMinimumSize() 之间有什么区别

java - 如何实现空格键的actionListener作为 Action 事件

java - 如何将 MouseListeners 添加到面板网格中的单个面板?