0

編集不可の JTextField、編集可能な JTextArea、編集可能な JTextField の 3 列の JTable があります。

私の問題は 2 つあります。最後の 2 つの列を背景で強調表示して編集できる状態にし、タブで移動するとカーソルが表示されるようにしたいと思います。また、特定のフォントも使用します。したがって、カスタム レンダラーとエディターです。

セルの 1 つを 2 回クリックすると成功しますが、キーボードを使用してそこに到達すると成功しません。セルからセルへタブを移動して (JTextArea の setTraversalKeys 呼び出しのおかげで) 入力を開始できますが、フォーカスがどこにあるのかわかりません。

コンポーネントがトリガーする背景色を設定するフォーカスイベントリスナーがあります。これは、セル編集に使用される JTextField および JTextArea で使用され、適切な手段としてセル レンダラーで使用されます。ただし、マウスをクリックするだけでトリガーされます。

タブで移動しているセルでフォーカス イベントが確実にトリガーされるようにするにはどうすればよいですか?

ありがとう。

4

2 に答える 2

1

選択の変更を聞いて、必要な場所で編集を開始する必要があります。

    final JTable table = new JTable (
            new String[][]{ { "col1", "col2", "col3" }, { "col1", "col2", "col3" } },
            new String[]{ "1", "2", "3" } );
    ListSelectionListener listener = new ListSelectionListener ()
    {
        public void valueChanged ( ListSelectionEvent e )
        {
            if ( table.getSelectedRow () != -1 && table.getSelectedColumn () != -1 )
            {
                table.editCellAt ( table.getSelectedRow (), table.getSelectedColumn () );
            }
        }
    };
    table.getColumnModel ().getSelectionModel ().addListSelectionListener ( listener );
    table.getSelectionModel ().addListSelectionListener ( listener );

それはあなたがそれを行う方法のほんの一例です。

于 2012-05-12T16:13:14.760 に答える
0

皆さん、ありがとうございました。これは私が最終的に得たものです:

    ListSelectionListener listener = new ListSelectionListener() {
        public void valueChanged(ListSelectionEvent e) {
            int row = table.getSelectedRow();
            int col = table.getSelectedColumn();

            // Only columns beyond the first are edited...
            if (row != -1 && col > 0) {
                table.editCellAt(row, col);
                try {
                    Robot robot = new Robot();
                    robot.keyPress(KeyEvent.VK_F2);
                    robot.keyRelease(KeyEvent.VK_F2);
                } catch (AWTException e1) {
                    e1.printStackTrace();
                }
            }
        }
    };

editCell() 呼び出しに応答して作成されたセル エディターは、使用する JTextArea および JTextField の背景色を設定します。ロボットの目的は、F2 の押下をシミュレートして、カーソルを表示することです (用語が間違っていることは知っていますが、正しい用語は私を避けます)。

シェーディングは発生しますが、ロボットは前方にタブ移動すると機能しますが、後方に移動すると機能しません。その場合、このコード スニペットが実行されるかどうかはわかりませんが、セル エディターは何らかの方法で作成されます。このプログラムは私専用なので、後日その小さな問題を解決してみます。

于 2012-05-14T00:51:13.113 に答える