繁体   English   中英

使用侦听器通过一次调用更新多个JTextField

[英]Updating multiple JTextFields with a single call using a Listener

使用JButton,我可以创建一个AbstractAction并将其与许多JButtons关联,从而使我能够使用1条命令启用/禁用许多按钮。

我想具有类似的功能,但可以通过一次调用更新许多JTextField的值。 不幸的是,我无法确定什么类型的动作/监听器或使用什么类型。

以下是创建2个JFrame的基本代码示例。 一帧有一个JButton和一个JTextField。 第二帧只有一个JTextField。

无论是单击按钮还是在JTextfield中单击Return,计数器都会递增,并且仅出现在frame1的JTextField中。 尽管在第2帧的JTextField中按Enter,该值仍仅在第1帧更新。

主要目标是通过doData()BUT更新两个帧上的JTextField,以通过某些Action或Listener或其他方式(而不是直接引用JTextField本身)来进行更新。

    import java.awt.event.*;
    import java.awt.*;
    import java.beans.PropertyChangeEvent;
    import java.beans.PropertyChangeListener;

    import javax.swing.*;

    public class DetachedUpdate 
    {
      JTextField field1 = new JTextField();
      int x = 1;
      public static void main(final String args[]) 
      {
          DetachedUpdate myApp = new DetachedUpdate();
          myApp.field1.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    System.out.println("actionPerformed()");
                    myApp.doData();
                }
            });
          buildFrame1(myApp.field1, myApp);
          buildFrame2(myApp.field1, myApp);
      }

      public void doData()
      {
          System.out.println("doData()");
          field1.setText(new Integer(x++).toString());
      }

      public static void buildFrame1(JTextField txtField, DetachedUpdate x)
      {

            JFrame frame = new JFrame("JToolBar Example");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            JToolBar toolbar = new JToolBar();
            toolbar.setRollover(true);

            JButton button1 = new JButton("Button 1");

            button1.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    System.out.println("actionPerformed()");
                    x.doData();
                }
            });

            toolbar.add(button1);
            toolbar.add(txtField);
            Container contentPane = frame.getContentPane();
            contentPane.add(toolbar, BorderLayout.NORTH);
            contentPane.setPreferredSize(new Dimension(10,10));
            frame.setSize(500, 500);
            frame.setVisible(true);
      }

      public static void buildFrame2(JTextField txtField, DetachedUpdate x)
      {
          JTextField newField = new JTextField();

            ActionListener[] listeners = txtField.getActionListeners();  
            for (int i = 0; i < listeners.length; i++)
            {
                newField.addActionListener(listeners[i]);
            }

            JFrame frame = new JFrame("JToolBar Example");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            JToolBar toolbar = new JToolBar();
            toolbar.setRollover(true);

            JButton button1 = new JButton("Button 1");

            toolbar.add(newField);
            Container contentPane = frame.getContentPane();
            contentPane.add(toolbar, BorderLayout.NORTH);
            contentPane.setPreferredSize(new Dimension(10,10));
            frame.setSize(500, 500);
            frame.setVisible(true);
      }
    }

两个字段都使用actionPerformed本身,但这不会自动同步字段内容。 查看DocumentListener并尝试对两者使用相同的DocumentListener。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM