2011-08-12 102 views
3

我有一個JTable,需要更改其某些屬性,例如突出顯示的顏色。更改JTable的外觀和感覺

This website表示表格中有字段,如「高亮」和「亮」。

enter image description here

我到處都找不到他們。當你創建一個JTable的實例時,在intellisense中沒有涉及「Highlight」或「light」的東西。 (但是一些方法,如table.setFont()會顯示出來)。

但我注意到table.setUI();但我不知道如何使用它,或者如果它與此有關。

我正在尋找的是當你將鼠標懸停在它上面時,它會改變它的顏色,我不確定Highlight會這樣做,或者如果我將不得不通過實現mouseListener 。儘管如此,我仍然希望能夠更改其他L & F設置。

+0

參見[定製JTable(http://stackoverflow.com/questions/6209849/customizing-jtable),您的問題可能重複。 – trashgod

+0

@trashgod我不想更改標題UI,但實際的領域UI,並希望一些例子或幫助如何做到這一點。 – David

+0

創建您自己的渲染器。 – StanislavL

回答

1

我不知道下面的代碼將工作,因爲我抓住和一些修飾它我的舊項目的代碼塊之一,但你可以嘗試。

public class MyTable extends JTable implements MouseMotionListener { 
    int mouseHoverRow = -1; 

    public MyTable() { 
      addMouseMotionListener(this); 
    } 

    //codes 

    public Component prepareRenderer(TableCellRenderer renderer, int rowIndex, 
      int vColIndex) { 
     Component c = super.prepareRenderer(renderer, rowIndex, vColIndex); 
     Color back = getSelectionBackground(); 
     int red = back.getRed(); 
     int green = back.getGreen(); 
     int blue = back.getBlue(); 
     if (rowIndex == mouseHoverRow) { 
      c.setBackground(Color.LIGHT_GRAY); 
     } else { 
      c.setBackground(getBackground()); 
     } 
     return c; 
    } 

    public void mouseMoved(MouseEvent e) { 
     Point p = new Point(e.getX(), e.getY()); 
     mouseHoverRow = rowAtPoint(p); 
    } 
+0

在'mouseMoved()'末尾增加'table.repaint();'並對這段代碼做了一些更改,並且它運行得非常漂亮。謝謝。 – David

+0

不客氣 – 2011-08-12 15:47:35

1

在渲染您的JTable之前,您可以使用方法#put(String, String)設置一個或多個在UIManager(或UIDefaults)中引用的屬性來實現目標。

這個鏈接也可以幫助你一下:http://www.java2s.com/Code/Java/Swing-JFC/ListUIPropertiesinaJTableandsortable.htm

希望這將有助於!

+0

感謝您的回答!我試過UIManager.put(「突出顯示」,Color.red);但它似乎並沒有工作。接下來我會嘗試其他一些顏色值。 – David

1

有四種方式

1)重寫UI

2)使用提煉

3),用於更好地和良好的輸出到GUI我recome nding改變Look and Feel或使用Nimbus Look and FeelSynth Look and Feel

4)把所有我的選擇在一起,並與風俗畫爲JViewPortScrollBar

+0

@David confortable將查找'prepareRenderer'(適用於整個TableView)與'TableCellRenderer'(對特定的TableColumn有效)一樣,請仔細考慮JTable,TableCellRenderer和TableCellEditor的Opacities(getTableCellRendererComponent(...)你發佈),我不確定不透明度是否符合我的預期,這是請遵循這個論壇的例子,有很多更好的代碼和優秀的描述 – mKorbel

+0

+1特別是3)和良好的聯繫。很難選擇一個答案,但我正在尋找一個SSCCE。儘管如此,我從中學到了很多東西。 – David

+0

@David for nice thread +1 – mKorbel