how to make cursor can enter jtextfield but the only way to give it a text is click a button?

前端 未结 2 767
旧巷少年郎
旧巷少年郎 2021-01-14 16:24

i have jTextfield and jButton..

how to

  • user can click on jTextfield(mouse can enter/exited on jtextfield), but if user typing something it will not do
2条回答
  •  难免孤独
    2021-01-14 16:52

    in the key listener of the jTextfield, in the keyTyped event, check the e.getKeyChar() if it is the backspace, if not, do e.consume(); it will cancel the event

    the keychar for backspace is 8

    here is an example:

    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JTextField;
    
    
    public class ConsumeExceptForBackSpace extends JFrame {
    
        private boolean canWrite = false;
    
        public ConsumeExceptForBackSpace() {
            super();
    
            JButton b = new JButton("Click");
            JTextField f = new JTextField("");
            this.setLayout(new BorderLayout());
            this.add(b, BorderLayout.CENTER);
            this.add(f, BorderLayout.SOUTH);
    
            b.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    canWrite = !canWrite;
                }
            });
    
            f.addKeyListener(new KeyListener() {
    
                @Override
                public void keyTyped(KeyEvent e) {
                    if(e.getKeyChar() != KekEvent.VK_BACK_SPACE && !canWrite) e.consume();
                }
    
                @Override
                public void keyReleased(KeyEvent e) {
    
                }
    
                @Override
                public void keyPressed(KeyEvent e) {
    
                }
            });
    
            this.pack();
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
            this.setVisible(true);
        }
    
        public static void main(String[] args) {
            new ConsumeExceptForBackSpace();
        }
    }
    

提交回复
热议问题