我正在使用自定义CellRenderer(TableCellRenderer的一个实例)来渲染下面描述的CLOSE列的Cells。我为表格的setSelectionBackGround设置了颜色,但是所选列的bg颜色的单元格在选中时不会被绘制。请给我任何见解,我将非常感激。
这是我的TablecellRenderer类
class LabelRenderer extends JLabel implements TableCellRenderer {
Font f;
Color selectionBG;
Color upDirection;
LabelRenderer(){
super();
f=new java.awt.Font("Trebuchet MS", 0, 12);
selectionBG = new java.awt.Color(204, 255, 255);
upDirection= new Color(0,102,0);
}
@Override
public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
//structure of passing array (value)
// new Object[]{boolean direction, String close (change%)}
Object arr[] = (Object[])value;
Boolean direction = (Boolean)arr[0];
if( direction )
this.setForeground(upDirection);//GREEN
else
this.setForeground(Color.red);
this.setText(arr[1].toString());
this.setFont(f);
return this;
}
}
答案 0 :(得分:2)
您的渲染器扩展JLabel
,默认情况下不是不透明的。您可以在渲染器中执行setOpaque(true)
。或者,您可以扩展默认情况下不透明的DefaultTableCellRenderer
。例如:
import java.awt.Color;
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
public class TableBgDemo {
private static void createAndShowGUI() {
JFrame frame = new JFrame("TableDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Object[][] rows = { { "Column 1", "Column 2" },
{ "Column 1", "Column 2" }, { "Column 1", "Column 2" },
{ "Column 1", "Column 2" } };
Object[] columns = { "Column 1", "Column 2" };
DefaultTableModel model = new DefaultTableModel(rows, columns);
JTable table = new JTable(model);
table.getColumnModel().getColumn(0).setCellRenderer(new MyRenderer());
table.setSelectionBackground(Color.CYAN);
frame.add(new JScrollPane(table));
frame.pack();
frame.setVisible(true);
}
static public class MyRenderer extends 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(Color.RED);
return c;
}
}
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
答案 1 :(得分:2)
我正在使用自定义CellRenderer(TableCellRenderer的一个实例) 渲染下面描述的CLOSE列的单元格。我设置了一种颜色 对于表的setSelectionBackGround但是所说的单元格 选择时,列的bg颜色不会被绘制。请提供给我 有任何见解,我将非常感激。
问题是由两个错误引起的
您的渲染器,不要使用此代码,这里有一些优秀的代码,(我将使用prepareRenderer for RowRenderer)
永远不要设置,修改,添加来自Model的值,意思是代码行this.setText(arr[1].toString());
,Renderer是关于荧光笔,装饰器