JTable 单元格文本颜色更改
JTable cell text color changing
我对 Java 和编程本身很陌生,所以请原谅这个问题。我想做的是:
我正在制作簿记程序。在显示 income/outcome 的列上,我想要它,所以当用户输入 negative 数字(例如 -1.150€)时,
数字变成红色(或任何颜色,但大多数簿记程序使用红色)。仅该列上的特定单元格。我还没有开始使用代码,所以我不能在这里输入一个。我也不需要它右对齐,因为我已经这样做了。
PS。很抱歉,如果这个 post/question 已经存在,我进行了搜索,但没有找到任何可以帮助我的东西。
一个在单列中有双精度值的小例子。此版本使用 JTable.setDefaultRenderer
代替 Double.class
。
您还可以设置颜色
- 来自
JTable.prepareRenderer
的覆盖
- 通过调用
TableColumn.setCellRenderer
; TableColumn
instances can be retrieved from the TableColumnModel
从为列单独设置的渲染器
import java.awt.*;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
@SuppressWarnings("serial")
public class TableWithColors {
protected static JTable createTable() {
Object[][] rows = new Object[][] {{1.23d},{-20.5d},{5.87d},{2.23d},{-7.8d},{-8.99d},{9d},{16.25d},{4.23d},{-26.22d},{-14.14d}};
Object[] cols = new Object[]{"Balance"};
JTable t = new JTable(rows,cols) {
@Override
public Class<?> getColumnClass(int column) {
if(convertColumnIndexToModel(column)==0) return Double.class;
return super.getColumnClass(column);
}
};
t.setDefaultRenderer(Double.class, new DefaultTableCellRenderer(){
@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);
c.setForeground(((Double) value)>0 ? Color.BLUE : Color.RED);
return c;
}
});
return t;
}
private static JFrame createFrame() {
JFrame f = new JFrame("Table with colors");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new BorderLayout());
f.add(new JScrollPane(createTable()),BorderLayout.CENTER);
f.setSize(new Dimension(60,255));
return f;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createFrame().setVisible(true);
}
});
}
}
就像:
我对 Java 和编程本身很陌生,所以请原谅这个问题。我想做的是:
我正在制作簿记程序。在显示 income/outcome 的列上,我想要它,所以当用户输入 negative 数字(例如 -1.150€)时, 数字变成红色(或任何颜色,但大多数簿记程序使用红色)。仅该列上的特定单元格。我还没有开始使用代码,所以我不能在这里输入一个。我也不需要它右对齐,因为我已经这样做了。
PS。很抱歉,如果这个 post/question 已经存在,我进行了搜索,但没有找到任何可以帮助我的东西。
一个在单列中有双精度值的小例子。此版本使用 JTable.setDefaultRenderer
代替 Double.class
。
您还可以设置颜色
- 来自
JTable.prepareRenderer
的覆盖
- 通过调用
TableColumn.setCellRenderer
;TableColumn
instances can be retrieved from theTableColumnModel
从为列单独设置的渲染器
import java.awt.*;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
@SuppressWarnings("serial")
public class TableWithColors {
protected static JTable createTable() {
Object[][] rows = new Object[][] {{1.23d},{-20.5d},{5.87d},{2.23d},{-7.8d},{-8.99d},{9d},{16.25d},{4.23d},{-26.22d},{-14.14d}};
Object[] cols = new Object[]{"Balance"};
JTable t = new JTable(rows,cols) {
@Override
public Class<?> getColumnClass(int column) {
if(convertColumnIndexToModel(column)==0) return Double.class;
return super.getColumnClass(column);
}
};
t.setDefaultRenderer(Double.class, new DefaultTableCellRenderer(){
@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);
c.setForeground(((Double) value)>0 ? Color.BLUE : Color.RED);
return c;
}
});
return t;
}
private static JFrame createFrame() {
JFrame f = new JFrame("Table with colors");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new BorderLayout());
f.add(new JScrollPane(createTable()),BorderLayout.CENTER);
f.setSize(new Dimension(60,255));
return f;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createFrame().setVisible(true);
}
});
}
}
就像: