2013-01-09 85 views
2

我有這些數據:查找JTable的細胞和油漆它

  1. 行號
  2. 列數
  3. 單元格值

我的問題是:

  1. 如何我可以通過使用這些數據找到單元格嗎?
  2. 如何在鼠標按下事件時更改JTable單元格的背景,並在鼠標釋放時返回正常背景事件?
  3. 我可以在沒有用戶交互的情況下突出顯示JTable,也就是說可以通過使用給定的信息來點擊某個其他JTable單元,以突出顯示另一個JTable單元。

回答

6

假設你的意思是找到小區的命中檢測矩形:

Rectangle cell = table.getCellRect(row, column, false); 

有關背景發生變化,在你的MouseListener代碼,設置哪些細胞被擊中的標誌,重新繪製按下/釋放實現一個自定義渲染器來檢查標記。一些僞代碼

void mousePressed(MouseEvent ev) { 
    // get the row/column from mouse location 
    int column = table.columnAtPoint(ev.getPoint()); 
    int row = table.rowAtPoint(ev.getPoint()); 
    // set some kind of marker, f.i. as client property 
    table.putClientProperty("hitColumn", column); 
    table.putClientProperty("hitRow", row); 
    // get the rectangle for repainting 
    Rectangle cell = table.getCellRect(column, row, false); 
    table.repaint(cell); 
} 

void mouseReleased(MouseEvent ev) { 
    // similar to reset the marker 
    .... 
    table.repaint(cell); 
} 

// custom renderer extends DefaultTableCellRenderer 

JComponent getTableCellRendererComponent(..., row, column ...) { 
    Integer hitColumn = table.getClientProperty("hitColumn"); 
    Integer hitRow = .... 
    if (hitColumn != null && column == hitColumn && hitRow ....) { 
     setBackground(hitColor); 
    } else { 
     // force super to handle the background 
     setBackground(null); 
    } 
    return super.getTableCellRendererComponent(....); 
} 
+0

我可以在沒有該特定表的用戶交互意味着點擊其他事情的情況下做同樣的事嗎? –

+1

肯定 - clientProperties是...只是屬性:聽聽那些在第一個變化,並做任何你想要的值:-) – kleopatra

+0

謝謝kleopatra! –