簡體   English   中英

使用JColorChooser在JTable的行上設置顏色

[英]Setting the Color on the row of the JTable using JColorChooser

我是Swing的新手。 我幾周前才剛開始使用Swing,但在某個時候我還是停留了。

我設計了一個JTable ,單擊時有一些行(右),它會打開一個彈出菜單,其中包含“ CHANGE ROW COLOR”選項( JMenuItem ),單擊此JColorChooser打開,用戶可以選擇顏色,並且相同的顏色將設置為選定的行。

有可能做到嗎? 怎么樣?

在此處輸入圖片說明

在此處輸入圖片說明

如果您希望能夠為每行分別着色,那么一種方法是將Color作為數據的一部分存儲在TableModel中。 因此,您將需要在模型中將顏色添加為列。

但是您不想在表視圖中顯示此列,因此需要從視圖中將其刪除:

table.removeColumn( table.getColumn(...) );

接下來,您將需要為表格添加自定義呈現。 一種方法是為整個行添加渲染。 查看表行渲染以獲取此方法的示例。

因此,渲染的基本代碼如下所示:

Color background = table.getTableModel.getValueAt(row, ???);

if (background != null)
    c.setBackground( background );

當顯示顏色時,您需要將顏色保存到TableModel中:

table.getTableModel().setValueAt(color, table.getSelectedRow(), ???);

另一種方法是將行和顏色保存在map<Integer, Color>

(use table.getSelectedRow() )

要從JColorchooser捕獲顏色,請使用: Color selectedColor = myColorChooser.getSelectionModel().getSelectedColor();

然后,修改默認渲染器:

table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
            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);

                if (listOfColor.containKey(row)) {

                    c.setBackground(listOfColor.get(row));

                }

                DefaultTableCellRenderer centerRenderer = (DefaultTableCellRenderer) c;
                centerRenderer.setHorizontalAlignment(SwingConstants.CENTER);
                return c;
            }
        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM