我正在構建一個swing應用程序,該應用程序將在左側列出項目,並在右側列出表格。顯示在右側的表格數量取決於左側選擇了哪個項目。我希望能夠「突出顯示」(setBackground)所有正在顯示的表中相同的行。比較兩個或多個JTable和'突出顯示'的區別
我讀過關於覆蓋prepareRenderer或getTableCellRendererComponent。然後,條件渲染邏輯在Overridden方法中。
DefaultTableCellRenderer getTableCellRendererComponent never gets called http://tips4java.wordpress.com/2010/01/24/table-row-rendering/ http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#renderer
但是,從我可以告訴什麼,我知道(請糾正我,如果我錯了)這兩個選項可以讓你在同一時間內,這個比較兩個不同的JTable中的能力重寫的方法。 prepareRenderer在擴展JTable的類中被重寫,因此它在特定的表上被實例化。重寫的方法隻影響Table的特定實例。
public class CustomRenderer extends JTable {
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
// add custom rendering here
return c;
}};
...
CustomRenderer currTable = new CustomRenderer();
getTableCellRendererComponent通過從特定的JTable的columnModel一個特定列的setCellRenderer設置。
public class CustomRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
JLabel l = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (isSelected) {
l.setBackground(Color.gray);
}
else {
l.setBackground(Color.white);
}
return l;
}};
...
CustomRenderer cr = new CustomRenderer();
currTable.getcolumnModel().getColumn(1).setCellRenderer(cr);
那麼接下來我將如何做這樣的事情
if(tableOne.getValueAt(1, 1).equals(tableTwo.getValueAt(1, 1)
//set Cell 1,1 background(Color.blue)
else
//set Cell 1,1 background(Color.red)
現在我有一個使用多個表格單元格選擇與測試isSelected boolean值,並相應更改背景getTableCellRendererComponent方法的真正醜陋的黑客。這對於現在來說已經足夠好了(因爲我是唯一使用這個程序的人),但是必須有更好的方法能夠根據不同表的條件或值同時比較和更改一個表的渲染。
或者我可以解決問題嗎?
預先感謝閱讀/回覆
在其他答案中,我最喜歡這個。這花了一段時間,但我終於想出瞭如何讓表格比較工作來突出顯示。我必須說JXTable的文檔很少,但它似乎運行良好。謝謝 –