当前位置: 代码迷 >> java >> 鼠标单击所在行的Java JTable边框
  详细解决方案

鼠标单击所在行的Java JTable边框

热度:57   发布时间:2023-07-31 11:57:51.0

嘿,我正在尝试使此功能能够按需运行。 目前,当我单击另一行时,它的确在我单击的行周围放置了一个红色边框,它偏离了第一行,依此类推。

这是我的jtable的样子:

这是我的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;
    }
};

那么,当我移动到另一行时,为了使行边框保持颜色而忘记了做什么呢?

第一件事:表可以通过重用一个组件来绘制其所有单元格。 组件重用意味着不保存任何状态,例如边框/颜色。

   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) 如果单击新行以单选模式选择了该行(仅选择了一行),则将描述其效果。 因此,请检查选择。

  相关解决方案