JButton actionPerformed не изменяет текст 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
{
    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!");

    }
  }

}

  

Ответ №1:

Почему вы определили это дважды.

  JTextField TextFieldOfIP = new JTextField(20);
  

Удалите его из метода DoIt(), он будет работать.

Ответ №2:

У вас есть атрибут класса TextFieldOfIP , который ваши ButtonListeners выполняют setText . Но, кроме того, у вас есть локальная переменная, вызываемая TextFieldOfIP в вашем doIt() методе. И это объект, который вы размещаете в своем JFrame.

Удалите эту строку переопределения: JTextField TextFieldOfIP = new JTextField(20); вашего doIt() метода. Затем вы помещаете в свой JFrame тот же объект, который выполняет ваш ButtonListener, setText и все будет работать так, как ожидалось.