首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java -设置特定单元格的背景颜色

Java -设置特定单元格的背景颜色
EN

Stack Overflow用户
提问于 2012-03-24 21:42:28
回答 2查看 1.1K关注 0票数 0

我有下面显示的代码:

代码语言:javascript
复制
if ("1".equals(tmp.get(h))) {
   tmp2[0][h] = 1;
   for (int j = 0; j < truthTable.getModel().getColumnCount(); j++) {
      renderer = (DefaultTableCellRenderer) truthTable.getCellRenderer(0,
            j);
      renderer.setBackground(Color.yellow);
   }
}

getCellRenderer方法包含参数行和列,并且应该以黄色背景设置行0,但它将整个表设置为黄色背景。我很困惑,那么对此最好的解决方案是什么?

EN

回答 2

Stack Overflow用户

发布于 2012-03-24 21:46:54

JTable单元格渲染器不是组件,而是更类似于橡皮图章的东西,它使用一个组件在JTable中多次绘制自身。如果您将渲染器的背景设置为黄色,并且如果它不是感兴趣的单元格,则在绘制所有单元格时,它将保持黄色。

票数 2
EN

Stack Overflow用户

发布于 2012-03-24 23:00:48

将鼠标指向桌子。

代码语言:javascript
复制
package test;

import java.awt.Color;
import java.awt.Component;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

public class SingleCellColor {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                String[][] data = {
                        {"a", "1","2","3"},
                        {"b", "3","4","5"},
                        {"c", "6","7","8"}
                };
                String[] columns = {
                    "Letter", "Num 1", "Num2 ", "Num 3" 
                };
                DefaultTableModel tableModel = new DefaultTableModel(data, columns);

                final SingleCellRenderer renderer = new SingleCellRenderer(); 
                final JTable table = new JTable(tableModel);
                table.setDefaultRenderer(new Object().getClass(), renderer);
                table.addMouseMotionListener(new MouseAdapter() {
                    @Override
                    public void mouseMoved(MouseEvent me) {
                        Point p = me.getPoint();
                        renderer.setColumnHightlight(table.columnAtPoint(p));
                        renderer.setRowHighlight(table.rowAtPoint(p));
                        table.repaint();
                    }
                });
                JScrollPane tableScroll = new JScrollPane(table);

                JOptionPane.showMessageDialog(null, tableScroll);
            }
        });
    }
}

class SingleCellRenderer extends DefaultTableCellRenderer {

    private static final long serialVersionUID = 1L;

    int rowHighlight = -1;
    int colHighlight = -1;

    @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);
        c.setBackground(Color.ORANGE);
        if (c instanceof JComponent) {
            boolean isFocused = (colHighlight == column && rowHighlight == row);
            ((JComponent)c).setOpaque(isFocused);
        }
        return c;
    }

    public void setColumnHightlight(int colHighlight) {
        this.colHighlight = colHighlight;
    }

    public void setRowHighlight(int rowHighlight) {
        this.rowHighlight = rowHighlight;
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9852220

复制
相关文章

相似问题

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