gpt4 book ai didi

java - JTable 单元格颜色

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

有人能给我一个如何获取 JTable 中特定单元格的背景颜色的示例吗?我无法找到如何执行此操作的示例。有很多关于获取单元格中的值的示例,但不是获取单元格的背景颜色。

最佳答案

它应该类似于以下内容(根据所有评论修复):

重要:使用 table.prepareRenderer(...) 让 JTable 为您完成所有工作

public Color getTableCellBackground(JTable table, int row, int col) {
TableCellRenderer renderer = table.getCellRenderer(row, col);
Component component = table.prepareRenderer(renderer, row, col);
return component.getBackground();
}

完整演示:

public class TableRenderDemo extends JPanel {

public TableRenderDemo() {
super(new GridLayout(1, 0));

final JTable table = new JTable(new MyTableModel());
table.setPreferredScrollableViewportSize(new Dimension(600, 200));
table.setFillsViewportHeight(true);
table.setDefaultRenderer(Object.class, new MyRenderer());

table.addMouseListener(new MouseAdapter() {

public void mouseClicked(MouseEvent e) {
int row = table.getSelectedRow();
int col = table.getSelectedColumn();

JOptionPane.showInternalMessageDialog(TableRenderDemo.this,
"Color: " + getTableCellBackground(table, row, col));

System.out.println("Color: " + getTableCellBackground(table, row, col));
}
});

JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
}

public Color getTableCellBackground(JTable table, int row, int col) {
TableCellRenderer renderer = table.getCellRenderer(row, col);
Component component = table.prepareRenderer(renderer, row, col);
return component.getBackground();
}

class MyRenderer implements TableCellRenderer {

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
JTextField editor = new JTextField();
if (value != null) {
editor.setText(value.toString());
}
editor.setBackground((row % 2 == 0) ? Color.white : Color.BLUE);
return editor;
}
}

class MyTableModel extends AbstractTableModel {

private String[] columnNames = {"First Name",
"Last Name",
"Sport",
"# of Years",
"Vegetarian"};
private Object[][] data = {
{"Kathy", "Smith",
"Snowboarding", new Integer(5), new Boolean(false)},
{"John", "Doe",
"Rowing", new Integer(3), new Boolean(true)},
{"Sue", "Black",
"Knitting", new Integer(2), new Boolean(false)},
{"Jane", "White",
"Speed reading", new Integer(20), new Boolean(true)},
{"Joe", "Brown",
"Pool", new Integer(10), new Boolean(false)}
};
public final Object[] longValues = {"Jane", "Kathy",
"None of the above",
new Integer(20), Boolean.TRUE};

public int getColumnCount() {
return columnNames.length;
}

public int getRowCount() {
return data.length;
}

public String getColumnName(int col) {
return columnNames[col];
}

public Object getValueAt(int row, int col) {
return data[row][col];
}
}

private static void createAndShowGUI() {
JFrame frame = new JFrame("TableRenderDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

TableRenderDemo newContentPane = new TableRenderDemo();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);

frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {

public void run() {
createAndShowGUI();
}
});
}
}

关于java - JTable 单元格颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12861402/

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