2013-10-07 4 views
0

두 개의 JTables tblOrderInfo 및 tblDetailInfo가 있습니다. tblDetailInfo 행을 기준으로 tblOrderInfo 행을 색칠하고 싶습니다. 많은 연구를 수행했으며 Rob Camick's 문서 및 기타 많은 기사를 찾았지만 색칠 기반 정적 값 확인 및 JTable 동적 필터링 내 경우에는 작동하지 않습니다.JTable 행의 색 변경

Rob의 접근 방식을 사용하여 기능을 시도했지만 작동하지 않습니다.

private Component createColoring(DefaultTableModel model) 
    { 
    tblOrderInfo = new JTable(model) 
    { 
    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) 
    { 
    Component c = super.prepareRenderer(renderer, row, column); 

    // Color row based on a cell value 

    if (!isRowSelected(row)) 
    { 
     c.setBackground(getBackground()); 
     int modelRow = convertRowIndexToModel(row); 
     String type = (String)getModel().getValueAt(modelRow, 0); 


    Object orderId=""; 
    Object design=""; 
    Object sno="";      

    for(int r=0;r< tblDetailInfo.getRowCount();r++){ 
    orderId= tblDetailInfo.getValueAt(r, util.getColumnIndex(tblDetailInfo, "orderId")); 
    design= tblDetailInfo.getValueAt(r, util.getColumnIndex(tblDetailInfo, "design")); 
    sno= tblDetailInfo.getValueAt(r, util.getColumnIndex(tblDetailInfo, "sno")); 

    for(int o=0;o< tblOrderInfo.getRowCount();o++){ 
    if((tblOrderInfo.getValueAt(o, util.getColumnIndex(tblOrderInfo, "orderId")).equals(orderId)) 
    && (tblOrderInfo.getValueAt(o, util.getColumnIndex(tblOrderInfo, "design")).equals(design)) 
    && (tblOrderInfo.getValueAt(o, util.getColumnIndex(tblOrderInfo, "sno")).equals(sno)) 

    ){ 
    c.setForeground(Color.RED); 




    } 
    } 


    } 
    } 

    return c; 
    } 
    }; 

    tblOrderInfo.setPreferredScrollableViewportSize(tblOrderInfo.getPreferredSize()); 
    tblOrderInfo.changeSelection(0, 0, false, false); 
    tblOrderInfo.setAutoCreateRowSorter(true); 
    return tblOrderInfo; 
    } 

호출 코드는 prepareRenderer() 메소드가 기본적인 코드 구조가 잘못 때문에 모든 셀이라고

DefaultTableModel dtm =(DefaultTableModel) tblOrderInfo.getModel(); 
    jScrollPane2.remove(tblOrderInfo); 
    jScrollPane2.add(createColoring(dtm)); 

답변

0

다음 클래스 나를 위해

를 작동
class MyTableCellRenderer extends DefaultTableCellRenderer implements TableCellRenderer { 
AssignOrderToWax ass =null; 

public MyTableCellRenderer(AssignOrderToWax ass){ 
    this.ass=ass; 
} 
    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
     setForeground(Color.BLACK); 
     super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 


     Object orderId=""; 
     Object design=""; 
     Object sno=""; 
     for(int r=0;r<ass.tblDetailInfo.getRowCount();r++){ 
     orderId=ass.tblDetailInfo.getValueAt(r, ass.util.getColumnIndex(ass.tblDetailInfo, "orderId")); 
     design=ass.tblDetailInfo.getValueAt(r, ass.util.getColumnIndex(ass.tblDetailInfo, "design")); 
     sno=ass.tblDetailInfo.getValueAt(r, ass.util.getColumnIndex(ass.tblDetailInfo, "sno")); 

if((ass.tblOrderInfo.getValueAt(row, ass.util.getColumnIndex(ass.tblOrderInfo, "orderId")).equals(orderId)) 
    && (ass.tblOrderInfo.getValueAt(row, ass.util.getColumnIndex(ass.tblOrderInfo, "design")).equals(design)) 
    && (ass.tblOrderInfo.getValueAt(row, ass.util.getColumnIndex(ass.tblOrderInfo, "sno")).equals(sno)) 

     ){ 
      setForeground(Color.RED); 
      break ; 

      } 

    }return this; 
    } 

} 

다음은 호출 코드입니다.

 Enumeration<TableColumn> en = tblOrderInfo.getColumnModel().getColumns(); 
    while (en.hasMoreElements()) { 
     tc = en.nextElement(); 
     tc.setCellRenderer(new MyTableCellRenderer(this)); 
    } 
1

이하입니다. 루프는 한 테이블의 모든 행을 던진 다음 두 번째 테이블의 모든 행을 던집니다. 따라서 어디에서나 일치하는 항목이 발견되면 행은 색이 칠해지며 테이블의 모든 행에 대해 동일하게됩니다. 내가 tblDetailInfo 행에 기초하여 tblOrderInfo 행 색상을 원하는

나는 기본적인 의사 코드가 있어야한다고 생각 :

foreach row in the detail table 

    if ((detail.orderId.equals(order.orderid) 
    and (detail.design.equals(order.design) 
    and (detail.sno.equals(order.sno)) 
    { 
     c.setForeground(Color.RED); 
     break;  
    } 
+1

감사합니다. @Camickr 제 실수를 인정합니다. 내 골동품이 잘못 탈락했다. 내 실수를 지적 주셔서 감사합니다. –

+0

친애하는 @Camickr은 브레이크 로직으로 다시 테스트되지만 작동하지 않으며 주문 테이블의 모든 행에 색상이 지정됩니다. –

+0

방금 ​​휴식 시간을 추가하는 것보다 더 많은 변경을해야한다고 제안했습니다. 나는 2 개의 루프가 필요 없다고 제안했다. 코드를 작성할 수 없습니다. – camickr