あなたは、Deleteキーを押したときに編集できないJTextFieldがそれを修正する方法を、エラー音がしますか?

ミゲル・デ・ラ・フォント:

私はeasyly作るために、Javaで電卓をやっている、とのJTextFieldにドキュメントフィルタを入れないでください。私はJTextFieldのは編集できません作り、キーリスナーを追加することを選んだが、あなたはデ・削除ボタンを押すと、エラー音がします。

私は、システムの音を変更している、と私は音が、それが「所定のBIP」で作られた、と音の「Windowsの背景」を作るということを発見、構成の変更、システムの音に行きました。私は私のオプションを変更することができますし、音を聞くが、私はこのゲームは、インターネットでそれをダウンロードしたくありません。

ここでは簡単な例です:あなたがテキストフィールドでDeleteキーを押すとそれが音を作るつもり。

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);
    }
}

テキストフィールドが編集可能であるため、それはです。

I'willはあなたが私を助けることができるならば、コードで音どのように修正するか、どのように変化するシステムに私に言って、感謝、または何でもあなたが私を助けることができると思います。

ウナギのホバークラフトのフル:

あなたはJTextFieldのが編集可能である、と押されているキーへのOS依存の応答である場合にも発生しますデルキーを押すから取得していることを音。これを回避する方法は、それが押されたことを登録するから、デルのキーを阻止することであり、これを行う方法は、GUIで無応答原因デルキーを作るためにキーバインディングを使用することです - 応答で行い、何もアクションを与えますテキストフィールドにフォーカスがあるときデルキーのビーイングに押し付けます。例えば:

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を使用しないでください。メソッドでは、DocumentListenerとDocumentFilters代わりを使用してください。
  • このため、テキストコンポーネントの境界を設定しないでも、特にそれらがJScrollPanes内に配置されているときに、スクロールバーを表示しないJTextAreasで、望ましくないと非標準の行動につながります。代わりに、そのようなカラムとフォントプロパティとしてテキストコンポーネントのプロパティを設定します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=283375&siteId=1