Почему не все Java Swing JTables имеют индикатор фокуса - PullRequest
0 голосов
/ 30 июля 2011

Я пытаюсь выяснить, почему некоторые JTables в большом приложении имеют индикатор фокуса, а некоторые нет. Чтобы устранить эту проблему, я добавил код:

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

А те JTables с индикаторами фокусировки поменялись на красный, но я все еще не вижу индикатор фокусировки на всех JTables. Есть идеи, почему ячейки в JTable не показывают индикатор фокуса?

Ответы [ 3 ]

1 голос
/ 30 июля 2011

возможно, он / она имеет в виду (добавьте к вашему примеру что-нибудь ...)

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);
} 
1 голос
/ 30 июля 2011

Вам необходимо установить свойство пользовательского интерфейса "до" создания таблицы.

Если у вас все еще есть проблема, тогда опубликуйте SSCCE , который демонстрирует проблему, потому что мы не можем угадать, чтовы делаете.

0 голосов
/ 01 августа 2011

Обе JTables использовали средство визуализации ячеек, которое подклассифицировало DefaultTableCellRenderer и переопределяло метод getTableCellRendererComponent. Переопределенный метод getTableCellRendererComponent для JTable, который показал индикатор фокуса, называется методом super.getTableCellRendererComponent, но переопределенный метод getTableCellRendererComponent для JTable, который не показывает индикаторы фокуса, НЕ вызывал метод super *getTableCellRen.

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++) {
      ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...