Swing/TableRowHeader のバックアップ(No.33)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/TableRowHeader へ行く。
- 1 (2006-11-16 (木) 20:22:33)
- 2 (2007-03-07 (水) 23:01:27)
- 3 (2007-03-09 (金) 01:25:32)
- 4 (2007-04-09 (月) 18:03:10)
- 5 (2008-03-11 (火) 09:52:12)
- 6 (2008-03-11 (火) 13:45:47)
- 7 (2008-03-11 (火) 14:48:45)
- 8 (2009-02-26 (木) 06:14:52)
- 9 (2009-02-26 (木) 13:36:28)
- 10 (2009-02-26 (木) 19:35:46)
- 11 (2010-03-11 (木) 12:49:53)
- 12 (2010-03-12 (金) 13:46:39)
- 13 (2010-05-02 (日) 03:16:07)
- 14 (2011-03-18 (金) 19:11:51)
- 15 (2011-03-22 (火) 18:42:32)
- 16 (2013-02-23 (土) 23:25:26)
- 17 (2013-08-17 (土) 00:23:48)
- 18 (2013-08-22 (木) 15:31:45)
- 19 (2013-09-10 (火) 00:43:24)
- 20 (2014-05-16 (金) 20:22:31)
- 21 (2014-11-05 (水) 04:58:33)
- 22 (2014-11-25 (火) 03:03:31)
- 23 (2014-11-27 (木) 02:02:44)
- 24 (2014-12-02 (火) 01:53:20)
- 25 (2015-10-14 (水) 15:41:46)
- 26 (2016-05-30 (月) 16:25:28)
- 27 (2016-09-02 (金) 12:10:17)
- 28 (2017-03-30 (木) 13:54:57)
- 29 (2017-11-02 (木) 15:32:16)
- 30 (2018-02-24 (土) 19:51:30)
- 31 (2018-03-06 (火) 17:02:54)
- 32 (2018-11-08 (木) 17:44:38)
- 33 (2019-05-22 (水) 19:35:38)
- 34 (2020-11-04 (水) 16:03:34)
- 35 (2022-09-27 (火) 17:29:54)
- category: swing
folder: TableRowHeader
title: JTableに行ヘッダを追加
tags: [JTable, JList, JScrollPane]
author: aterai
pubdate: 2006-09-04T01:10:03+09:00
description: JTableを設定したJScrollPaneのRowHeaderViewに、JListで作成した行ヘッダを追加します。
image:
hreflang:
href: https://java-swing-tips.blogspot.com/2011/01/jtable-rowheader.html lang: en
概要
JTable
を設定したJScrollPane
のRowHeaderView
に、JList
で作成した行ヘッダを追加します。
Screenshot
Advertisement
サンプルコード
class RowHeaderList<E> extends JList<E> {
private final JTable table;
private final ListSelectionModel tableSelection;
private final ListSelectionModel rListSelection;
private int rollOverRowIndex = -1;
private int pressedRowIndex = -1;
public RowHeaderList(ListModel<E> model, JTable table) {
super(model);
this.table = table;
setFixedCellHeight(table.getRowHeight());
setCellRenderer(new RowHeaderRenderer<E>(table.getTableHeader()));
RollOverListener rol = new RollOverListener();
addMouseListener(rol);
addMouseMotionListener(rol);
tableSelection = table.getSelectionModel();
rListSelection = getSelectionModel();
}
class RowHeaderRenderer<E> extends JLabel
implements ListCellRenderer<E> {
private final JTableHeader header; // = table.getTableHeader();
public RowHeaderRenderer(JTableHeader header) {
super();
this.header = header;
this.setOpaque(true);
//this.setBorder(UIManager.getBorder("TableHeader.cellBorder"));
this.setBorder(BorderFactory.createMatteBorder(
0, 0, 1, 2, Color.GRAY.brighter()));
this.setHorizontalAlignment(CENTER);
this.setForeground(header.getForeground());
this.setBackground(header.getBackground());
this.setFont(header.getFont());
}
@Override public Component getListCellRendererComponent(
JList<? extends E> list, E value, int index,
boolean isSelected, boolean cellHasFocus) {
if (index == pressedRowIndex) {
setBackground(Color.GRAY);
} else if (index == rollOverRowIndex) {
setBackground(Color.WHITE);
} else if (isSelected) {
setBackground(Color.GRAY.brighter());
} else {
setForeground(header.getForeground());
setBackground(header.getBackground());
}
setText(Objects.toString(value, ""));
return this;
}
}
//...
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JList
で作成した行ヘッダをJScrollPane#setRowHeaderView(...)
メソッドで追加しています。
Corner
:JScrollPane.html#setCorner(...)
で左上隅などにコンポーネントを設定しておらず、JScrollPane
自体の背景色(赤)が表示されているViewport
:JTable
のセルが存在しない領域は、JViewport
の背景色(緑)が表示されている
rowHeader.setBackground(Color.BLUE);
scrollPane.setBackground(Color.RED);
scrollPane.getViewport().setBackground(Color.GREEN);