Java 改变JTable中某行的颜色
Java Changing the color of a certain row in JTable
答案:
我不允许 post 回答...竖起大拇指 Whosebug!!!
但是这里是:
天哪……
我做到了,实际上它比我想象的要容易....
这是我的解决方案:
tbl_needaction = new javax.swing.JTable()
{
public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
{
Date d = new Date();
DateFormat df = new SimpleDateFormat("dd.MM.yyyy");
java.util.Date acdate = null;
Component c = super.prepareRenderer(renderer, row, column);
// Color row based on a cell value
if (!isRowSelected(row))
{
c.setBackground(getBackground());
int modelRow = convertRowIndexToModel(row);
String sd = "";
sd = (String)getModel().getValueAt(modelRow, 5);
try {
acdate = df.parse(sd);
} catch (ParseException ex) {
Logger.getLogger(EditApplicationJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
if (d.compareTo(acdate)>=0){
c.setBackground(Color.RED);
}
}
return c;
}
};
我不得不通过 NotePad++ 编辑它,因为 NetBeans 不允许我编辑自动生成的 initComponents()
。
问题:
我知道,有很多关于这个问题的示例和教程,但是 none 似乎对我有用....
我从 sql 数据库中获取数据,我在 JTable 中显示该数据。有一个名为 "ActionPoint" 的日期。现在我想将每一行标记为红色,其中 "ActionPoint" 等于今天或比今天 "smaller"。
我今天要与我的 jTable 中 ebery 行的 "ActionPoint" 进行比较的代码:
for(int row = 0;row < dbApplicantsTableModel.getRowCount();row++) {
String sd = "";
sd = (String) dbApplicantsTableModel.getValueAt(row, 5);
try {
acdate = df.parse(sd);
} catch (ParseException ex) {
Logger.getLogger(EditApplicationJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
if (acdate.compareTo(d)<=0){
}
}
所以我应该把我的 "row" 涂成红色。
谁能提供一个方法,简单地获取一行,然后将这一行的背景设置为红色?
编辑:
现在我的代码如下所示:
for(int row = 0;row < dbApplicantsTableModel.getRowCount();row++) {
String sd = "";
sd = (String) dbApplicantsTableModel.getValueAt(row, 5);
try {
acdate = df.parse(sd);
} catch (ParseException ex) {
Logger.getLogger(EditApplicationJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
if (acdate.compareTo(d)<=0){
dbApplicantsTableModel.setRowColour(row, Color.RED);
}
但是他没有将任何背景设置为红色!
遗憾的是我需要 10 到 post 图片的声誉 -.-
i want to mark every row red where the "ActionPoint" equals today oder is "smaller" than today.
查看 Table Row Rendering 以了解解决此问题的简单方法。该方法覆盖了 JTable 的 prepareRenderer(...)
方法,因此您可以使用简单的 "if statement".
在一个地方添加逻辑
答案: 我不允许 post 回答...竖起大拇指 Whosebug!!!
但是这里是:
天哪……
我做到了,实际上它比我想象的要容易....
这是我的解决方案:
tbl_needaction = new javax.swing.JTable()
{
public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
{
Date d = new Date();
DateFormat df = new SimpleDateFormat("dd.MM.yyyy");
java.util.Date acdate = null;
Component c = super.prepareRenderer(renderer, row, column);
// Color row based on a cell value
if (!isRowSelected(row))
{
c.setBackground(getBackground());
int modelRow = convertRowIndexToModel(row);
String sd = "";
sd = (String)getModel().getValueAt(modelRow, 5);
try {
acdate = df.parse(sd);
} catch (ParseException ex) {
Logger.getLogger(EditApplicationJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
if (d.compareTo(acdate)>=0){
c.setBackground(Color.RED);
}
}
return c;
}
};
我不得不通过 NotePad++ 编辑它,因为 NetBeans 不允许我编辑自动生成的 initComponents()
。
问题: 我知道,有很多关于这个问题的示例和教程,但是 none 似乎对我有用....
我从 sql 数据库中获取数据,我在 JTable 中显示该数据。有一个名为 "ActionPoint" 的日期。现在我想将每一行标记为红色,其中 "ActionPoint" 等于今天或比今天 "smaller"。
我今天要与我的 jTable 中 ebery 行的 "ActionPoint" 进行比较的代码:
for(int row = 0;row < dbApplicantsTableModel.getRowCount();row++) {
String sd = "";
sd = (String) dbApplicantsTableModel.getValueAt(row, 5);
try {
acdate = df.parse(sd);
} catch (ParseException ex) {
Logger.getLogger(EditApplicationJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
if (acdate.compareTo(d)<=0){
}
}
所以我应该把我的 "row" 涂成红色。
谁能提供一个方法,简单地获取一行,然后将这一行的背景设置为红色?
编辑:
现在我的代码如下所示:
for(int row = 0;row < dbApplicantsTableModel.getRowCount();row++) {
String sd = "";
sd = (String) dbApplicantsTableModel.getValueAt(row, 5);
try {
acdate = df.parse(sd);
} catch (ParseException ex) {
Logger.getLogger(EditApplicationJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
if (acdate.compareTo(d)<=0){
dbApplicantsTableModel.setRowColour(row, Color.RED);
}
但是他没有将任何背景设置为红色!
遗憾的是我需要 10 到 post 图片的声誉 -.-
i want to mark every row red where the "ActionPoint" equals today oder is "smaller" than today.
查看 Table Row Rendering 以了解解决此问题的简单方法。该方法覆盖了 JTable 的 prepareRenderer(...)
方法,因此您可以使用简单的 "if statement".