我正在尝试创建一个GUI程序,它为用户提供一个按钮。单击此按钮时,将显示一个textField并提示用户输入正则表达式。
以下是我为实现这一目标所采取的步骤:
>
创建了一个JFrame,并添加了一个按钮、标签和文本字段。
最初将文本字段可见性设置为“false”。标签和按钮可见性设置为“true”
实现了ActionListener接口,并覆盖ActionPerformed方法,以便在单击按钮时将textField可见性更改为“true”。
将ActionListener实例注册到按钮。
当我以这种方式运行它时,文本字段在单击按钮后不会变得可见(它编译得很好,但在GUI中没有发生任何事情)
但是,如果我一开始将标签可见性更改为“false”,然后在ActionListener中添加一个设置为“true”的操作,它就会起作用,并且在单击按钮时标签和textfield都变得可见。
我想知道的是为什么只有在ActionListener中包含了标签时,textfield才变得可见?
换句话说,为什么这个代码不起作用?
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);
}
}
}
}
我不是百分之百确定,但我认为你不需要内部类。
对于您的问题,如果您删除了内部类,而在RegularExpressionGUI
类上实现了ActionListener
,那么在ActionPerformed
内部添加Pack()
应该可以工作,因为Pack()
应该调用Repaint
方法。如果您调用第一个代码并调整窗口的大小,您现在应该会看到它,因为在调整窗口大小时,布局管理器正在调用repaint方法。
因此,您的类现在应该是这样的:
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 implements ActionListener {
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(this);
textField1.addActionListener(this);
pack();
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
} //end constructor
//inner class containing ActionListner
@Override
public void actionPerformed(ActionEvent event) {
if (event.getSource() == button1) {
textField1.setVisible(true);
//label1.setVisible(true);
pack();
}
}
public static void main (String args[]) {
new RegularExpressionGui();
}
}
所以假设我有一个“开”和一个“关”按钮。当我按下打开按钮时,我希望打开按钮隐藏自己,关闭按钮显示出来,反之亦然。 一个人怎么能这么做?
我想创建一个下拉列表和一个按钮,功能是当我点击按钮,然后按钮不是可点击的意思是禁用,它是显示,首先点击下拉列表。然后按钮是启用的。我们如何使我尝试但没有发生,我没有太多的想法。所以任何机构帮助我解决这个问题。 我试过这个jquery函数我对jquery不太了解。所以谁来帮帮我。
我正在尝试网络抓取,我需要模拟对buttoN的点击,我已经尝试过了: 并返回此错误: selenium . common . exceptions . nosuchelementexception:消息:没有这样的元素:找不到元素:{"method":"xpath "," selector ":"//*[@ id = " CTL 00 _ CP h1 _ BtnTipoGobierno "]" }
第二ragment.java jrizal_trivia.java 主要活动。Java语言 这就是错误 错误:(28,31)错误:没有为Intent(, Class)构造函数Intent找到合适的构造函数。Intent(String, Uri)不适用(参数不匹配;无法转换为String)构造函数Intent。Intent(Context, Class)不适用(参数不匹配;无法转换为Context)
使用vue做了一个抽奖,分别为1连抽和5连抽,添加了loading变量防止按钮被短时间内被重复点击,但是同时点击1连抽和5连抽,会触发两次请求,如何避免?
我是Android Studio的新手,你能帮我吗?从下面的片段代码,我试着比较两个文本,其中一个是来自按钮,在点击test_ans按钮后,将转到'true'activity,如果他们是相同的。但不幸的是该应用程序被停止了:( 我试过delete@override public void onClick(View View),getText()变成红色,是onClick出了问题吗?请帮忙;(