2012-03-16 40 views
3

我有一個jtable。 (tablesummary)。其中一列是EXPIRY。我想突出顯示與當前日期已失效的客戶端的行。如何使用java滿足某些條件時將顏色設置爲某一行?

我已經得到的邏輯,但我不能讓行變成紅色或任何其他顏色。 這是我的代碼:

  int count = (tableSummary.getRowCount()); 
     NumberFormat formatter = new DecimalFormat("###,###");   
     String no = formatter.format(count); 
     txtNo.setText(no); 

      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
      Calendar cal = Calendar.getInstance();   
      String expDateString = sdf.format(cal.getTime()).toString(); 

      for(int i=0; i<=tableSummary.getRowCount()-1; i++){ 
       String nnn= tableSummary.getModel().getValueAt(i, 6).toString(); 
       System.out.println(nnn); 
       int res = nnn.compareTo(expDateString); 
        if(res>=0){ 
         System.out.println("if ni " + (res>=0)); 
        } 
        else{ 
         System.out.println("else ni" + (res>=0)); 
         rowrenderer.setBackground(Color.RED); 


        }       
      } 

任何人都可以幫助我嗎?因爲它是我界面的主要亮點之一。 在此先感謝! :)

+0

顯示的 「rowrenderer」 的定義。 – Juvanis 2012-03-16 09:53:39

+0

你忘了添加你的cellrenderer的代碼 – Peter 2012-03-16 09:53:46

+0

可能的重複[如何給出一個條件來突出顯示行表](http://stackoverflow.com/questions/9714110/how-to-highlight-row-table-if -given -a-condition) – kleopatra 2012-03-16 10:28:52

回答

3

在下面的鏈接,你可以找到你想要做的動作的一個例子:http://www.roseindia.net/java/example/java/swing/SadingRows.shtml

您必須覆蓋上JTableprepareRenderer()和添加的backgroundColor上得到返回的Component。 PS:爲了將來的參考,如果包含更多的代碼,會更容易。您rowrenderer的定義=)

編輯

而非正常JTable table = new JTable(model)聲明,請使用以下(改變邏輯在prepareRenderer方法,如果你想比的交替顏色別的東西):

JTable table = new JTable(model) { 
    public Component prepareRenderer(TableCellRenderer renderer, int Index_row, int Index_col) { 
     // get the current row 
     Component comp = super.prepareRenderer(renderer, Index_row, Index_col); 
     // even index, not selected 
     if (Index_row % 2 == 0 && !isCellSelected(Index_row, Index_col)) { 
      comp.setBackground(Color.lightGray); 
     } else { 
      comp.setBackground(Color.white); 
     } 
     return comp; 
    } 
}; 
+0

我還沒有任何關於rowrenderer的定義。我只是顯示它的原因,我有一個想法,我應該使用它,但真的不知道如何編寫代碼 – zairahCS 2012-03-16 13:11:59

+0

增加了代碼在回答 – Molske 2012-03-16 13:34:25

8

...在以前的線程和答案中描述,唯一的例子

enter image description here

從代碼

import java.awt.*; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.*; 
import javax.swing.border.LineBorder; 
import javax.swing.table.*; 

public class TablePrepareRenderer extends JFrame { 

    private static final long serialVersionUID = 1L; 
    private JTable table; 
    private Date maturityDate = new Date(); 
    private Date todayDate = new Date(); 
    private SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy"); 
    private Date tableDate = new Date(); 
    private String strDate = ""; 
    private Date modifDate = new Date(); 
    private Calendar cal; 

    public TablePrepareRenderer() { 
     Object[] columnNames = {"Type", "Company", "Shares", "Price", "Date"}; 
     Object[][] data = { 
      {"Buy", "IBM", new Integer(1000), new Double(80.50), new Date()}, 
      {"Sell", "MicroSoft", new Integer(2000), new Double(6.25), new Date()}, 
      {"Sell", "Apple", new Integer(3000), new Double(7.35), new Date()}, 
      {"Buy", "Nortel", new Integer(4000), new Double(20.00), new Date()} 
     }; 
     DefaultTableModel model = new DefaultTableModel(data, columnNames) { 

      private static final long serialVersionUID = 1L; 

      @Override 
      public Class getColumnClass(int column) { 
       return getValueAt(0, column).getClass(); 
      } 
     }; 
     table = new JTable(model) { 

      private static final long serialVersionUID = 1L; 

      @Override 
      public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { 
       Component c = super.prepareRenderer(renderer, row, column); 
       /*int firstRow = 0; 
       int lastRow = table.getRowCount() - 1; 
       if (row == lastRow) { 
       ((JComponent) c).setBackground(Color.red); 
       } else if (row == firstRow) { 
       ((JComponent) c).setBackground(Color.blue); 
       } else { 
       ((JComponent) c).setBackground(table.getBackground()); 
       }*/ 
       if (!isRowSelected(row)) { 
        if (table.getColumnCount() >= 0) { 
         String type = (String) getModel().getValueAt(row, 0); 
         c.setBackground("Buy".equals(type) ? Color.YELLOW : Color.GREEN); 
// 
         maturityDate = new Date(); 
         todayDate = new Date(); 
         strDate = sdf.format(todayDate); 
         try { 
          todayDate = sdf.parse(strDate); 
         } catch (ParseException ex) { 
          Logger.getLogger(TablePrepareRenderer.class.getName()).log(Level.SEVERE, null, ex); 
         } 
         tableDate = (Date) table.getValueAt(row, 4); 
         strDate = sdf.format(tableDate); 
         if (strDate != null) { 
          if (!strDate.isEmpty()) { 
           try { 
            maturityDate = sdf.parse(strDate); 
           } catch (ParseException ex) { 
            Logger.getLogger(TablePrepareRenderer.class.getName()).log(Level.SEVERE, null, ex); 
           } 
           if (maturityDate != null) { 
            int mmDiffDealToValue = (maturityDate).compareTo(todayDate); 
            if (((mmDiffDealToValue < 0))) { 
             c.setBackground(Color.orange); 
             c.setFont(new Font("Serif", Font.BOLD, 12)); 
            } 
           } 
          } 
         } 
// 
        } 
       } 
       if (isRowSelected(row) && isColumnSelected(column)) { 
        ((JComponent) c).setBorder(new LineBorder(Color.red)); 
       } 
       return c; 
      } 
     }; 
     modifyDateInTable(); 
     table.setPreferredScrollableViewportSize(table.getPreferredSize()); 
     JScrollPane scrollPane = new JScrollPane(table); 
     getContentPane().add(scrollPane); 
    } 

