Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当鼠标输入时,如何更改一行中所有JTable列的颜色?_Java_Swing_User Interface_Jtable - Fatal编程技术网

Java 当鼠标输入时,如何更改一行中所有JTable列的颜色?

Java 当鼠标输入时,如何更改一行中所有JTable列的颜色?,java,swing,user-interface,jtable,Java,Swing,User Interface,Jtable,当鼠标在表格中输入一行时,我希望该行中的每一列颜色都变为蓝色 我已经这样做了,它改变了,但它只有在我按下鼠标时才会改变,而不是当我的鼠标进入它时 private void changeColorTableCell(JTable tbl, int index) { tbl.getColumnModel().getColumn(index).setCellRenderer(new DefaultTableCellRenderer(){ @Override p

当鼠标在表格中输入一行时,我希望该行中的每一列颜色都变为蓝色

我已经这样做了,它改变了,但它只有在我按下鼠标时才会改变,而不是当我的鼠标进入它时

 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);
    }        
}     
private void changeColorTableCell(JTable tbl,int index){
tbl.getColumnModel().getColumn(index).setCellRenderer(新的DefaultTableCellRenderer()){
@凌驾
公共组件GetTableCellRenderComponent(JTable表、对象值、布尔isSelected、布尔hasFocus、int行、int列){
final Component c=super.getTableCellRenderComponent(表、值、isSelected、hasFocus、行、列);
c、 挫折背景(颜色:蓝色);
返回c;
}      
});
}
私有void选项卡elpesanamouseintered(java.awt.event.MouseEvent evt){
int count=tabelPesanan.getColumnModel().getColumnCount();
for(int i=0;i
当鼠标输入时,如何更改行中所有
JTable
列的颜色?

getColumn(index)。setCellRenderer(…)
将无法工作。如果要更改整行的颜色,不能只更改一列的渲染器

虽然可以设置默认渲染器,也可以设置每列的单元格渲染器,但更好的选择是覆盖,这样,除了背景色之外,任何其他渲染器都不会受到影响

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);

从代码片段中可以看出,您正在使用GUI生成器。恐怕我帮不了你。啊,谢谢你,伙计,它起作用了,你救了我的命,非常感谢@艾哈迈德夫马