首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActionListener from按钮对于JTextField,无法解析JTextField

ActionListener from按钮对于JTextField,无法解析JTextField
EN

Stack Overflow用户
提问于 2015-06-11 04:02:51
回答 3查看 204关注 0票数 2

我想在下个学期要做的事情上抢先一步。它基本上是一个手机的模板,由一个JTextField组成,用于显示按下的按钮。我的问题是,当创建我的actionlistener时,JTextField (名为"numIn")不被识别,得到一个错误,说它不能被解析。下面是我设置手机JPanel的代码:

代码语言:javascript
复制
public class Template
{
    // the dial pad button strings
    private static final String[][] BUTTONSTRINGS =
    {
        {"1", "2", "3"},
        {"4", "5", "6"},
        {"7", "8", "9"},
        {"*", "0", "#"}
    };

    private static final Dimension JUNK_SIZE = new Dimension(200, 160);
    private JPanel mainPanel = new JPanel();

    public Template()
    {
        JTextField numIn = new JTextField("Enter Phone Number");
        JTextField numDisplay = new JTextField("PhoneNumber");
        JPanel otherJunkPanel = new JPanel();
        otherJunkPanel.add(numDisplay);
        otherJunkPanel.add(numIn);
        otherJunkPanel.add(new JButton("Send"));
        otherJunkPanel.setPreferredSize(JUNK_SIZE);

        JPanel dialPadPanel = new JPanel(new GridLayout(0, 3));

下面是两个动作监听器,一个用于数字,另一个用于非数字:

代码语言:javascript
复制
// action listener for the number buttons only 
NumberButtonListener numberBtnListener = new NumberButtonListener();
// listener for other buttons
NonNumberButtonListener nonNumberBtnListener = new NonNumberButtonListener();
for (int i = 0; i < BUTTONSTRINGS.length; i++)
{
    for (int j = 0; j < BUTTONSTRINGS[i].length; j++)
    {
        String btnString = BUTTONSTRINGS[i][j]; // get the button string from array
        JButton btn = new JButton(btnString); // use it to make button

        // if a number button, add the number button's listener
        if ("012345679".contains(btnString))
        {
            btn.addActionListener(numberBtnListener);
        }
        else
        {
            btn.addActionListener(nonNumberBtnListener);
        }

这就是我的错误所在,当我告诉操作侦听器在名为" numIn“的JTextField上显示按钮时,numIn无法识别:

代码语言:javascript
复制
private class NumberButtonListener implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {   
        String buttonPressedString = e.getActionCommand();
        numIn.setText("Number Button Pressed: " + buttonPressedString);
        // TODO finish      
    }
}

我在编码方面不是很强,因为它不是我的专业,所以我感谢任何可能的帮助。我可能应该先说,这段代码的大部分都是从我过去做过的零星实验中得到的。谢谢!

EN

回答 3

Stack Overflow用户

发布于 2015-06-11 04:06:30

您的numIn是构造器上的一个局部变量。

如果要在其他方法上使用它,则应将其声明为类变量。(或者通过方法的参数传递)

票数 0
EN

Stack Overflow用户

发布于 2015-06-11 04:07:08

代码语言:javascript
复制
    JTextField numIn = new JTextField("Enter Phone Number");
    JTextField numDisplay = new JTextField("PhoneNumber");
    public Template()
    {
       .......

你需要把它放在类级作用域中。目前它在构造器中。因此,它不能用于构造函数的外部

票数 0
EN

Stack Overflow用户

发布于 2015-06-11 04:15:25

尝尝这个

代码语言:javascript
复制
private class NumberButtonListener implements ActionListener
 {
 Template parent=null;
 NumberButtonListener(Template parent)
 {
    this.parent = parent;
 }

  public void actionPerformed(ActionEvent e)
  {

    String buttonPressedString = e.getActionCommand();
     parent.numIn.setText("Number Button Pressed: " + buttonPressedString);
    // TODO finish      
  }
 }

然后改变这个

代码语言:javascript
复制
 NumberButtonListener numberBtnListener = new NumberButtonListener();

代码语言:javascript
复制
 NumberButtonListener numberBtnListener = new NumberButtonListener(this);

将新的私有字段添加到模板类中

代码语言:javascript
复制
  private JTextField numIn=null;

在构造函数中更改为

代码语言:javascript
复制
  numIn = new JTextField("Enter Phone Number");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30766210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档