我有一个方法应该改变JTable中某个特定单元格的颜色,但所有单元格都会改变颜色。JTable为所有单元格而不仅是特定单元格颜色
这就是我想实现的方法:
public Component cellBG(JTable table, int row, int column)
{
TableCellRenderer renderer = table.getCellRenderer(row, column);
Component c = table.prepareRenderer(renderer, row, column);
Object steak = table.getValueAt(row,column);
if(((String) steak).startsWith("+"))
{
c.setBackground(Color.GREEN);
}
else if(((String) steak).startsWith("-"))
{
c.setBackground(Color.RED);
}
else if(((String) steak).startsWith("~"))
{
c.setBackground(Color.YELLOW);
}
else if(((String) steak).equals(""))
{
c.setBackground(Color.WHITE);
}
return c;
}
我的表中包含8行10列的所有含要么+, - , - ,或“”,这将导致一个分散的模式我不同的颜色,但是tabel在最后一个被读取的entri中颜色固定。每个请求
屁股的SSCCE
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Color;
import java.awt.Font;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JFrame;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
public class ptf_viewer extends JFrame {
static JTable table;
static DefaultTableModel model;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ptf_viewer frame = new ptf_viewer();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public ptf_viewer(){
getContentPane().setBackground(Color.WHITE);
setTitle("Portable test file viewing");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(50, 50, 1024, 768);
getContentPane().setLayout(null);
final String[] columnNames = {"Test 1", "Test 2", "Test 3", "Test 4", "Test 5", "Test 6", "Test 7", "Test 8", "Test 9", "Test 10"};
final Object[][] data = {
{"+","+","","","","~","","","",""},
{"-","+","","","","","","","",""},
{"+","+","","","~","","","","",""},
{"+","+","","","","","~","","",""},
{"+","-","","~","","","","","",""},
{"+","-","","","","","","","",""},
{"+","-","","","","","","","",""},
{"-","+","~","","","","","","","+"}
};
model = new DefaultTableModel(data, columnNames);
table = new JTable(data, columnNames);
table.setModel(model);
for(int i = 0 ; i < 8 ; i++){
cellBG(table, i, 9);
}
JTableHeader header = table.getTableHeader();
header.setFont(new Font("Times New Roman", Font.BOLD, 13));
header.setBackground(Color.black);
header.setForeground(Color.white);
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setSize(988, 618);
scrollPane.setFont(new Font("Times New Roman", Font.BOLD, 13));
scrollPane.setLocation(10, 60);
getContentPane().add(scrollPane);
}
public Component cellBG(JTable table, int row, int column)
{
TableCellRenderer renderer = table.getCellRenderer(row, column);
Component c = table.prepareRenderer(renderer, row, column);
Object bøf = table.getValueAt(row,column);
if(((String) bøf).startsWith("+"))
{
c.setBackground(Color.GREEN);
}
else if(((String) bøf).startsWith("-"))
{
c.setBackground(Color.RED);
}
else if(((String) bøf).startsWith("~"))
{
c.setBackground(Color.YELLOW);
}
else if(((String) bøf).equals(""))
{
c.setBackground(Color.WHITE);
}
return c;
}
}
貌似渲染器是通过表中的所有单元格共享。渲染器检查的最后一个单元格将为所有单元格赋予颜色。 –
更好地帮助发布一个[SSCCE](http://sscce.org/),短的,可运行的,可编译的JTable的hardocded值(包含10行,包含8行,全部包含+, - ,〜或者“” ,),问题如何可能是你的prepareRenderer绘画 – mKorbel
@JonathanDrapeau精确分析。虽然不足为奇,但渲染器被设计为共享:-) – kleopatra