第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

JTextField 需要兩倍的輸入,但為什么呢?

JTextField 需要兩倍的輸入,但為什么呢?

手掌心 2021-08-25 15:15:07
我想做一個(gè)可編程計(jì)算器,我有基本的 GUI,現(xiàn)在我正在嘗試設(shè)置按鈕和顯示器。我的顯示文本基本上是“0”,如果用戶輸入一個(gè)數(shù)字,則應(yīng)該顯示該數(shù)字。我試圖用 KeyListener 來(lái)做,但如果我按下一個(gè)鍵,它會(huì)顯示兩次。為什么? textField.addKeyListener(new KeyListener(){        boolean newNumber = true;        public void keyTyped(KeyEvent e) {        }        public void keyPressed(KeyEvent e) {            int keyCode = e.getKeyCode();            if(keyCode == e.VK_BACK_SPACE && textField.getText().length() == 1){                textField.setText("0");                newNumber = true;                }            if(textField.getText().equals("0") && newNumber){                textField.setText(KeyEvent.getKeyText(keyCode));                newNumber = false;            }        }        public void keyReleased(KeyEvent e) {        }    });輸入前:“1”輸入后:
查看完整描述

2 回答

?
海綿寶寶撒

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊

為了做到這一點(diǎn),我派生出這樣的PlainDocument:


import java.awt.EventQueue;

import java.util.regex.Pattern;


import javax.swing.JTextField;

import javax.swing.text.AttributeSet;

import javax.swing.text.BadLocationException;

import javax.swing.text.PlainDocument;


public class DigitDocument extends PlainDocument {


    private static final long       serialVersionUID    = 1L;

    protected static final Pattern  patternStartZero    = Pattern.compile("^0.+");


    protected final JTextField      textField;


    private final int               limit;

    private final Runnable          runnableFormat;


    public DigitDocument(JTextField textField, int limit) {


        super();


        this.textField = textField;

        this.limit = limit;


        runnableFormat = new Runnable() {


            @Override

            public void run() {


                String text = textField.getText();


                if (text.length() == 0) {

                    textField.setText("0");

                }

                else if (patternStartZero.matcher(text).matches()) {

                    textField.setText(text.replaceAll("^0+", ""));

                }

            }

        };

    }


    @Override

    public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException {


        str = str.replaceAll("[^0-9]", "");


        if (str.length() == 0)

            return;


        else if ((getLength() + str.length()) <= limit)

            super.insertString(offset, str, attr);


        EventQueue.invokeLater(runnableFormat);

    }


    @Override

    public void remove(int offs, int len) throws BadLocationException {

        if (!"0".equals(textField.getText()))

            super.remove(offs, len);


        EventQueue.invokeLater(runnableFormat);

    }

}

用法是:


textField.setDocument(new DigitDocument(textField, 10));

textField.setText("0");

在數(shù)字文檔中,

  • 第一個(gè)參數(shù)是 JTextField 本身。

  • 第二個(gè)參數(shù) (10) 是最大輸入長(zhǎng)度,您只能輸入數(shù)字。


查看完整回答
反對(duì) 回復(fù) 2021-08-25
  • 2 回答
  • 0 關(guān)注
  • 242 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)