Java JButton';执行的操作不';t更改JTextField';使用.setText()方法创建文本

Java JButton';执行的操作不';t更改JTextField';使用.setText()方法创建文本,java,swing,Java,Swing,我有这个密码。。。其中有一个问题,如标题所示:单击按钮时,JTextField的文本不会更改。我不知道问题出在哪里,但我认为actionPerformed会在消息对话框出现时执行。我尝试使用构造函数(类Start)(而不是函数“doIt”),但它也不起作用 import javax.swing.*; import java.awt.FlowLayout; import java.awt.*; import java.awt.event.*; public class PalTransfer {

我有这个密码。。。其中有一个问题,如标题所示:单击按钮时,JTextField的文本不会更改。我不知道问题出在哪里,但我认为actionPerformed会在消息对话框出现时执行。我尝试使用构造函数(类Start)(而不是函数“doIt”),但它也不起作用

import javax.swing.*;
import java.awt.FlowLayout;
import java.awt.*;
import java.awt.event.*;

public class PalTransfer
{
    public static void main(String[] args)
    {
        Starter starter = new Starter();
        starter.doIt();
    }
}


class Starter
{
  JFrame PTMainFrame = new JFrame("In/Out - arch - access, ...");
  JTextField TextFieldOfIP = new JTextField(20);
  //String string = "I AM START OF STARTER";


  void doIt()
  {
    PTMainFrame.setSize(900, 400); // Set the frame size
    PTMainFrame.setLocationRelativeTo(null);
    PTMainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JTextField TextFieldOfIP = new JTextField(20);
    JButton jBtn = new JButton("I AM A BUTTON!");

    PTMainFrame.add(jBtn);
    PTMainFrame.add(TextFieldOfIP);

    FlowLayout layoutManager = new FlowLayout(0,10,5);
    PTMainFrame.setLayout(layoutManager);

    TextFieldOfIP.setText("I am doIt() method!"); //+++++++++++++++++++++++++++

    jBtn.addActionListener(new ButtonListener());

    PTMainFrame.setVisible(true); // to do // put later
  }

  class ButtonListener implements ActionListener
  {
    @Override
    public void actionPerformed(ActionEvent e)
    {
      JOptionPane.showMessageDialog(null, "hello?");
      TextFieldOfIP.setText("I am actionPerformed of JButton!");

    }
  }

}


你有你的class属性
TextFieldOfIP
,你的ButtonListeners正在执行
setText
。但是在
doIt()
方法中还有一个名为
TextFieldOfIP
的局部变量。这就是你放在JFrame上的对象


删除此重新定义行:
JTextField TextFieldOfIP=newjtextfield(20)doIt()
方法的code>。然后,您在JFrame上放置的对象与ButtonListener正在执行
setText
的对象相同,一切都将按预期工作。

为什么定义了两次

 JTextField TextFieldOfIP = new JTextField(20);
DoIt()方法中删除它,它将起作用