【问题标题】:How to manipulate color values?如何操作颜色值?
【发布时间】:2012-08-07 00:12:44
【问题描述】:

我创建了一个表,其中一个参数是颜色,就像这样

我没有覆盖我创建的表模型中的 getValue 方法,这意味着当我获得颜色值时,它们以对象的形式出现。如果我将它们存储为对象或字符串,我将获得以下值:

java.awt.Color[r=255,g=0,b=0]

这是我的桌子模型,以防万一:

private static final Object[][] DATA = {
     { "1", "Task 1", new Integer(10), false, new Integer(0), Color.red },
     { "2", "Task 2", new Integer(10), false, new Integer(0), Color.blue },
     { "3", "Task 3", new Integer(10), false, new Integer(0),
           Color.green },
     { "4", "Task 4", new Integer(10), false, new Integer(0),
           Color.orange },
     { "5", "Task 5", new Integer(10), false, new Integer(0),
           Color.black } };

 private MyTableModel myTableModel = new MyTableModel(DATA);





class MyTableModel extends DefaultTableModel {
private static final String[] COLUMN_NAMES = { "Station #", "Name",
     "avg Time", "Buffer", "Buffer Parts", "Color" };

public MyTableModel(Object[][] data) {
  super(data, COLUMN_NAMES);
}

@Override
public Class getColumnClass(int c) {
    //System.out.println("Class for " + c + ": " + getValueAt(0, c).getClass().toString());
    return getValueAt(0, c).getClass();        
}


@Override
public boolean isCellEditable(int row, int col) {

  if (col == 0) {
     return false;
  } else if (col == 4) {
     boolean di = (Boolean) getValueAt(row, (col - 1));
     if (!di) {
        return false;
     } else {
        return true;
     }
  } else {
     return true;
  }
}

public void printDebugData() {
  int numRows = getRowCount();
  int numCols = getColumnCount();

  for (int i = 0; i < numRows; i++) {
     System.out.print("    row " + i + ":");
     for (int j = 0; j < numCols; j++) {
        Object datum = getValueAt(i, j);
        // System.out.print("  " + data[i][j]);
        System.out.print("  " + datum);
     }
     System.out.println();
  }
  System.out.println("--------------------------");
 }
}

表中的所有值都存储在传递给另一个类的哈希图中,我需要在其中创建一个颜色向量左右来存储表上设置的颜色。

Station 1=[1, Task 1, 10, false, 0, java.awt.Color[r=255,g=0,b=0]]
Station 2=[2, Task 2, 10, false, 0, java.awt.Color[r=0,g=0,b=255]]
Station 3=[3, Task 3, 10, false, 0, java.awt.Color[r=0,g=255,b=0]]
Station 4=[4, Task 4, 10, false, 0, java.awt.Color[r=255,g=200,b=0]]
Station 5=[5, Task 5, 10, false, 0, java.awt.Color[r=0,g=0,b=0]]

我环顾四周,但找不到任何信息,那么处理它的最佳方法是什么,以便我可以存储要与传递的值一起使用的颜色?

我希望我说清楚了,如果需要任何其他信息,请告诉我。

【问题讨论】:

    标签: java swing colors jtable jcolorchooser


    【解决方案1】:

    您从getValueAt() 获得的值是实际的java.awt.Color 对象;只是方法的返回类型是Object。你需要cast这个值:

    Color color = (Color) tableModel.getValueAt(0, 5);
    

    现在你有一个指向对象的Color 变量,你可以用它做任何你想做的事情。

    【讨论】:

    • 我不知道。但是,如何用这些值填充颜色向量?通过这样做,我得到一个“NoSuchElementException”:private static Color colorsstation[] = null;颜色 cor = (颜色) keyvaluesIterator.next();颜色站[i] = cor;
    • @Luis Afonso Teixeira 为什么你需要获取/放置颜色到 JTables 单元格的原因,只有这样才能得到更具体的答案:-)
    • 我从该表中获取值并将它们作为 Hashmap 传递给另一个类,我将在其中绘制一些东西。在那里,我正在尝试收集传递的颜色,以定义我将在该类上绘制的矩形的颜色!希望我现在说清楚了:s
    • @LuisAfonsoTeixeira -- "NoSuchElementException" 表示当没有下一个元素时,您在 Iterator 上调用 next;我不知道你的Iterator 来自哪里,所以我不能告诉你为什么没有值。使用 getValueAt()for 循环,将行号从 0 变为行数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多