1

だから、私はJTextAreaを持っています。入力/アクション マップにキーボード アクションを追加しました。

Enter キーを押すと、JDialog がその内容とともに作成されるはずです。そして、含まれるボタンにkeyListenerを追加する必要がありますが、そのボタンには最終修飾子がないため、これはできません。final に設定すると、そのプロパティを編集できません。

コードのスニペットを次に示します。

class blabla extends JTextArea
{
getInputMap.put(KeyStroke.getKeyStroke("ENTER"), "pressedEnter");
getActionMap.put("pressedEnter", new AbstractAction()
        {
            private static final long serialVersionUID = 1L;

            public void actionPerformed(ActionEvent e) 
            {
                JDialog dialog;
                JButton confirm;;

                //JDialog
                dialog = new JDialog(Main.masterWindow, "newTitle", true);
                dialog.getContentPane().setLayout(new BoxLayout(dialog.getContentPane(), BoxLayout.Y_AXIS));
                dialog.addWindowListener(new WindowAdapter()
                {
                    public void windowActivated(WindowEvent e)
                    {
                        //this doen't work, it asks me to declare confirm as final
                        //and I have to request focuse here due to Java bug
                        confirm.requestFocus();
                    }
                });

                //JButton for confirming
                confirm = new JButton(lang.getString("ok"));
                confirm.setAlignmentX(Component.CENTER_ALIGNMENT);

                confirm.addKeyListener(new KeyAdapter()
                {
                    @Override
                    public void keyPressed(KeyEvent e)
                    {
                        if (e.getKeyCode() == KeyEvent.VK_ENTER)
                        {
                            //this doen't work, it asks me to declare confirm as final
                            confirm.doClick();
                        }
                    }       
                });

                dialog.add(confirm);

                dialog.pack();
                dialog.setLocationRelativeTo(Main.masterWindow);
                dialog.setVisible(true);
}

どうすればこれを機能させることができますか?

4

1 に答える 1

3
  • オプション 1: クラス フィールドを確認します。
  • オプション 2: ダミーの final JButton 変数を作成final JButton finalConfirm = confirm;し、confirm 参照を渡し、内部クラス内でこの変数を処理することができます。
  • オプション 3: Key Binding の AbstractAction に匿名の内部クラスを使用せず、JButton インスタンスを受け取るコンストラクターを持つプライベート内部クラスを使用します。
于 2012-09-16T00:25:48.797 に答える