Swing/EditColumnName のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/EditColumnName へ行く。
- 1 (2013-09-23 (月) 05:04:22)
- 2 (2013-09-23 (月) 08:46:45)
- 3 (2013-09-24 (火) 21:02:24)
- 4 (2014-04-22 (火) 01:33:09)
- 5 (2015-12-01 (火) 15:00:43)
- 6 (2016-01-05 (火) 15:45:14)
- 7 (2017-06-17 (土) 22:05:17)
- 8 (2018-06-07 (木) 18:14:09)
- 9 (2020-06-04 (木) 12:12:43)
- 10 (2021-11-19 (金) 00:43:38)
- 11 (2025-01-03 (金) 08:57:02)
- 12 (2025-01-03 (金) 09:01:23)
- 13 (2025-01-03 (金) 09:02:38)
- 14 (2025-01-03 (金) 09:03:21)
- 15 (2025-01-03 (金) 09:04:02)
- 16 (2025-06-19 (木) 12:41:37)
- 17 (2025-06-19 (木) 12:43:47)
TITLE:JTableのColumn名を変更する
Posted by aterai at 2013-09-23
JTableのColumn名を変更する
`JTable
の
Column
名を
JPopupMenu
`を使用して変更します。
- &jnlp;
- &jar;
- &zip;
サンプルコード
private final JMenuItem editItem1 = new JMenuItem(
new AbstractAction("Edit: setHeaderValue") {
@Override public void actionPerformed(ActionEvent e) {
JTableHeader header = (JTableHeader)getInvoker();
TableColumn column = header.getColumnModel().getColumn(index);
String name = column.getHeaderValue().toString();
textField.setText(name);
int result = JOptionPane.showConfirmDialog(
header.getTable(), textField, getValue(NAME).toString(),
JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
if(result==JOptionPane.OK_OPTION) {
String str = textField.getText().trim();
if(!str.equals(name)) {
column.setHeaderValue(str);
header.repaint();
}
}
}
});
View in GitHub: Java, Kotlin解説
- `
Edit: setHeaderValue
`- `
TableColumn#getHeaderValue()
でカラム名を取得して、
TableColumn#setHeaderValue(String)
`で変更
- `
- `
Edit: setColumnIdentifiers
`- `
DefaultTableModel#setColumnIdentifiers(Object[])
でモデルの列識別子を置き換え、
JTableHeader
`を作り直し- このため、列の入れ替えなどは初期化される
- ドラッグ中のカラムが存在する状態で、`
DefaultTableModel#setColumnIdentifiers(Object[])
を実行すると、
ArrayIndexOutOfBoundsException: -1
`が発生する- `
DefaultTableModel#setColumnIdentifiers(Object[])
を使用する場合は、
table.getTableHeader().setReorderingAllowed(false);
`とドラッグによる列の順序変更を禁止しておいた方が良いかもしれない
- `
- `
private final JMenuItem editItem2 = new JMenuItem(
new AbstractAction("Edit: setColumnIdentifiers") {
@Override public void actionPerformed(ActionEvent e) {
final JTableHeader header = (JTableHeader)getInvoker();
final JTable table = header.getTable();
final DefaultTableModel model = (DefaultTableModel)table.getModel();
String name = table.getColumnName(index);
textField.setText(name);
int result = JOptionPane.showConfirmDialog(
table, textField, getValue(NAME).toString(),
JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
if(result==JOptionPane.OK_OPTION) {
String str = textField.getText().trim();
if(!str.equals(name)) {
columnNames[table.convertColumnIndexToModel(index)] = str;
header.setDraggedColumn(null); //XXX
model.setColumnIdentifiers(columnNames);
}
}
}
});