#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.