段落を長くせずにタイトルをどのように表現するかがよくわかりません。
基本的にJTable
、私は自分のプログラムにユーザーが編集できない を持っています。ただし、プログラムはそれ自体を編集できる必要があります。さらに、ユーザーはテーブル内のセルからテキストを実際に選択してコピーできるようにする必要がありますが、編集することはできません。
どうすればこれを達成できますか?できれば、プログラム内の異なるレイアウトなどの複数のテーブルに適用できるように、一般的なソリューションを使用してください。
段落を長くせずにタイトルをどのように表現するかがよくわかりません。
基本的にJTable
、私は自分のプログラムにユーザーが編集できない を持っています。ただし、プログラムはそれ自体を編集できる必要があります。さらに、ユーザーはテーブル内のセルからテキストを実際に選択してコピーできるようにする必要がありますが、編集することはできません。
どうすればこれを達成できますか?できれば、プログラム内の異なるレイアウトなどの複数のテーブルに適用できるように、一般的なソリューションを使用してください。
以下のように、テーブルの選択プロパティを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);
これにより、セルを個別に強調表示してコピー元に戻すことができますが、セルを編集することはできません。
編集:答えを変更しました!
トムのソリューションでは、セルをクリックして 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
(このルートに進むと、行/列/セルの選択の許可/有効化をスキップできます。)