    private void modifyDateInTable() { 
     Calendar c = Calendar.getInstance(); 
     c.setTime(modifDate); 
     c.add(Calendar.DATE, - 1); 
     modifDate = c.getTime(); 
     table.setValueAt(modifDate, 0, 4); 
     c.setTime(modifDate); 
     c.add(Calendar.DATE, +5); 
     modifDate = c.getTime(); 
     table.setValueAt(modifDate, 1, 4); 
     c.setTime(modifDate); 
     c.add(Calendar.DATE, +1); 
     modifDate = c.getTime(); 
     table.setValueAt(modifDate, 1, 4); 
     c.setTime(modifDate); 
     c.add(Calendar.DATE, - 16); 
     modifDate = c.getTime(); 
     table.setValueAt(modifDate, 3, 4); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       TablePrepareRenderer frame = new TablePrepareRenderer(); 
       frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
       frame.pack(); 
       frame.setLocation(150, 150); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 
+1

+1,''Renderer'總是如此儘管毫無疑問,我可以對他們做出驚人的事情。學到了新的東西,用這個:-) – 2013-07-20 13:20:00

0

enter image description here

公共類TablePrepareRenderer延伸的JFrame {

private JTable table; 

public TablePrepareRenderer() { 
    Object[] columnNames = { "Type", "Company", "Name", "Salery", "Designation" }; 
    Object[][] data = 
    { { "Probation", "Digital Research Lab", "Kamran Ali", "500,000", "Java Developer" }, { "Permenent", "Netsole", 
                          "Farhan Khan", 
                          "80,000", 
                          "System Administaror" }, 
     { "Contract", "System Limited", "Danyal", "100,000", "Network Administrator" }, 
     { "Probation", "TeraData", "Ali Raza", "45,000", "IT Officer" }, 
     { "Contract", "MicroSoft", "Sikandar Hayat", "450,000", "Team Lead" }, 
     { "Permenent", "MicroSoft", "Adnan", "30,000", "Driver" }, }; 
    DefaultTableModel model = new DefaultTableModel(data, columnNames) { 


     @Override 
     public Class getColumnClass(int column) { 
      return getValueAt(0, column).getClass(); 
     } 
    }; 
    table = new JTable(model) { 
      @Override 
      public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { 
       Component c = super.prepareRenderer(renderer, row, column); 

       if (!isRowSelected(row)) { 
        if (table.getColumnCount() >= 0) { 
         String type = (String)getModel().getValueAt(row, 0); 
         if (type.equalsIgnoreCase("Probation")) { 
          c.setBackground(new Color(198, 190, 255)); 

         } 
         if (type.equalsIgnoreCase("Permenent")) { 
          c.setBackground(new Color(14, 255, 190)); 

         } 
         if (type.equalsIgnoreCase("Contract")) { 
          c.setBackground(Color.green); 

         } 

        } 
       } 
       if (isRowSelected(row) && isColumnSelected(column)) { 
        ((JComponent)c).setBorder(new LineBorder(Color.red)); 
       } 
       return c; 
      } 
     }; 

    table.setPreferredScrollableViewportSize(table.getPreferredSize()); 
    JScrollPane scrollPane = new JScrollPane(table); 
    getContentPane().add(scrollPane); 
} 


public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 

     @Override 
     public void run() { 
      TablePrepareRenderer frame = new TablePrepareRenderer(); 
      frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
      frame.pack(); 
      frame.setLocation(150, 150); 
      frame.setSize(800, 500); 
      frame.setVisible(true); 


     } 
    }); 
} 

}

相關問題