【发布时间】:2016-12-19 08:47:04
【问题描述】:
我有这个来自 stackoverflow how to highlight multiple cells in jtable 的代码:
private static class CellHighlighterRenderer extends JLabel implements TableCellRenderer {
public CellHighlighterRenderer() {
setOpaque(true); // Or color won't be displayed!
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
String val = (String)value;
Color c;
if (val.matches(".*MIN.*")) // Add a method to configure the regexpr
c = Color.YELLOW; // Add a method to configure color
else
c = UIManager.getColor("Table.background");
setBackground(c);
setText(val);
return this;
}
}
但是当我使用它来突出显示一个单元格时,它会给出错误的操作,就像整个数据丢失一样。我是 java swing 新手。请帮助在按钮按下操作事件中突出显示单元格。
更新:添加我的示例代码:
package myPackage;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.table.TableCellRenderer;
public class JTableCreatingDemo {
public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Object rowData[][] = { { "Row1-Column1"},
{ "Row2-Column1" } ,{ "Row3-Column1"},{ "Row4-Column1"},};
Object columnNames[] = { "Column One" };
final JTable table = new JTable(rowData, columnNames);
JButton button = new JButton("Highlight cell-1");
//Add action listener to button
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
table.setDefaultRenderer(Object.class, new CellHighlighterRenderer());
}
});
JPanel pnl = new JPanel();
pnl.add(button);
JScrollPane scrollPane = new JScrollPane(table);
frame.add(scrollPane, BorderLayout.CENTER);
frame.add(pnl,BorderLayout.SOUTH);
frame.setSize(300, 150);
frame.setVisible(true);
}
}
class CellHighlighterRenderer extends JLabel implements TableCellRenderer {
/**
*
*/
private static final long serialVersionUID = 1L;
public CellHighlighterRenderer() {
setOpaque(true); // Or color won't be displayed!
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
String val = (String)value;
Color c;
if (isSelected) // Add a method to configure the regexpr
c = Color.YELLOW; // Add a method to configure color
else
c = UIManager.getColor("Table.background");
setBackground(c);
setText(val);
return this;
}
}
我想要的是单击按钮,我只想突出显示单元格编号 1(Row1-Column1)。
【问题讨论】:
-
您是否在代码中执行此操作? table.setDefaultRenderer(Object.class, new CellHighlighterRenderer());您的代码的完整堆栈应该更好,尤其是与您的 JTable 相关的代码
-
是的。我就这样通过了
-
@trashgod: 请检查一下我发布的代码
-
您的代码目前的工作方式如下。在按下按钮之前选择一个单元格使用默认的突出显示颜色。按下按钮选择一个单元格后,使用黄色作为突出显示颜色。这种行为有什么问题?
标签: java swing jtable cell highlight