JTable如何动态改变某一单元格的字体颜色 JTable中有产品的生产日期一例,显示产品的保质日期,如果超过保质期,将这一例的日期的字体变为红色,怎么实现。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 那你说一个,你只给我一个能改变JTable中某单元格字体的颜色的例子就行了,至于什么条件时显示什么颜色的字体,我自己会判断。 给你的table重新设置一个renderer。改写其中的getTableCellRendererComponent方法。在这个方法中设置颜色。 呵呵,解决了就好。我的示例代码也给你。如果你的方法比我的好,也请你告诉我,提出你的意见,我们共同交流下。package color.table;import java.awt.Color;import java.awt.Component;import java.awt.Container;import java.text.DateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.List;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.table.DefaultTableCellRenderer;import javax.swing.table.DefaultTableModel;public class MainFrame extends JFrame { private static final long serialVersionUID = 1L; private List<String> colNames; private List<List<Object>> data; private JTable table; private Calendar shieldCalendar; public MainFrame() { super(); initData(); Container c = getContentPane(); table = new JTable(); table.setModel(new MTableModel()); table.getColumnModel().getColumn(0).setCellRenderer( new MTableCellRenderer()); table.getColumnModel().getColumn(1).setCellRenderer( new MTableCellRenderer()); table.getColumnModel().getColumn(2).setCellRenderer( new MTableCellRenderer()); c.add(new JScrollPane(table)); setSize(600, 400); setDefaultCloseOperation(EXIT_ON_CLOSE); setLocationRelativeTo(null); setVisible(true); } private void initData() { colNames = new ArrayList<String>(); colNames.add("ID"); colNames.add("Name"); colNames.add("Date"); data = new ArrayList<List<Object>>(); for (int i = 0; i < 20; i++) { List<Object> record = new ArrayList<Object>(); record.add(String.valueOf(i + 1)); record.add("item" + (i + 1)); Calendar c = Calendar.getInstance(); c.set(2010, 3, i + 1); record.add(c); data.add(record); } shieldCalendar = Calendar.getInstance(); shieldCalendar.set(2010, 3, 10); } private class MTableModel extends DefaultTableModel { private static final long serialVersionUID = 1L; @Override public int getColumnCount() { return colNames.size(); } @Override public int getRowCount() { return data.size(); } @Override public String getColumnName(int column) { return colNames.get(column); } @Override public Object getValueAt(int row, int column) { return data.get(row).get(column); } @Override public boolean isCellEditable(int row, int column) { return false; } } private class MTableCellRenderer extends DefaultTableCellRenderer { private static final long serialVersionUID = 1L; @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if (value instanceof Calendar) { Calendar cal = (Calendar) value; if (cal.after(shieldCalendar)) { setBackground(Color.red); } else if (cal.equals(shieldCalendar)) { setBackground(Color.blue); } else { setBackground(Color.green); } DateFormat f = DateFormat.getDateInstance(DateFormat.LONG); String s = f.format(cal.getTime()); setText(s); } else { setBackground(Color.cyan); } return c; } } public static void main(String[] args) { new MainFrame(); }} 哪位大神有本地html格式的J2SE 1.6中文版api(不要chm的)??? 两个数组如何高速合并? package com.sun.java.swing.plaf.nimbus does not exist HashMap可以这样遍历么? 数据库连接问题 what 数据抽象 and 过程抽象 一个有关HTTP协议的问题,哪位大虾帮帮我 JAVA简单问题 为什么、我继承了THREAD类后对应超类的STOP方法被加了删除线,不能用? 我写的MD5算法JAVA源码,与大家共享 程序或思路 请大虾指点!!!!!!!!
package color.table;import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;public class MainFrame extends JFrame { private static final long serialVersionUID = 1L;
private List<String> colNames;
private List<List<Object>> data; private JTable table; private Calendar shieldCalendar; public MainFrame() {
super();
initData(); Container c = getContentPane();
table = new JTable();
table.setModel(new MTableModel());
table.getColumnModel().getColumn(0).setCellRenderer(
new MTableCellRenderer());
table.getColumnModel().getColumn(1).setCellRenderer(
new MTableCellRenderer());
table.getColumnModel().getColumn(2).setCellRenderer(
new MTableCellRenderer());
c.add(new JScrollPane(table)); setSize(600, 400);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true); } private void initData() {
colNames = new ArrayList<String>();
colNames.add("ID");
colNames.add("Name");
colNames.add("Date"); data = new ArrayList<List<Object>>();
for (int i = 0; i < 20; i++) {
List<Object> record = new ArrayList<Object>();
record.add(String.valueOf(i + 1));
record.add("item" + (i + 1));
Calendar c = Calendar.getInstance();
c.set(2010, 3, i + 1);
record.add(c); data.add(record);
} shieldCalendar = Calendar.getInstance();
shieldCalendar.set(2010, 3, 10);
} private class MTableModel extends DefaultTableModel { private static final long serialVersionUID = 1L; @Override
public int getColumnCount() {
return colNames.size();
} @Override
public int getRowCount() {
return data.size();
} @Override
public String getColumnName(int column) {
return colNames.get(column);
} @Override
public Object getValueAt(int row, int column) {
return data.get(row).get(column);
} @Override
public boolean isCellEditable(int row, int column) {
return false;
} } private class MTableCellRenderer extends DefaultTableCellRenderer {
private static final long serialVersionUID = 1L; @Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
Component c = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
if (value instanceof Calendar) {
Calendar cal = (Calendar) value; if (cal.after(shieldCalendar)) {
setBackground(Color.red);
} else if (cal.equals(shieldCalendar)) {
setBackground(Color.blue);
} else {
setBackground(Color.green);
} DateFormat f = DateFormat.getDateInstance(DateFormat.LONG);
String s = f.format(cal.getTime());
setText(s); } else {
setBackground(Color.cyan);
}
return c;
}
} public static void main(String[] args) {
new MainFrame();
}
}