为什么不是所有Java Swing JTable都有焦点指示器

时间:2011-07-29 21:02:00

标签: java swing jtable

我试图弄清楚为什么大型应用程序中的某些JTables具有焦点指示符而有些则没有。为了调试这个问题,我添加了代码:

UIManager.put("Table.focusCellHighlightBorder",new BorderUIResource(
    new LineBorder(new Color(255,0,0))); 

那些带有焦点指示的JTables变为红色,但我仍然没有在所有JTables上看到焦点指示。知道为什么JTable中的单元格不会显示焦点指示符吗?

3 个答案:

答案 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++) {
      ....