當選擇單元格時,使用JTable TableCellRenderer設置背景和前景時有一種常見方法。這裏是被問了一個例子問題:如何在JTable渲染器上獲得完整突出顯示(帶邊框)
Why does my Java custom cell renderer not show highlighting when the row/cell is selected?
該解決方案缺乏一件東西的細胞周圍的邊框。 (請注意,我並沒有詢問行周圍的邊框,如問here。)選擇單元格時,邊框應突出顯示。僅僅創建自己的邊框並設置它是不可接受的,因爲您創建的邊框可能不符合Look &感覺。
我已經成功地通過了初始化默認渲染器,然後清除它的邊框,如下邊界:
private final DefaultTableCellRenderer defTblRend = new DefaultTableCellRenderer();
private final JComponent renderer = new ComplexCell(); // Whatever object type extends JComponent
@Override public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column)
{
// ... Set values on "renderer" object here ...
renderer.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
renderer.setForeground(isSelected ? table.getSelectionForeground() : table.getForeground());
renderer.setOpaque(!renderer.getBackground().equals(table.getBackground()));
JComponent comp = (JComponent)defTblRend.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
renderer.setBorder(comp.getBorder());
return renderer;
}
有沒有更好的辦法?
請注意,'getBorder()'可能會返回'null'。 – trashgod 2011-06-02 17:03:57
與trashgod一致,現在返回到關於prepareRenderer的camickr示例,以及基本的workAround,更好地獲取Component(錯過)和JComponent,注意:如果不在這裏AWT Component或Custom Painting,然後使用Opacities dosn沒有任何意義,建立prepareRenderer(這已被大多數Custom L&F所接受),如果需要對某些TabelColumn進行som更改,然後添加TableRenderer,則可以將它們組合在一起 – mKorbel 2011-06-02 18:58:18