Я пытаюсь создать программу с графическим интерфейсом, которая предоставляет пользователю кнопку. При нажатии этой кнопки отображается текстовое поле и предлагается пользователю ввести регулярное выражение.
Вот шаги, которые я предпринял до сих пор, чтобы реализовать это:
Создал JFrame и добавил кнопку, метку и текстовое поле.
Сначала установите для видимости текстового поля значение «false». Для видимости ярлыков и кнопок установлено значение «true».
Реализован интерфейс ActionListener и переопределен метод ActionPerformed, чтобы изменить видимость textField на «true» при нажатии кнопки.
Зарегистрировал экземпляр ActionListener для кнопки.
Когда я запускаю его таким образом, текстовое поле НЕ становится видимым после нажатия кнопки (он компилируется нормально, но в графическом интерфейсе ничего не происходит)
Однако, если я сначала изменю видимость метки на «false», а затем добавлю действие для установки «true» в ActionListener, оно сработает, и ОБА метка и текстовое поле станут видимыми при нажатии кнопки.
Я хочу знать, почему текстовое поле становится видимым только тогда, когда в ActionListener включена метка?
Другими словами, почему этот код НЕ работает?
import java.awt.FlowLayout;
import java.awt.Container;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class RegularExpressionGui extends JFrame {
private final JLabel label1; //label
private final JTextField textField1;
private JTextField textField2; //text field
private final JButton button1; //button
private final JTextArea textArea1; //textArea
public RegularExpressionGui() {
super("Regular Expression Lookup");
setLayout(new FlowLayout()); //GUI Layout
//add the components
label1 = new JLabel("Regular Expression");
label1.setVisible(true);
add(label1);
textField1 = new JTextField("Enter Regular Expression here");
textField1.setVisible(false);
add(textField1);
button1 = new JButton("Lookup Expression");
add(button1);
textArea1 = new JTextArea("Results");
add(new JScrollPane(textArea1)); //makes the output area scrollable
LookupHandler lookup = new LookupHandler();
button1.addActionListener(lookup);
textField1.addActionListener(lookup);
} //end constructor
//inner class containing ActionListner
private class LookupHandler implements ActionListener {
@Override
public void actionPerformed(ActionEvent event) {
if (event.getSource() == button1) {
textField1.setVisible(true);
}
}
}
}
И почему вместо этого работает этот?
import java.awt.FlowLayout;
import java.awt.Container;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class RegularExpressionGui extends JFrame {
private final JLabel label1; //label
private final JTextField textField1;
private JTextField textField2; //text field
private final JButton button1; //button
private final JTextArea textArea1; //textArea
public RegularExpressionGui() {
super("Regular Expression Lookup");
setLayout(new FlowLayout()); //GUI Layout
//add the components
label1 = new JLabel("Regular Expression");
label1.setVisible(false);
add(label1);
textField1 = new JTextField("Enter Regular Expression here");
textField1.setVisible(false);
add(textField1);
button1 = new JButton("Lookup Expression");
add(button1);
textArea1 = new JTextArea("Results");
add(new JScrollPane(textArea1)); //makes the output area scrollable
LookupHandler lookup = new LookupHandler();
button1.addActionListener(lookup);
textField1.addActionListener(lookup);
} //end constructor
//inner class containing ActionListner
private class LookupHandler implements ActionListener {
@Override
public void actionPerformed(ActionEvent event) {
if (event.getSource() == button1) {
textField1.setVisible(true);
label1.setVisible(true);
}
}
}
}