У меня проблема с JTextField.Мне нужно получить текст из JTextField и изменить его позже в JDialog.Я использую ту же переменную для JTextField.До тех пор, пока вы не войдете в диалоговое окно, напечатанная строка будет тем, что вы ввели в текстовое поле.Если вы введете строку в диалоговом окне, она будет печатать только эту строку до тех пор, пока вы снова не измените ее в диалоговом окне (делает основное текстовое поле бесполезным).Я могу исправить это, добавив отдельную переменную, но хотел бы попытаться избежать ненужных объявлений.У меня сложилось впечатление, что это не должно иметь значения, так как я создаю новый объект JTextField и также избавляюсь от диалогового окна.Я что-то пропустил?Какие-нибудь мысли?
Вот макет моей проблемы.
import java.awt.event.*;
import javax.swing.*;
public class textfield extends JPanel {
private JTextField textfield;
private JButton printButton, dialogButton, okayButton;
private static JFrame frame;
public static void main(String[] args) {
frame = new JFrame();
frame.setSize(200,200);
frame.getContentPane().add(new textfield());
frame.setVisible(true);
}
private textfield() {
textfield = new JTextField(10);
add(textfield);
((AbstractButton) add(printButton = new JButton("Print"))).addActionListener(new printListener());
((AbstractButton) add(dialogButton = new JButton("Dialog"))).addActionListener(new dialogListener());
}
private class printListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String string = null;
string = textfield.getText();
System.out.println(string);
}
}
private class dialogListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
final JDialog dialog = new JDialog(frame, "Dialog", true);
JPanel p = new JPanel();
textfield = new JTextField(10);
p.add(textfield);
p.add(okayButton = new JButton(new AbstractAction("Okay") {
public void actionPerformed(ActionEvent e) {
String string = null;
string = textfield.getText();
System.out.println(string);
dialog.dispose();
}
}));
dialog.add(p);
dialog.pack();
dialog.setVisible(true);
}
}
}