Can you link values for two JFormattedTextFields?

前端 未结 2 876
既然无缘
既然无缘 2021-01-27 07:11

I\'ve got an interface with 2 JFormattedTextFields for which I need the values (not just the displayed text) to be identical. Ideally they should both be editable, with a chang

相关标签:
2条回答
  • 2021-01-27 07:19

    I need the values (not just the displayed text) to be identical. Ideally they should both be editable, with a change in one being mirrored in the other.

    • use DocumentListener,

    • for example (only the one directions)

    enter image description here

    import java.awt.GridLayout;
    import javax.swing.*;
    import javax.swing.event.DocumentEvent;
    import javax.swing.event.DocumentListener;
    
    public class TextLabelMirror {
    
        private JPanel mainPanel = new JPanel();
        private JTextField field = new JTextField(20);
        private JTextField field1 = new JTextField(20);
    
        public TextLabelMirror() {
            field.getDocument().addDocumentListener(new DocumentListener() {
    
                @Override
                public void changedUpdate(DocumentEvent e) {
                    updateLabel(e);
                }
    
                @Override
                public void insertUpdate(DocumentEvent e) {
                    updateLabel(e);
                }
    
                @Override
                public void removeUpdate(DocumentEvent e) {
                    updateLabel(e);
                }
    
                private void updateLabel(DocumentEvent e) {
                    java.awt.EventQueue.invokeLater(new Runnable() {
    
                        @Override
                        public void run() {
                            field1.setText(field.getText());
                        }
                    });
                }
            });
    
            mainPanel.setLayout(new GridLayout(1, 0, 10, 0));
            mainPanel.add(field);
            mainPanel.add(field1);
        }
    
        public JComponent getComponent() {
            return mainPanel;
        }
    
        private static void createAndShowUI() {
            JFrame frame = new JFrame("TextLabelMirror");
            frame.getContentPane().add(new TextLabelMirror().getComponent());
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
            java.awt.EventQueue.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    createAndShowUI();
                }
            });
        }
    }
    
    0 讨论(0)
  • 2021-01-27 07:29

    You can use a key listener. You simply add a key listener to both fields using the below code. the reason you need the other events is it will throw errors unless you have them in the code.

    import javax.swing.*;   
    import java.awt.*;  
    import java.awt.event.*;
    
    public class CreateGrid 
    {    
        JFrame thisframe;
        JFormattedTextField jFormattedTextField1, jFormattedTextField2;
    
        public CreateGrid()
        {
            GridLayout thislayout = new GridLayout(0,2);
            thisframe = new JFrame();
            thisframe.setLayout(thislayout);
    
            jFormattedTextField1 = new JFormattedTextField();
            jFormattedTextField2 = new JFormattedTextField();
            jFormattedTextField1.addKeyListener(new KeyAdapter()
            {
                public void keyReleased(KeyEvent e) 
                {                
                    JFormattedTextField textField = (JFormattedTextField) e.getSource();
                    String text = textField.getText();
                    jFormattedTextField2.setText(text);
                }
                public void keyTyped(KeyEvent e) 
                {
                }
                public void keyPressed(KeyEvent e) 
                {
                }            
            });
            jFormattedTextField2.addKeyListener(new KeyAdapter()
            {
                public void keyReleased(KeyEvent e) 
                {                
                    JFormattedTextField textField = (JFormattedTextField) e.getSource();
                    String text = textField.getText();
                    jFormattedTextField1.setText(text);
                }
                public void keyTyped(KeyEvent e) 
                {
                }
                public void keyPressed(KeyEvent e) 
                {
               }            
           });
           thisframe.add(jFormattedTextField1);
           thisframe.add(jFormattedTextField2);
           thisframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           thisframe.setVisible(true);
           thisframe.pack();
       }
    
    public static void main(String args[])
    {
        new CreateGrid();
    }    
    

    } I have tested this out and it works perfectly what ever you type into one field will show up in the other as you type it.

    0 讨论(0)
提交回复
热议问题