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

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

不可編輯的 jTextField 在按刪除鍵時發(fā)出錯誤聲音,如何解決?

不可編輯的 jTextField 在按刪除鍵時發(fā)出錯誤聲音,如何解決?

慕碼人2483693 2023-03-09 14:37:35
我正在用 java 做一個計算器,以便于制作,并且不要將文檔過濾器放在 jtextfield 中。我選擇使 jtextfield 不可編輯并添加一個按鍵偵聽器,但是當(dāng)您按下刪除按鈕時,它會發(fā)出錯誤聲音。我去配置中更改系統(tǒng)的聲音,我已經(jīng)更改了系統(tǒng)的聲音,我發(fā)現(xiàn)它是由“預(yù)定bip”發(fā)出的聲音,并發(fā)出“Windows 背景”的聲音。我可以更改我的選項并且不聽聲音,但我希望這款游戲可以在互聯(lián)網(wǎng)上下載。這是一個簡單的示例:如果您在文本字段中按下刪除鍵,它將發(fā)出聲音:public Example() {        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);        setBounds(0, 0,250,200);        setLayout(null);        javax.swing.JTextField jTextField1 = new javax.swing.JTextField();        jTextField1.setEditable(false);        jTextField1.setBounds(30,50,180,60);        add(jTextField1);    }    public static void main(String args[]) {        Example a = new Example();        a.setVisible(true);    }}在該代碼中,文本字段不可編輯,在下一個代碼中,文本字段不會發(fā)出聲音:    public Example() {        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);        setBounds(0, 0,250,200);        setLayout(null);        javax.swing.JTextField jTextField1 = new javax.swing.JTextField();        jTextField1.setEditable(true);        jTextField1.setBounds(30,50,180,60);        add(jTextField1);    }    public static void main(String args[]) {        Example a = new Example();        a.setVisible(true);    }}這是因為文本字段是可編輯的。如果您能幫助我,告訴我如何修復(fù)它或如何更改代碼中的系統(tǒng)聲音,或者您認(rèn)為可以幫助我的任何事情,我將不勝感激。
查看完整描述

1 回答

?
元芳怎么了

TA貢獻(xiàn)1798條經(jīng)驗 獲得超7個贊

即使 JTextField 是可編輯的,您通過按 del 鍵得到的聲音也會出現(xiàn),并且是對按下的鍵的操作系統(tǒng)相關(guān)的響應(yīng)。解決這個問題的方法是防止 del 鍵注冊它已被按下,而做到這一點(diǎn)的方法是使用鍵綁定使 del 鍵在 GUI 中沒有響應(yīng)——給出一個不執(zhí)行任何操作的響應(yīng)當(dāng)文本字段具有焦點(diǎn)時按下 del 鍵。例如:


import java.awt.event.ActionEvent;

import java.awt.event.KeyEvent;

import javax.swing.*;


@SuppressWarnings("serial")

public class Example extends JFrame {

    public Example() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        // setBounds(0, 0,250,200);

        // setLayout(null);


        JPanel panel = new JPanel();

        int gap = 40;

        panel.setBorder(BorderFactory.createEmptyBorder(gap, gap, gap, gap));


        JTextField jTextField1 = new JTextField(20);

        jTextField1.setEditable(false);

        panel.add(jTextField1);


        // get input and action maps to do key binding

        InputMap inputMap = jTextField1.getInputMap(JComponent.WHEN_FOCUSED);

        ActionMap actionMap = jTextField1.getActionMap();


        // the key stroke that we want to change bindings on: delete key

        KeyStroke delKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0);


        // tell the input map to map the key stroke to a String of our choosing

        inputMap.put(delKeyStroke, delKeyStroke.toString());


        // map this same key String to an action that does **nothing**

        actionMap.put(delKeyStroke.toString(), new AbstractAction() {


            @Override

            public void actionPerformed(ActionEvent e) {

                // do nothing

            }

        });


        add(panel);

    }


    public static void main(String args[]) {

        SwingUtilities.invokeLater(() -> {

            Example example = new Example();

            example.pack();

            example.setLocationRelativeTo(null);

            example.setVisible(true);

        });

    }

}

側(cè)面建議:

  • 避免將 KeyListeners 與文本組件一起使用,因為這會導(dǎo)致不希望的和不標(biāo)準(zhǔn)的行為。請改用 DocumentListeners 和 DocumentFilters。

  • 避免設(shè)置文本組件的邊界,因為這也會導(dǎo)致不希望的和非標(biāo)準(zhǔn)的行為,尤其是對于放置在 JScrollPanes 中時不顯示滾動條的 JTextAreas。而是設(shè)置文本組件的屬性


查看完整回答
反對 回復(fù) 2023-03-09
  • 1 回答
  • 0 關(guān)注
  • 124 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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