Java JTable граница в строке, где щелкает мышь - PullRequest
0 голосов
/ 14 февраля 2019

Привет всем, что я пытаюсь заставить это работать так, как мне нужно.В настоящее время он помещает красную рамку вокруг строки, которую я нажимаю, НО, как только я щелкаю по другой строке, она удаляется от первой и т. Д. И т. Д.

Вот как выглядит мой jtable:

enter image description here

И это мой Java-код, который применяет границу к строке:

table = new JTable(model) {
    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
       Component c      = super.prepareRenderer(renderer, row, column);
       JComponent jc    = (JComponent)c;
       int selCol       = table.getSelectedColumn();
       int lastRow      = table.getRowCount();

       //  Color row based on a cell value
       if (isRowSelected(row)){
           int top      = (row > 0 && isRowSelected(row - 1)) ? 1 : 2;
           int left     = column == 0 ? 2 : 0;
           int bottom   = (row < getRowCount() - 1 && isRowSelected(row + 1)) ? 1 : 2;
           int right    = column == getColumnCount() - 1 ? 2 : 0;

           jc.setBorder(BorderFactory.createMatteBorder(top, left, bottom, right, Color.RED));                         
       }

       return c;
    }
};

Так что же язабываете сделать, чтобы граница строки оставалась цветной, когда я перехожу к другой строке?

1 Ответ

0 голосов
/ 14 февраля 2019

Первое: таблицы могут отрисовывать все свои ячейки, повторно используя один компонент.Повторное использование компонента означает отсутствие сохранения какого-либо состояния, такого как граница / цвет.

   if (isRowSelected(row)) {
       int top      = (row > 0 && isRowSelected(row - 1)) ? 1 : 2;
       int left     = column == 0 ? 2 : 0;
       int bottom   = (row < getRowCount() - 1 && isRowSelected(row + 1)) ? 1 : 2;
       int right    = column == getColumnCount() - 1 ? 2 : 0;

       jc.setBorder(BorderFactory.createMatteBorder(top, left, bottom, right, Color.RED));
   } else {
       jc.setBorder(BorderFactory.createEmptyBorder();
   }

Тогда есть очевидное isRowSelected(row).Если щелчок по новой строке выберет эту строку в режиме одиночного выбора (выбрана только одна строка), эффект будет описан.Поэтому проверьте выбор.

...