如何设计出这种效果的JTable? 本帖最后由 iv111 于 2009-08-17 13:52:14 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 重新实现一个TableCellRenderer就可以了。给你做了一个,你可以参考一下,呵呵import java.awt.BorderLayout;import java.awt.Color;import java.awt.Component;import java.awt.FlowLayout;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTable;import javax.swing.table.DefaultTableModel;import javax.swing.table.TableCellRenderer;public class TableTest extends JFrame { private static final long serialVersionUID = 935242953629005162L; private JTable table = null; public TableTest() { setLayout(new BorderLayout()); table = new JTable(new DefaultTableModel(20, 4) { private static final long serialVersionUID = 4248093736568819249L; public Object getValueAt(int rowIndex, int columnIndex) { return rowIndex + ":" + columnIndex; } }); for (int i = 0; i < table.getColumnCount(); i++) table.getColumnModel().getColumn(i).setCellRenderer( new MyTableCellRenderer()); this.add(table, BorderLayout.CENTER); } private class MyTableCellRenderer implements TableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0)); String data = value.toString(); JLabel label1 = new JLabel(data.substring(0, data.length() - 1)); label1.setForeground(Color.black); JLabel label2 = new JLabel(data.substring(data.length() - 1)); label2.setForeground(Color.white); label2.setBackground(Color.black); label2.setOpaque(true); panel.add(label1); panel.add(label2); if(row % 2 == 0) panel.setBackground(Color.yellow); else panel.setBackground(Color.green); return panel; } } public static void main(String[] args) { JFrame frame = new TableTest(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 300); frame.setResizable(false); frame.setVisible(true); }} 呵呵,其实比你想象的还要简单一些JTable的单元格绘制为JLabel,并且设置JLabel背景这些是基础,就不说了,关键是JLabel的text,把这个设置为 <html><table><tr><td>12</td><td bgcolor='#000000'><font color='white'>7</font></color></td></tr></table></html> 你看看效果如何,应该能满足你的要求,高度这些再调整就行了 有可以修改的需求吗?没有没有的话,2L的方法就可行。如果可以修改的话,需要实现相应 CellRenderer 和 CellEditor 在java中,如何获取windows系统的各种运行信息呢? 关于JAVA帮助文档的问题,请各位大下来下 JCreator执行完程序后死掉 急求!分不多,但已经是全部了! 继承问题 关于JComboBox的简单问题,求助! 求java打印文件源程序 JDK在XP下的配置???? 如何得到4位的随机整数?谢谢给分! 求助:函数返回的数组内容为空,这是怎么回事? Socket文件夹传送 求高人!java二维数组打印的问题
import java.awt.Color;
import java.awt.Component;
import java.awt.FlowLayout;import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;public class TableTest extends JFrame { private static final long serialVersionUID = 935242953629005162L;
private JTable table = null; public TableTest() {
setLayout(new BorderLayout());
table = new JTable(new DefaultTableModel(20, 4) { private static final long serialVersionUID = 4248093736568819249L; public Object getValueAt(int rowIndex, int columnIndex) {
return rowIndex + ":" + columnIndex;
}
});
for (int i = 0; i < table.getColumnCount(); i++)
table.getColumnModel().getColumn(i).setCellRenderer(
new MyTableCellRenderer());
this.add(table, BorderLayout.CENTER);
} private class MyTableCellRenderer implements TableCellRenderer { public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));
String data = value.toString();
JLabel label1 = new JLabel(data.substring(0, data.length() - 1));
label1.setForeground(Color.black);
JLabel label2 = new JLabel(data.substring(data.length() - 1));
label2.setForeground(Color.white);
label2.setBackground(Color.black);
label2.setOpaque(true);
panel.add(label1);
panel.add(label2);
if(row % 2 == 0)
panel.setBackground(Color.yellow);
else
panel.setBackground(Color.green);
return panel;
} } public static void main(String[] args) {
JFrame frame = new TableTest();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setResizable(false);
frame.setVisible(true);
}
}