2014-11-17 3 views
0

JTable 행의 색상을 변경하고 싶습니다.JTable 행에 색상 추가

내가 JTable에서 행을 설정할 때 첫 번째 행은 빨간색으로 변합니다. 그리고 나서 새 행을 추가하려면 첫 번째 행이 노란색이되고 두 번째 행은 빨간색이됩니다.

red JTable row yellow red JTable row

내가 다시 그리기를 사용하지 않는() 렸기 때문에 모든 시간 일하러 내가 다시 칠하거나 tablemodel.setfile 사용이거든요 한 ... 테이블이 지속적으로

답변

2

이 업데이트 원하는 칠 custom cell renderer으로 할 수 있습니다.

셀 렌더러는 실제로 셀이 표시하는 구성 요소를 생성합니다. (셀 렌더러 Component는 실제로 이 아니고 JTable에이 추가되었습니다 .JTable은 페인팅을하기 위해 JTable을 사용하기 만합니다.) DefaultTableCellRenderer은 JLabels을 만들어서 배경색과 전경색을 자유롭게 설정할 수 있습니다. 페인팅을 할 필요가 없습니다.

one two

당신은 거의 당신이 원하는 그러나 세포를 표시 할 수 있습니다. 내가 어떻게 추측했는지 두 줄을 바라 보았는지 확실하지 않았습니다.

import javax.swing.*; 
import javax.swing.table.*; 
import java.awt.*; 
import java.awt.event.*; 

public class CustomCellRenderer implements Runnable, ActionListener { 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new CustomCellRenderer()); 
    } 

    JTable table; 

    @Override 
    public void run() { 
     JFrame frame = new JFrame("Custom Cell Renderer"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     table = new JTable(new DefaultTableModel(0, 2) { 
      @Override 
      public Class<?> getColumnClass(int c) { 
       return Object.class; 
      } 
     }); 

     class RedYellowRenderer extends DefaultTableCellRenderer { 
      RedYellowRenderer() { 
       setHorizontalAlignment(CENTER); 
      } 
      @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(row == 0 && table.getRowCount() > 1) { 
        c.setBackground(Color.YELLOW); 
        c.setForeground(Color.BLACK); 
       } else { 
        c.setBackground(Color.RED); 
        c.setForeground(Color.WHITE); 
       } 

       return c; 
      } 
     } 

     table.setDefaultRenderer(Object.class, new RedYellowRenderer()); 
     table.setTableHeader(null); 

     JButton btn = new JButton("Add Row"); 
     btn.addActionListener(this); 

     JToolBar bar = new JToolBar(); 
     bar.setFloatable(false); 
     bar.add(btn); 

     JPanel content = new JPanel(new BorderLayout()); 
     content.add(bar, BorderLayout.NORTH); 
     content.add(new JScrollPane(table), BorderLayout.CENTER); 

     frame.setContentPane(content); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    @Override 
    public void actionPerformed(ActionEvent ae) { 
     int nextRow = table.getRowCount(); 
     DefaultTableModel model = (DefaultTableModel)table.getModel(); 
     model.addRow(new Object[] { "NAME" + nextRow, "SPORT" + nextRow }); 
    } 
}