简体   繁体   中英

How to change all JTable column color in a row when mouse entered?

I want when the mouse enter a row in table, I want every column colors in that row change to blue.

I have done this, and it changed, but it only change when I press my mouse not when my mouse enter it.

 private void changeColorTableCell(JTable tbl, int index) {
    tbl.getColumnModel().getColumn(index).setCellRenderer(new DefaultTableCellRenderer(){
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            final Component c =  super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
            c.setBackground(Color.BLUE);
            return c;
        }      
    });
}

private void tabelPesananMouseEntered(java.awt.event.MouseEvent evt) {                                          

    int count = tabelPesanan.getColumnModel().getColumnCount();
    for(int i = 0; i < count; i++) {
        changeColorTableCell(tabelPesanan, i);
    }        
}     

How to change all JTable column color in a row when mouse entered ?

getColumn(index).setCellRenderer(…) won't work. If you want to change the color of an entire row, you can't just change the renderer of one column.

While you could set a default renderer, or you could set the cell renderers of each column, the better option is to override prepareRenderer , so any other renderers will not be affected aside from their background color.

private int hoveredRow = -1;

// ...

    JTable tabelPesanan = new JTable() {
        private static final long serialVersionUID = 1;

        @Override
        public Component prepareRenderer(TableCellRenderer renderer,
                                         int row,
                                         int column) {
            Component component =
                super.prepareRenderer(renderer, row, column);

            if (row == hoveredRow) {
                component.setBackground(Color.BLUE);
            } else if (isCellSelected(row, column)) {
                component.setBackground(getSelectionBackground());
            } else {
                component.setBackground(getBackground());
            }

            return component;
        }
    };

    MouseInputListener hoveredRowUpdater = new MouseInputAdapter() {
        private void repaintRow(int row) {
            if (row >= 0) {
                Rectangle bounds = tabelPesanan.getCellRect(row, 0, true);
                int width = tabelPesanan.getWidth();
                tabelPesanan.repaint(0, bounds.y, width, bounds.height);
            }
        }

        private void updateHoveredRowFrom(MouseEvent event) {
            int oldHoveredRow = hoveredRow;
            hoveredRow = tabelPesanan.rowAtPoint(event.getPoint());
            repaintRow(oldHoveredRow);
            repaintRow(hoveredRow);
        }

        @Override
        public void mouseEntered(MouseEvent event) {
            updateHoveredRowFrom(event);
        }

        @Override
        public void mouseExited(MouseEvent event) {
            updateHoveredRowFrom(event);
        }

        @Override
        public void mouseMoved(MouseEvent event) {
            updateHoveredRowFrom(event);
        }

        @Override
        public void mouseDragged(MouseEvent event) {
            updateHoveredRowFrom(event);
        }
    };

    tabelPesanan.addMouseListener(hoveredRowUpdater);
    tabelPesanan.addMouseMotionListener(hoveredRowUpdater);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM