Google Tag Manager

2011/01/20

JTable RowHeader

Code

class RowHeaderList<E> extends JList<E> {
  private final JTable table;
  private final ListSelectionModel tableSelection;
  private final ListSelectionModel rListSelection;
  private int rollOverRowIndex = -1;
  private int pressedRowIndex  = -1;

  public RowHeaderList(ListModel<E> model, JTable table) {
    super(model);
    this.table = table;
    setFixedCellHeight(table.getRowHeight());
    setCellRenderer(new RowHeaderRenderer<E>(table.getTableHeader()));
    RollOverListener rol = new RollOverListener();
    addMouseListener(rol);
    addMouseMotionListener(rol);

    tableSelection = table.getSelectionModel();
    rListSelection = getSelectionModel();
  }

  class RowHeaderRenderer<E> extends JLabel
                             implements ListCellRenderer<E> {
    private final JTableHeader header; // = table.getTableHeader();
    public RowHeaderRenderer(JTableHeader header) {
      super();
      this.header = header;
      this.setOpaque(true);
      // this.setBorder(UIManager.getBorder("TableHeader.cellBorder"));
      this.setBorder(BorderFactory.createMatteBorder(
          0, 0, 1, 2, Color.GRAY.brighter()));
      this.setHorizontalAlignment(CENTER);
      this.setForeground(header.getForeground());
      this.setBackground(header.getBackground());
      this.setFont(header.getFont());
    }

    @Override public Component getListCellRendererComponent(
        JList<? extends E> list, E value, int index,
        boolean isSelected, boolean cellHasFocus) {
      if (index == pressedRowIndex) {
        setBackground(Color.GRAY);
      } else if (index == rollOverRowIndex) {
        setBackground(Color.WHITE);
      } else if (isSelected) {
        setBackground(Color.GRAY.brighter());
      } else {
        setForeground(header.getForeground());
        setBackground(header.getBackground());
      }
      setText(Objects.toString(value, ""));
      return this;
    }
  }
  // ...
}

References

No comments:

Post a Comment