Java JTable-单元格突出显示和行突出显示问题
我是spring新手,正在尝试JTable行和单元格选择的不同选项。坚持这个问题 我有一个简单的JTable,记录很少,添加了CellHighlight功能(来自stackoverflow),它工作得很好。但添加此选项后,行选择高亮显示不会发生 请说明我遗漏了什么 例如:Java JTable-单元格突出显示和行突出显示问题,java,swing,jtable,tablecellrenderer,Java,Swing,Jtable,Tablecellrenderer,我是spring新手,正在尝试JTable行和单元格选择的不同选项。坚持这个问题 我有一个简单的JTable,记录很少,添加了CellHighlight功能(来自stackoverflow),它工作得很好。但添加此选项后,行选择高亮显示不会发生 请说明我遗漏了什么 例如: import com.log.spark.QueryParams; import org.apache.commons.lang3.StringUtils; import javax.swing.*; import java
import com.log.spark.QueryParams;
import org.apache.commons.lang3.StringUtils;
import javax.swing.*;
import javax.swing.table.TableCellRenderer;
import javax.swing.text.DefaultHighlighter;
import java.awt.*;
public class TableExample {
JFrame f;
TableExample() {
f = new JFrame();
String data[][] = {{"101", "Amit", "670000"},
{"102", "Jai", "780000"},
{"101", "Sachin", "700000"}};
String column[] = {"ID", "NAME", "SALARY"};
JTable jt = new JTable(data, column);
jt.setBounds(30, 40, 200, 300);
JScrollPane sp = new JScrollPane(jt);
jt.setDefaultRenderer(Object.class, new CellHighlightRenderer());
f.add(sp);
f.setSize(300, 400);
f.setVisible(true);
}
public static void main(String[] args) {
new TableExample();
}
}
class CellHighlightRenderer extends JTextField implements TableCellRenderer {
public DefaultHighlighter high = new DefaultHighlighter();
private QueryParams params = QueryParams.getInstance();
public DefaultHighlighter.DefaultHighlightPainter highlight_painter
= new DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW);
public CellHighlightRenderer() {
setBorder(BorderFactory.createEmptyBorder());
setHighlighter(high);
}
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected,
boolean hasFocus, int row,
int column) {
setFont(table.getFont());
setValue(value);
int pos = 0;
String pattern = params.getHighlightTxt();
//if (len > last) {
if (StringUtils.isNotBlank(pattern) && !pattern.equals("search message")) {
while ((pos = value.toString().indexOf(pattern, pos)) >= 0) {
try {
//high.addHighlight(first, last, highlight_painter);
high.addHighlight(pos, pos + pattern.length(), highlight_painter);
pos += pattern.length();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return this;
}
protected void setValue(Object value) {
setText((value == null) ? "" : value.toString());
}
}
您忘记了为渲染器设置适当的背景(和前景)。您需要在
getTableCellRenderComponent
方法中添加以下行
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected,
boolean hasFocus, int row,
int column) {
// need to be added
setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
setForeground(isSelected ? table.getSelectionForeground() : table.getForeground());
//-------------
setFont(table.getFont());
setValue(value);
int pos = 0;
String pattern = params.getHighlightTxt();
//if (len > last) {
if (StringUtils.isNotBlank(pattern) && !pattern.equals("search message")) {
while ((pos = value.toString().indexOf(pattern, pos)) >= 0) {
try {
//high.addHighlight(first, last, highlight_painter);
high.addHighlight(pos, pos + pattern.length(), highlight_painter);
pos += pattern.length();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return this;
}