2011-10-04 117 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

選擇某行的能力無關,與給定行中編輯細胞的能力。

問題是你的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中實現

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

例如

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 :) –

相關問題