2013-04-27 121 views
0

我正在使用自定義CellRenderer(TableCellRenderer的一個實例)來呈現下面描述的CLOSE列的單元格。我爲表的setSelectionBackGround設置了顏色,但所選列的bg顏色的單元格不會被繪製。請向我提供任何我非常感謝的見解。setSelectionBackGround()不爲自定義渲染單元格設置顏色

enter image description here

這裏是我的TableCellRenderer類

class LabelRenderer extends JLabel implements TableCellRenderer { 

Font f; 
Color selectionBG;  
Color upDirection; 

LabelRenderer(){ 
    super(); 
    f=new java.awt.Font("Trebuchet MS", 0, 12); 
    selectionBG = new java.awt.Color(204, 255, 255); 
    upDirection= new Color(0,102,0); 
} 


@Override 
public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
    //structure of passing array (value) 
    // new Object[]{boolean direction, String close (change%)} 

    Object arr[] = (Object[])value; 

    Boolean direction = (Boolean)arr[0]; 

    if(direction) 
     this.setForeground(upDirection);//GREEN 
    else 
     this.setForeground(Color.red); 

    this.setText(arr[1].toString()); 
    this.setFont(f); 


    return this; 
} 

}

+0

什你確實想做什麼? – 2013-04-27 17:13:35

+0

當用戶選擇一個特定的行時,我想繪製指定顏色的所有列。 – Desper 2013-04-28 02:25:17

+0

oi Vishal K,謝謝你。 :P – Desper 2014-02-08 16:51:07

回答

2

你渲染延伸JLabel這是不是默認的不透明。您可以在渲染器中執行setOpaque(true)。或者,您也可以擴展DefaultTableCellRenderer,默認情況下它是不透明的。例如:

enter image description here

import java.awt.Color; 
import java.awt.Component; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.SwingUtilities; 
import javax.swing.table.DefaultTableCellRenderer; 
import javax.swing.table.DefaultTableModel; 

public class TableBgDemo { 
    private static void createAndShowGUI() { 
     JFrame frame = new JFrame("TableDemo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     Object[][] rows = { { "Column 1", "Column 2" }, 
       { "Column 1", "Column 2" }, { "Column 1", "Column 2" }, 
       { "Column 1", "Column 2" } }; 

     Object[] columns = { "Column 1", "Column 2" }; 

     DefaultTableModel model = new DefaultTableModel(rows, columns); 

     JTable table = new JTable(model); 
     table.getColumnModel().getColumn(0).setCellRenderer(new MyRenderer()); 
     table.setSelectionBackground(Color.CYAN); 
     frame.add(new JScrollPane(table)); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    static public class MyRenderer extends DefaultTableCellRenderer { 
     @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.setForeground(Color.RED); 
      return c; 
     } 
    } 

    public static void main(String args[]) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 
+0

感謝兄弟,我會嘗試。 – Desper 2013-04-28 02:36:19

+0

@歡迎您光臨! :)用於'prepareRenderer'的 – tenorsax 2013-04-28 21:32:22

2

我使用自定義CellRenderer(的TableCellRenderer的一個實例),以 呈現如下描述CLOSE列的單元格。我爲表格的setSelectionBackGround設置了一個顏色 ,但所選 列的bg顏色的單元格在選定時不會被繪製。請給我提供 任何見解,我將非常感激。

問題是由兩個錯誤

造成
  1. 您的渲染,不使用此代碼,這裏有一些外觀極好代碼,(我會使用prepareRenderer爲RowRenderer)

  2. 從未設置,修改,添加來自型號,這意味着代碼行this.setText(arr[1].toString());值,渲染大約是熒光筆,裝飾

+0

+1。例如[here](http://stackoverflow.com/a/9737299/1048330)或[Table Row Rendering](http://tips4java.wordpress.com/2010/01/24/table-row-rendering/)由@camickr。 – tenorsax 2013-04-27 18:59:12

+0

非常感謝兄弟,這會做到這一點。 – Desper 2013-04-28 05:32:19

相關問題