我知道這個問題上有很多問題,但由於某種原因,我無法找到解決這個問題的方法。遇到preperedRenderer問題JTable
如果兩列沒有相同的值,我需要更改行顏色。
看到此鏈接:http://tips4java.wordpress.com/2010/01/24/table-row-rendering/
,但不能使它工作....
嘗試,這也:
public void colorRow(JTable table){
for(int column=0;column<table.getRowCount();column++){
for(int row=0;row<table.getRowCount();row++){
TableCellRenderer renderer = table.getCellRenderer(row, column);
Component comp = table.prepareRenderer(renderer, row, column);
Float sinh = (Float)table.getModel().getValueAt(row,6);
Float kol = (Float)table.getModel().getValueAt(row, 5);
if(!kol.equals(sinh)){
comp.setBackground(Color.YELLOW);
}
}
}
}
但它描繪表中的所有行是否有是列5和列6不具有相同值的行。
希望得到任何幫助
更新(SSCCE):
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class table extends JFrame {
private JPanel contentPane;
private JTable table;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
table frame = new table();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public table() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 495, 317);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new GridLayout(1, 0, 0, 0));
DefaultTableModel model = new DefaultTableModel();
model.addColumn("ID");
model.addColumn("Value 1");
model.addColumn("Value 2");
int id1=1;
int id2=2;
int id3=3;
Float one1=3.0f;
Float two1=4.0f;
Float one2=2.0f;
Float two2=2.0f;
Float one3=1.0f;
Float two3=2.0f;
model.insertRow(0, new Object [] {id1, one1,two1});
model.insertRow(0, new Object [] {id2, one2,two2});
model.insertRow(0, new Object [] {id3, one3,two3});
JScrollPane scrollPane = new JScrollPane();
contentPane.add(scrollPane);
table = new JTable(model);
scrollPane.setViewportView(table);
colorRow(table);
}
public void colorRow(JTable table){
for(int column=0;column<table.getColumnCount();column++){
for(int row=0;row<table.getRowCount();row++){
TableCellRenderer renderer = table.getCellRenderer(row, column);
Component comp = table.prepareRenderer(renderer, row, column);
comp.setBackground(getBackground());
Float sinh = (Float)table.getModel().getValueAt(row,2);
Float kol = (Float)table.getModel().getValueAt(row, 1);
if(!kol.equals(sinh)){
comp.setBackground(Color.YELLOW);
}
}
}
}
}
'但不能使它工作.... - - 那麼,發佈[SSCCE](http://sscce.org/),這表明問題,因爲我們不介意讀者,不能猜測你的代碼是什麼。您發佈的代碼將不起作用,因爲一旦您更改了渲染器的背景,它將成爲默認顏色。請注意,在給出的鏈接代碼中,如何在重新設置行顏色之前重置背景。 – camickr 2014-12-10 23:17:39
爲什麼人們堅持重寫'prepareRenderer'方法?爲什麼不只是定義一個適當的單元格渲染器(s),它可以更容易地插入到現有的代碼:P – MadProgrammer 2014-12-10 23:33:19
@camickr更新了一個例子..hope這有助於找出我的問題。感謝 – caniaskyouaquestion 2014-12-11 07:41:05