2014-07-09 8 views
0

JTable에 일부 데이터를 표시하려고합니다. 나는 특정 열의 배경색을 변경하는 것과는 별개로 모든 것이 명확한 Jtable을 만들었습니다. 사용자는 마지막 열에서 체크 박스를 선택합니다. 그것은 동적으로 작동해야합니다. 몇 가지 팁, 코드 등을 알려 주실 수 있습니까?하나의 열에서 체크 박스를 체크 한 후 동적으로 JTable의 행 배경색을 변경하는 방법은 무엇입니까?

+0

읽기 TbelCellRenderer 약 및 – StanislavL

+0

이 당신을 도움이 될 수있는 설명 논리로 자신을 구현 .. http://stackoverflow.com/questions/15385114/jtable-color-row-and-cell-dynamically – AJJ

답변

1

이와 비슷한?

import java.awt.BorderLayout; 
import java.util.Vector; 
import javax.swing.*; 
import java.awt.*; 
import javax.swing.event.TableModelListener; 
import javax.swing.table.*; 

public class JTableTest extends JFrame implements TableModel{ 

    Vector<Object[]> lines = new Vector<Object[]>(); 
    private String[] headers = {"String","Boolean"}; 

    public JTableTest(){ 
     for (int t = 0; t < 100; t++) lines.addElement(new Object[]{"Row "+t,Boolean.FALSE}); 
     JPanel p = (JPanel)getContentPane(); 
     p.setLayout(new BorderLayout()); 
     JTable table = new JTable(); 
     table.setDefaultRenderer(String.class, new MyRenderer()); 
     p.add(new JScrollPane(table)); 
     table.setModel(this); 
     p.setPreferredSize(new Dimension(400,200)); 
     pack(); 
     setVisible(true); 
    } 
    public static void main(String[] args){ 
     new JTableTest(); 
    } 
    @Override 
    public int getRowCount() { 
     return lines.size()+1; 
    } 
    @Override 
    public int getColumnCount() { 
     return headers.length; 
    } 
    @Override 
    public String getColumnName(int columnIndex) { 
     return headers[columnIndex]; 
    } 
    @Override 
    public Class<?> getColumnClass(int col) { 
     if (col == 1) return Boolean.class; 
     return String.class; 
    } 
    @Override 
    public boolean isCellEditable(int row, int col) { 
     return col==1; 
    } 
    @Override 
    public Object getValueAt(int row, int col) { 
     return lines.elementAt(row)[col]; 
    } 
    @Override 
    public void setValueAt(Object aValue, int row, int col) { 
     lines.elementAt(row)[col] = aValue; 
    } 
    @Override 
    public void addTableModelListener(TableModelListener l) { 
    } 
    @Override 
    public void removeTableModelListener(TableModelListener l) { 
    } 
    private 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); 
      if (lines.elementAt(row)[1] == Boolean.TRUE) c.setBackground(Color.orange); 
      else c.setBackground(table.getBackground()); 
      table.repaint(); 
      return c; 
     } 
    } 
}