首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jtable cellRenderer更改行的背景

Jtable cellRenderer更改行的背景
EN

Stack Overflow用户
提问于 2013-04-09 04:32:31
回答 1查看 3K关注 0票数 0

我已经尝试了一段时间,并在互联网上寻找解决方案,但我失败了。我想做的是动态地改变Jtable的行背景。我已经创建了arrayList,它保留了选定行的数量(每次用户在单元格上按alt+click时都会添加它们),并且在我自己的tableCellRenderer中添加了

代码语言:javascript
复制
for(Integer c: leftSelectedCells){
if(c.equals(row)){comp.setForeground(Color.red); }
else { comp.setForeground(Color.black);}
}

它工作了,对于几个单元格,或一段时间后,选定的列回到了原来的颜色,我检查过,整数仍然在数组中,所以这不是问题,知道是什么导致了这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2013-04-09 17:00:31

我推荐使用CTRL来进行多选,而不是ALT。首先,任何想要多选的用户都已经知道怎么做了,因为CTRL是多选的事实上的标准修改键。其次,您可以免费获得您想要的行为,而不必实现任何特殊功能(可能除了您首选的配色方案之外)。

代码语言:javascript
复制
package com.example.table.multiselect;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;

public class MultiRowTableSelect extends JFrame {

    public MultiRowTableSelect() {
        DefaultTableModel model = new DefaultTableModel(0, 3);
        model.addRow(new Integer[]{1, 2, 3});
        model.addRow(new Integer[]{4, 5, 6});
        model.addRow(new Integer[]{7, 8, 9});
        model.addRow(new Integer[]{10, 11, 12});

        JTable tbl = new JTable(model);
        tbl.setRowSelectionAllowed(true); // when you click a cell, the entire row will be highlighted

        /* Assuming you want all cells to be rendered using the custom renderer
         * unless otherwise overridden, you can simply set the JTable's default
         * renderer.  The implementation is so simple here that I'm just
         * creating an anonymous subclass of DefaultTableCellRenderer.
         */
        tbl.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
            @Override
            public Component getTableCellRendererComponent(JTable table, Object value,
                    boolean isSelected, boolean hasFocus, int row, int column) {

                Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

                if (isSelected) {
                    c.setForeground(Color.RED); // you can set the foreground and/or background here
                }

                return c;
            }
        });

        add(new JScrollPane(tbl), BorderLayout.CENTER);

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationByPlatform(true);
        pack();
        setSize(400, 200);
        setVisible(true);
    }


    /**
     * @param args
     */
    public static void main(String[] args) {
        new MultiRowTableSelect();
    }

}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15888434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档