2011-10-04 5 views
3

값을 표시 할 테이블이 있습니다.이 테이블에서 사용자는 하나의 행을 선택할 수는 있지만 내용을 변경할 수는 없습니다. 내 코드 :모든 셀을 편집 할 수없는 경우 JTable 행을 선택 가능하게합니다.

JTable tablaCurvas1 = new JTable(); 
    TableCellRenderer tableRender = new SubtractTableRenderer(); 
    tablaCurvas1.setDefaultRenderer(Object.class, tableRender); 
    tablaCurvas1.setModel(new DefaultTableModel(rowData, columnNames){ 
     private static final long serialVersionUID = 1L; 
    @Override 
     public boolean isCellEditable(int row, int column) { 
      return false; //So I make every cell non-editable 
     } 

    }); 

    JScrollPane scrollPane = new JScrollPane(tablaCurvas1); 
    tablaCurvas1.setFillsViewportHeight(true); 
    tablaCurvas1.setPreferredScrollableViewportSize(new Dimension(200,100)); 
    pane.add(scrollPane,c); 

이제 테이블 행을 클릭하면 선택되지 않습니다. 어떻게 해결할 수 있을까요?

답변

6

다음은 행을 선택하는 능력 지정된 행에 셀을 편집 할 수있는 기능과 아무 상관에 대한

table.setRowSelectionAllowed(boolean); 
table.setColumnSelectionAllowed(boolean); 
table.setCellSelectionEnabled(boolean); 

을 구현합니다.

문제는 강조 표시를 담당하는 SubractTableRenderer입니다. 렌더러에서 다음과 같은 코드가 필요합니다.

@Override 
public Component getTableCellRendererComponent(
    JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
{ 
    super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 

    // add custom rendering code 

    if (isSelected) 
     setBackground(table.getSelectionBackground()); 
    else 
     setBackground(table.getBackground()); 

    return this; 
} 
3

JTable는, 예를

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

public class MyTable { 

    public MyTable() { 
     JPanel panel = new JPanel(new BorderLayout()); 
     panel.add(new JScrollPane(createTable())); 
     JFrame frame = new JFrame("My Table"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(panel); 
     frame.setSize(new Dimension(400, 130)); 
     frame.setVisible(true); 
    } 

    private JTable createTable() { 
     Object[][] data = {{"Nazli", "Shahi", new Date()}, 
      {"Nima", "Sohrabi", new Date()}, 
      {"Farsheed", "Tari", new Date()}, 
      {"Anousheh", "Modaressi", new Date()}}; 
     String[] columnNames = {"First Name", "Last Name", "DOB"}; 
     DefaultTableModel model = new DefaultTableModel(data, columnNames) { 

      private static final long serialVersionUID = 1L; 

      @Override 
      public Class<?> getColumnClass(int column) { 
       return getValueAt(0, column).getClass(); 
      } 

      @Override 
      public boolean isCellEditable(int row, int column) { 
       return false; 
      } 
     }; 
     JTable table = new JTable(model); 
     table.setAutoCreateRowSorter(true); 
     table.setRowSelectionAllowed(true); 
     table.setColumnSelectionAllowed(true); 
     table.setCellSelectionEnabled(true); 
     return table; 
    } 

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

      @Override 
      public void run() { 
       MyTable myTable = new MyTable(); 
      } 
     }); 
    } 
} 
+0

코드가 작동하므로 렌더러에 문제가있어서 다른 답변이 나에게 적합합니다. 어쨌든 고맙습니다 mKorbel :) –

관련 문제