gpt4 book ai didi

Java jTable 定义单元格上的颜色行更改

转载 作者:行者123 更新时间:2023-12-02 09:59:10 26 4
gpt4 key购买 nike

大家好,我没有发现下面的代码有什么不正确的地方。它可以很好地填充表格和标题。但是,当我将第 1 行、第 1 列更改为测试并单击时,它不会像我预期的那样为该行着色。然后点击我点击的那个就会变成绿色,从那时起我点击表格的任何地方都会变成绿色。

该列不会从 1(公司) 发生更改,因为这将是要进行更改的默认列。 是这里唯一的动态数字。

测试流程:

  • 双击 IBM。
  • 输入测试
  • 单击任何其他单元格以保存该单元格值。
  • 该行未更改(第 1 行)。
  • 再次单击测试单元格。
  • 所有行都将变为绿色。

预期流程:

  • 双击 IBM。
  • 输入测试
  • 单击任何其他单元格以保存该单元格值。
  • 更改为测试的单元格会将该行更改为绿色
  • 点击单元格(3, 3)共享
  • 双击并将 4000 更改为 1000
  • 单击任何其他单元格以保存该单元格值。
  • 更改为1000的单元格会将该行更改为红色

填充表格和标题:

enter image description here

单击并将第 1 行、第 1 列值更改为测试:

enter image description here

编辑后将该单元格单击到另一个单元格上:

enter image description here

现在,单击任何其他单元格(请注意测试行不是应有的绿色):

enter image description here

现在单击我编辑的单元格来测试:

enter image description here

你在上面看到它只是为我点击的每一行着色,无论我说的逻辑如何

if ("test".equals(type)) {...

java代码:

@SuppressWarnings("serial")
public class TableRowRenderingTip extends JPanel {
public TableRowRenderingTip() {
Object[] columnNames = {"Type", "Company", "Shares", "Price", "Boolean"};
Object[][] data =
{
{"Buy", "IBM", new Integer(1000), new Double(80.5), Boolean.TRUE},
{"Sell", "Dell", new Integer(2000), new Double(6.25), Boolean.FALSE},
{"Short Sell", "Apple", new Integer(3000), new Double(7.35), Boolean.TRUE},
{"Buy", "MicroSoft", new Integer(4000), new Double(27.50), Boolean.FALSE},
{"Short Sell", "Cisco", new Integer(5000), new Double(20), Boolean.TRUE}
};

DefaultTableModel model = new DefaultTableModel(data, columnNames) {
@SuppressWarnings({ "unchecked", "rawtypes" })
public Class getColumnClass(int column) {
return getValueAt(1, column).getClass();
}
};

JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.addTab("Border", createBorder(model));
add(tabbedPane);
}

private JComponent createBorder(DefaultTableModel model) {
JTable table = new JTable(model) {
private Border outside = new MatteBorder(1, 0, 1, 0, Color.RED);
private Border _outside = new MatteBorder(1, 0, 1, 0, Color.GREEN);
private Border inside = new EmptyBorder(0, 1, 0, 1);
private Border highlight = new CompoundBorder(outside, inside);
private Border _highlight = new CompoundBorder(_outside, inside);

public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
JComponent jc = (JComponent)c;
String type = (String)getModel().getValueAt(convertRowIndexToModel(row), 1);

if (isRowSelected(row)) {
if ("test".equals(type)) {
jc.setBorder( _highlight ); // Green color
jc.setBackground(Color.GREEN);
} else {
jc.setBorder( highlight ); //Red color
}
}

return c;
}
};

//table.setPreferredScrollableViewportSize(table.getPreferredSize());
//table.changeSelection(0, 0, false, false);
return new JScrollPane( table );
}

public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}

public static void createAndShowGUI()
{
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("Table Row Rendering");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( new TableRowRenderingTip() );
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}

不用说,至少我有点沮丧,因为我已经为此工作了几个小时,试图找出可能出现的问题。

我确信我正在研究的事情会很简单......

最佳答案

如果测试条件不成立,您会忘记将边框设置为默认值并突出显示。例如

if (isRowSelected(row)) {
if ("test".equals(type)) {
jc.setBorder(_highlight); // Green color
jc.setBackground(Color.GREEN);
} else {
jc.setBorder(highlight); // Red color
}
} else {
jc.setBorder(null);
jc.setBackground(null);
}

关于Java jTable 定义单元格上的颜色行更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55766070/

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