当前位置: 首页 > 知识库问答 >
问题:

如何使一个文本字段可见时,一个按钮被点击在Java?

洪育
2023-03-14

我正在尝试创建一个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);
             }
           } 
      }
    
    }
    
  • 共有1个答案

    堵睿范
    2023-03-14

    我不是百分之百确定,但我认为你不需要内部类。

    对于您的问题,如果您删除了内部类,而在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出了问题吗?请帮忙;(