gpt4 book ai didi

java - 使用 getTableCellRendererComponent 更改 JTable 单元格颜色 没有任何反应

转载 作者:行者123 更新时间:2023-12-02 03:03:02 25 4
gpt4 key购买 nike

我正在尝试更改 JTable 中某些单元格的颜色。我尝试在一个简单的示例中重写 getTableCellRendererComponent ,并且效果很好。但是当我在我的项目中做同样的事情时,没有任何改变......

我的 JPanel 和 JTable 都放在一个盒子里,如下所示:

boxTable=Box.createHorizontalBox();
box2Table.add(boxTable);

//JTable
tablaContador = new JTable(datosContador,cabeceraContador);

//MODIF COLOR
tablaContador.setDefaultRenderer(Object.class, new ColorRenderer());

正在做:

System.out.println(tablaContador.getColumnClass(3));

可以知道setDefaultRenderer的第一个参数是Object.class我不知道问题是否在这里...我表中只有字符串,但我尝试过 String.class 但没有任何反应

然后我修改了JTable的Cells的一些东西:

tablaContador.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
boxTable.add(tablaContador);


//Align cells
for (int i=0; i<cabeceraContador.length;i++){
tablaContador.getColumnModel().getColumn(i).setCellRenderer(alinearCeldas);
}

//Modify cells' width
tablaContador.getColumnModel().getColumn(0).setMinWidth(150);
for (int i=1; i<cabeceraContador.length;i++){
tablaContador.getColumnModel().getColumn(i).setMaxWidth(40);
}

//Scroll for the Table
scrollContador=new JScrollPane(tablaContador,JScrollPane.VERTICAL_SCROLLBAR_NEVER,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

scrollContador.setPreferredSize(new Dimension(1000,80));
scrollContador.setMinimumSize(new Dimension(1000,80));
scrollContador.setMaximumSize(new Dimension(2000,80));

//Add scroll to the box
box2Table.add(scrollContador);

我的 ColorRenderer 类是:

public class ColorRenderer extends DefaultTableCellRenderer{

private Component c;

@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row, int column) {

c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);


c.setBackground(Color.BLUE);


return c;
}


}

Table result

所以它在我的项目中不起作用,我不知道为什么

有什么想法吗?

谢谢!

最佳答案

我明白了:

tablaContador.setDefaultRenderer(Object.class, new ColorRenderer());

然后我看到:

for (int i=0; i<cabeceraContador.length;i++)
{
tablaContador.getColumnModel().getColumn(i).setCellRenderer(alinearCeldas);
}

将渲染器分配给特定列优先于设置默认渲染器,因此永远不会使用您的颜色渲染器。

不完全是您想要做的,但我猜您需要将颜色渲染逻辑添加到对齐渲染器中。换句话说,所有渲染逻辑必须包含在单个渲染器中。您无法合并多个渲染器。

这是自定义渲染器的一个简单示例:

import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;

public class TableRenderer extends JPanel
{
public TableRenderer()
{
String[] columnNames = {"String", "Integer"};
Object[][] data =
{
{"A", new Integer(1)},
{"B", new Integer(2)},
{"C", new Integer(10)},
{"D", new Integer(4)}
};

DefaultTableModel model = new DefaultTableModel(data, columnNames);
JTable table = new JTable( model );
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scrollPane = new JScrollPane( table );
add( scrollPane );

// Override default renderer on a specific column

TableCellRenderer colorRenderer = new ColorRenderer();
table.getColumnModel().getColumn(1).setCellRenderer( colorRenderer );
}

/*
** Color the focused cell
*/
class ColorRenderer extends DefaultTableCellRenderer
{
public ColorRenderer()
{
super();
setHorizontalAlignment(JLabel.RIGHT);
}

@Override
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

if (isSelected)
setBackground( table.getSelectionBackground() );
else
{
setBackground( null );

try
{
int number = Integer.parseInt( value.toString() );

if (number > 9)
setBackground( Color.RED );
}
catch(Exception e) {}
}

return this;
}
}

private static void createAndShowGUI()
{
JFrame frame = new JFrame("Color Renderer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TableRenderer());
frame.pack();
frame.setLocationByPlatform( true );
frame.setVisible( true );
}

public static void main(String[] args)
{
EventQueue.invokeLater( () -> createAndShowGUI() );
/*
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
*/
}
}

关于java - 使用 getTableCellRendererComponent 更改 JTable 单元格颜色 没有任何反应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42179972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com