0

段落を長くせずにタイトルをどのように表現するかがよくわかりません。

基本的にJTable、私は自分のプログラムにユーザーが編集できない を持っています。ただし、プログラムはそれ自体を編集できる必要があります。さらに、ユーザーはテーブル内のセルからテキストを実際に選択してコピーできるようにする必要がありますが、編集することはできません。

どうすればこれを達成できますか?できれば、プログラム内の異なるレイアウトなどの複数のテーブルに適用できるように、一般的なソリューションを使用してください。

4

2 に答える 2

3

以下のように、テーブルの選択プロパティをtrueに設定する必要があります。isCellEditableまた、メソッドがオーバーライドされ、falseに設定されていることを確認する必要がありAbstractTableModelます。クラスはデフォルトでこれを行います。

  final JTable table = new JTable(new AbstractTableModel() {

        @Override
        public Object getValueAt(int r, int c) {
            return data[r][c];
        }

        @Override
        public int getRowCount() {
            return data.length;
        }

        @Override
        public int getColumnCount() {
            return data[1].length;
        }

    });

    table.setRowSelectionAllowed(true);
    table.setColumnSelectionAllowed(true);
    table.setCellSelectionEnabled(true);

これにより、セルを個別に強調表示してコピー元に戻すことができますが、セルを編集することはできません。

編集:答えを変更しました!

于 2012-12-18T21:00:24.043 に答える
0

トムのソリューションでは、セルをクリックして Ctrl+C を押してその内容全体をコピーできます。セル内のテキストの領域を選択できるようにするには、次のようにします。

JTable table = new JTable(...);

JTextField textField = new JTextField();
textField.setEditable(false);
table.setDefaultEditor(String.class, new javax.swing.DefaultCellEditor(textField));

次に、コピーできるようにしたいセルのTableModel.isCellEditable戻り値を確認してください。true

(このルートに進むと、行/列/セルの選択の許可/有効化をスキップできます。)

于 2013-12-07T02:22:56.777 に答える