Swing/FillsViewportHeight のバックアップの現在との差分(No.3)
TITLE:JTable自体の高さを拡張
JTable自体の高さを拡張
編集者:Terai Atsuhiro~
作成日:2007-08-20
更新日:2022-08-03 (水) 11:01:16
概要
JDK 6
で導入された機能を使用して、JViewport
の高さまでJTable
を拡張します。
Screenshot
Advertisement
概要
JDK 6 で導入された機能を使用して、JViewportの高さまでJTableを拡張します。サンプルコード
#spanend
#spanadd
JTable table = new JTable(model);
#spanend
#spanadd
table.setFillsViewportHeight(true);
#spanend
#spandel
#screenshot
#spanend
#spandel
#spanend
#spandel
**サンプルコード [#j4e564fb]
#spanend
#spandel
#code{{
#spanend
#spandel
table = new JTable(model) {
#spanend
public Component prepareRenderer(TableCellRenderer tcr, int row, int column) {
Component c = super.prepareRenderer(tcr, row, column);
if(isRowSelected(row)) {
c.setForeground(getSelectionForeground());
c.setBackground(getSelectionBackground());
}else{
c.setForeground(getForeground());
c.setBackground((row%2==0)?evenColor:oddColor);
}
return c;
}
public JPopupMenu getComponentPopupMenu() {
return makePop();
}
#spandel
};
#spanend
#spandel
#spanend
#spandel
JScrollPane scrollPane = new JScrollPane(table);
#spanend
#spandel
scrollPane.setBackground(Color.RED);
#spanend
#spandel
scrollPane.getViewport().setBackground(Color.GREEN);
#spanend
#spandel
table.setBackground(tablebgColor);
#spanend
#spandel
//table.setBackground(scrollPane.getBackground());
#spanend
#spandel
#spanend
#spandel
table.setComponentPopupMenu(new JPopupMenu());
#spanend
#spandel
//scrollPane.getViewport().setComponentPopupMenu(makePop());
#spanend
#spandel
//scrollPane.setComponentPopupMenu(makePop());
#spanend
#spandel
#spanend
#spandel
table.setRowSorter(new TableRowSorter<TableModel>(model));
#spanend
#spandel
#spanend
#spandel
Box box = Box.createHorizontalBox();
#spanend
#spandel
box.add(new JCheckBox(new AbstractAction("FillsViewportHeight") {
#spanend
public void actionPerformed(ActionEvent evt) {
JCheckBox cb = (JCheckBox)evt.getSource();
table.setFillsViewportHeight(cb.isSelected());
}
#spandel
}));
#spanend
#spandel
box.add(new JButton(new AbstractAction("clearSelection") {
#spanend
public void actionPerformed(ActionEvent evt) {
table.clearSelection();
}
#spandel
}));
#spanend
#spanadd
JScrollPane scroll = new JScrollPane(table);
#spanend
#spanadd
scroll.setBackground(Color.RED);
#spanend
#spanadd
scroll.getViewport().setBackground(Color.GREEN);
#spanend
#spanadd
// table.setBackground(Color.BLUE);
#spanend
#spanadd
// table.setBackground(scroll.getBackground());
#spanend
View in GitHub: Java, Kotlin- &jnlp;
- &jar;
- &zip;
解説
上記のサンプルでは、チェックボックスの選択状態で、JTable#setFillsViewportHeight(boolean)を適用するかどうかを切り替えることができます。解説
上記のサンプルでは、チェックボックスの選択状態で、JTable#setFillsViewportHeight(boolean)
を適用するかどうかを切り替えることができます。
- (getFillsViewportHeight() == false) の場合(デフォルト値)
- 下部の余白はJTableではないため、JViewportの背景色(緑)が表示される(JTableの背景色を変更)
- JScrollPane、またはJViewportにsetComponentPopupMenuしたり、リスナーを設定していないため、下部の余白で右クリックしてもポップアップメニューは無効
-
getFillsViewportHeight() == false
(デフォルト値)の場合- 下部の余白は
JTable
ではないためJViewport
の背景色(緑)が表示される -
JScrollPane
、またはJViewport
にsetComponentPopupMenu(...)
でJPopupMenu
は未設定で、マウスリスナーも設定していないため下部の余白で右クリックしてもポップアップメニューは無効
- 下部の余白は
- (getFillsViewportHeight() == true) の場合
- JTableの高さがJViewportの高さより小さい時は、両者が同じ高さになるようにJTableが拡張される
- JTable#setBackgorund(Color)で設定した色(薄い黄色)がJTable下部の余白の背景色となる
- JTable自体が拡張されるため、余白部分を右クリックしてもポップアップメニューが表示される
- 縦スクロールバーとテーブルヘッダで出来る余白(赤)はJScrollPaneなので、ポップアップメニューは無効
- 簡単に余白部分にドロップが可能になる(JTableの行をドラッグ&ドロップでは余白にドロップ出来ない)
-
getFillsViewportHeight() == true
の場合-
JTable
の高さがJViewport
の高さより小さい時は両者が同じ高さになるようにJTable
が拡張される -
JTable#setBackground(Color)
で設定した色(薄い黄色)がJTable
下部の余白の背景色となる -
JTable
自体が拡張されるため余白部分を右クリックしてもポップアップメニューが表示される- 縦スクロールバーとテーブルヘッダで生成される余白(赤)などは
JScrollPane
なので、ポップアップメニューは無効
- 縦スクロールバーとテーブルヘッダで生成される余白(赤)などは
- 簡単に余白部分にドロップしたり、空の
JTable
にドロップが可能- JTableの行をドラッグ&ドロップでは余白にドロップ出来ない
- Fileのドラッグ&ドロップでは
DropTarget
をJTable
、JViewport
の両方に設定する必要がある
-
#screenshot(,screenshot2.png)
- -
-
JTable#setFillsViewportHeight(true)
を設定していてもJScrollPane
、JViewport
の背景色が以下のように表示される場合があるのでtable.setBackground(scrollPane.getBackground())
などですべて同色揃えることも無意味ではない
- scrollPane.setBackground(Color.RED);
- 縦スクロールバーとテーブルヘッダで出来る余白の色
- scrollPane.getViewport().setBackground(Color.GREEN);
-
scrollPane.setBackground(Color.RED)
- 縦スクロールバーとテーブルヘッダで生成される余白の色
-
scrollPane.getViewport().setBackground(Color.GREEN)
- 列をドラッグして移動する場合の隙間の色
-
JTable#setAutoResizeMode(JTable.AUTO_RESIZE_OFF)
としたときの右余白
参考リンク
参考リンク
- JTable#setFillsViewportHeight(boolean) (Java Platform SE 8)
- JTableの背景色を変更
- TableCellRendererでセルの背景色を変更
- Fileのドラッグ&ドロップ
- JTable becomes uglier with AUTO_RESIZE_OFF - Santhosh Kumar's Weblog