我试图弄清楚为什么大型应用程序中的某些JTables
具有焦点指示符而有些则没有。为了调试这个问题,我添加了代码:
UIManager.put("Table.focusCellHighlightBorder",new BorderUIResource(
new LineBorder(new Color(255,0,0)));
那些带有焦点指示的JTables
变为红色,但我仍然没有在所有JTables
上看到焦点指示。知道为什么JTable
中的单元格不会显示焦点指示符吗?
答案 0 :(得分:1)
您需要在创建表之前“设置”UI属性。
如果您仍有问题,请发布展示问题的SSCCE,因为我们无法猜测您在做什么。
答案 1 :(得分:1)
也许他/她的意思是(在你的例子中加上一些......)
public JavaGUI() {
CustomModel model = new CustomModel();
JTable table = new JTable(model) {
private static final long serialVersionUID = 1L;
private Border outside = new MatteBorder(1, 0, 1, 0, Color.red);
private Border inside = new EmptyBorder(0, 1, 0, 1);
private Border highlight = new CompoundBorder(outside, inside);
@Override
public Component prepareRenderer(
TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
JComponent jc = (JComponent) c;
if (isRowSelected(row)) {
jc.setBackground(Color.orange);
jc.setBorder(highlight);
} else {
jc.setBackground(Color.white);
}
return c;
}
};
for (int i = 1; i <= 16; i++) {
model.addRow(newRow(i));
}
this.add(table);
}
答案 2 :(得分:0)
两个JTable都使用了一个单元格渲染器,它继承了DefaultTableCellRenderer并覆盖了getTableCellRendererComponent方法。显示焦点指示符的JTable的重写getTableCellRendererComponent方法,称为super.getTableCellRendererComponent方法,但是未显示焦点指示符的JTable的重写getTableCellRendererComponent方法未调用super.getTableCellRendererComponent方法。
带焦点指示的JTable:
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int col) {
Component comp = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, col);
....
没有焦点指示的JTable:
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected,
boolean hasFocus, int row,
int col) {
for (int i = 0; i < ids.length; i++) {
....