2015-11-29 55 views
-1

所以我試圖改變一行中的顏色到jtable中的紅色取決於單元格的結果 把這段代碼放在下面,應該工作但注意改變試圖改變Jtable中的一行的顏色java

她是代碼,如果任何人能做到就可以了一些修改,這將是偉大的,謝謝

public class Test1 extends JFrame { 

private JPanel contentPane; 
private JTable table; 
private static JTable getNewRenderedTable(final JTable table) { 
    table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer(){ 
     @Override 
     public Component getTableCellRendererComponent(JTable table, 
       Object value, boolean isSelected, boolean hasFocus, int row, int col) { 
      super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col); 
      int status = (int)table.getModel().getValueAt(row, 4); 
      if (status<=0) { 
       setBackground(Color.RED); 
       setForeground(Color.BLACK); 
      } else { 
       setBackground(table.getBackground()); 
       setForeground(table.getForeground()); 
      }  
      return this; 
     } 
    }); 
    return table; 
} 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       Test1 frame = new Test1(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the frame. 
*/ 
public Test1() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 450, 300); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(null); 

    try 
    { Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root",""); 
     String query="select * from employes"; 
     PreparedStatement pst=con.prepareStatement(query); 
     ResultSet rs=pst.executeQuery(); 
     ResultSetMetaData rsm=rs.getMetaData(); 
     int c=rsm.getColumnCount(); 
     Vector column=new Vector(3); 
     column.add(rsm.getColumnName(1)); 
     column.add(rsm.getColumnName(2)); 
     column.add(rsm.getColumnName(3)); 
     column.add("date"); 
     Vector row=new Vector(); 
     Vector data=new Vector(); 
     while(rs.next()) 
     { 

      row=new Vector(); 
      row.add(rs.getString("id")); 
      row.add(rs.getString("nom")); 
      row.add(rs.getString("prenom")); 
      Timer time=new Timer(rs.getString("date_de_embauche").toString()); 
      int j=(int) time.getResulte(); 
      row.add(j); 
      data.add(row); 

     } 


     table = new JTable(data,column); 




    } 
    catch(Exception e) 
    { 
     System.out.println(e); 
    } 
    table.setBounds(33, 28, 335, 203); 
    contentPane.add(table); 
}} 
+1

考慮讓渲染器不透明。另外,永遠不要這樣做:'contentPane.setLayout(null); ' –

+0

重複檢查兩種方法之一[這裏](http://stackoverflow.com/q/24848314/230513)。 – trashgod

+0

你似乎從來沒有cal'getNewRenderedTable' – MadProgrammer

回答

0
try this code: 

    String status = (String)table.getModel().getValueAt(row, STATUS_COL); 
     if ("active".equals(status)) { 
      setBackground(Color.BLACK); 
      setForeground(Color.WHITE); 
     } else { 
      setBackground(table.getBackground()); 
      setForeground(table.getForeground()); 
     } 
+0

仍然無法正常工作,我使用的代碼,所以任何人都有更好的解決方案pleas – ayoub

3
table = new JTable(data,column); 

問題與您現有的代碼是創建新的JTab樂。每當你創建一個新表時,你都會失去自定義渲染器。所以你需要在創建表之後將渲染器添加到表中。我看不到你在哪裏調用你的getNewRenderedTable(...)方法來添加渲染器。

另一個問題是您應該使用JScrollPane來顯示錶格,然後將該滾動窗格添加到框架。

最後不要使用空佈局。 Swing旨在與佈局經理一起使用。

我試圖行的顏色變爲紅色在一個JTable在取決於細胞

一個JTable的結果可以使用不同的渲染器對於每種類型的列中的數據的。您可以通過替代JTableprepareRenderer(...)方法來執行行級別渲染,而不是爲每種數據類型創建自定義渲染器。

代碼的基本結構是:

JTable table = new JTable(...) 
{ 
    public Component prepareRenderer(
     TableCellRenderer renderer, int row, int column) 
    { 
     Component c = super.prepareRenderer(renderer, row, column); 

     // add custom rendering here 

     return c; 
    } 
}; 

的,顯示瞭如何基於行的數據,以色彩行的例子退房Table Row Rendering

+0

仍然很新的java我一週前開始如此請求你可以編輯我的代碼 – ayoub

+0

@ayoub,你通過嘗試學習。我還給了你一個可以下載和測試的代碼的鏈接。我還建議你先學習如何在沒有數據庫的情況下做到這一點。這是用硬編碼數據創建一個JTable。一次學習一個概念。 – camickr

+0

謝謝你,我想像你說的那樣試着學習 – ayoub