Как мне установить значение текстового поля

#java #swing #jframe #actionlistener #jtextfield

Вопрос:

Мой простой вопрос в том, почему Это не работает? У него проблема с tf1.getText(), но я не понимаю, почему. Итак, я хочу, чтобы у меня была кнопка, и когда я напишу текст в tf1, а затем нажму кнопку, tf2 выведет тот же текст с некоторыми изменениями. Или мне нужен другой слушатель, который устанавливает tf1, и если да, то как мне его реализовать? Спасибо!

 public class CaesarFrame extends JFrame{  JTextField tf1;  JTextField tf2;  JButton jb;  JComboBox box;  JLabel label;  JPanel j1;  JPanel j2;    class OkButtonActionListener implements ActionListener{  public void actionPerformed(ActionEvent e) {  String k= tf1.getText(); //HERE IS THE PROBLEM  caesarCode c=new caesarCode(k);  tf2.setText(c.get());  }  }    public CaesarFrame() {  JFrame frame=new JFrame("Swinglab");  frame.setPreferredSize(new Dimension(400,110));  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  frame.setResizable(false);  String[] characters=new String[26];  for(int i=65;ilt;91;i  )//COMBOBOX-gt;  characters[i-65]=String.valueOf((char)i);  JComboBox box = new JComboBox(characters);  JTextField tf1=new JTextField("",20);  JTextField tf2=new JTextField("",20);  JButton jb=new JButton("Code!");  ActionListener listen=new OkButtonActionListener(); //ACTIONLISTENER  jb.addActionListener(listen);  JLabel label= new JLabel("Output: ");  JPanel j1=new JPanel();  JPanel j2=new JPanel();  j1.add(box);//ITT IS LEEBTNE LAYOUTOT ADNI  j1.add(tf1);  j1.add(jb);  j2.add(label);  j2.add(tf2);  tf2.setEditable(false);  frame.add(j1,BorderLayout.NORTH);  frame.add(j2,BorderLayout.SOUTH);  frame.pack();  frame.setVisible(true);  } }  

Комментарии:

1. вы работаете с несколькими текстовыми полями, они объявлены на уровне класса, но повторно объявите их внутри метода, в котором вы их создаете. Вы задаете значение в локальном, но пытаетесь получить значения из элемента экземпляра, в котором нет значения.

Ответ №1:

Как сказал Штультуске в комментарии, вы повторно объявляете глобальные поля tf1 и tf2 в своем конструкторе. Это означает, что tf1, который вы видите в своей JPanel, находится только в вашем методе конструктора и не совпадает с глобальным полем tf1.