亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

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

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

慕碼人2483693 2023-03-09 14:37:35
我正在用 java 做一個計算器,以便于制作,并且不要將文檔過濾器放在 jtextfield 中。我選擇使 jtextfield 不可編輯并添加一個按鍵偵聽器,但是當您按下刪除按鈕時,它會發出錯誤聲音。我去配置中更改系統的聲音,我已經更改了系統的聲音,我發現它是由“預定bip”發出的聲音,并發出“Windows 背景”的聲音。我可以更改我的選項并且不聽聲音,但我希望這款游戲可以在互聯網上下載。這是一個簡單的示例:如果您在文本字段中按下刪除鍵,它將發出聲音: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);    }}在該代碼中,文本字段不可編輯,在下一個代碼中,文本字段不會發出聲音:    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);    }}這是因為文本字段是可編輯的。如果您能幫助我,告訴我如何修復它或如何更改代碼中的系統聲音,或者您認為可以幫助我的任何事情,我將不勝感激。
查看完整描述

1 回答

?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

即使 JTextField 是可編輯的,您通過按 del 鍵得到的聲音也會出現,并且是對按下的鍵的操作系統相關的響應。解決這個問題的方法是防止 del 鍵注冊它已被按下,而做到這一點的方法是使用鍵綁定使 del 鍵在 GUI 中沒有響應——給出一個不執行任何操作的響應當文本字段具有焦點時按下 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);

        });

    }

}

側面建議:

  • 避免將 KeyListeners 與文本組件一起使用,因為這會導致不希望的和不標準的行為。請改用 DocumentListeners 和 DocumentFilters。

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


查看完整回答
反對 回復 2023-03-09
  • 1 回答
  • 0 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號