2011-01-15 4 views

답변

3

간단히 (AbstractTableModel가 확장되는) 테이블 모델에의 TableModel

http://download.oracle.com/javase/6/docs/api/javax/swing/table/TableModel.html#isCellEditable%28int,%20int%29

+0

사람들이 값을 클릭하여 변경하는 것을 방지합니다. 그것은 아마도 사람들이 조건문을 검사 할 때 파일에 다시 데이터를 저장하지 못하게합니다. –

+0

내가 물어 보자. JTable 모델을 구현하는 경우 기본적으로 2 차원 배열을 검색 할 메서드를 만듭니다. 따라서 isCellEditable = false로 설정하면 배열에 데이터를 다시 쓰지 않을 것입니다. 그리고 save 버튼을 클릭하면 JTable의 새로운 정보가 객체 배열에 쓰이거나 키에 키리스트가있는 것입니다. 키가 변경되면 새 값이 작성됩니다. 이 시점에서 상자에서 클릭하고 값을 변경할 수 없도록하려면 어떻게해야합니까? –

3

의)합니다 (의 isCellEditable에서 구현을 false을 반환, 당신은 같은 구현해야합니다

 public class MyTableModel extends AbstractTableModel { 
      //table is not editable 
      public boolean isCellEditable() { 
       return false; 
      } 
    } 
+1

이것은 좋은 해결책입니다. 그러나 TableModel은 실제로 Cristian의 코드에서 DefaultTableModel을 확장 할 수 있습니다. 일반적으로 DefaultTableModel을 확장 할 수있을 때 AbstractTableModel을 확장해야하는 좋은 이유는 없습니다. – jzd

+1

잘, 일반적으로 당신이 자신의 데이터 형식을 지정할 수 없기 때문에 DefaultTableModel을 사용하지 않습니다. 더 중요한 것은 짜증나게 할 수있는 것을 저장하는 벡터 벡터를 사용한다는 것입니다. 하지만 예전의 편의를 위해, DefaultTableModel은 대부분의 구현을 제공하기 때문에 작은 작업에 더 쉬운 선택입니다! 개인적으로, 나는 그것을 피한다. –

0

시도를 이 코드; 간단하고 이해하기 쉽습니다.

DefaultTableModel model =new DefaultTableModel(6,8); 
table = new JTable(model){ 

      private static final long serialVersionUID = 2485117672771964339L; 

      @Override 
       public boolean isCellEditable (int row, int column) 
       { 
        return editable; 
       } 
     }; 
+0

'JTAble' 대신'JTable'을 사용해야합니까? –

+0

고마워. – Alejandro

2

좋아, 어쩌면이 새로운 기능입니다,하지만 난 사용할 수 있다는 것을 발견

JTable table = new JTable(); 
... 
table.setEnabled(false); 

그리고 그것은 나를 위해 일을했다.

+0

model.cellEditable! = view.enabled – kleopatra

11
DefaultTableModel tableModel = new DefaultTableModel() { 

    @Override 
    public boolean isCellEditable(int row, int column) { 
     //all cells false 
     return false; 
    } 
}; 

table.setModel(tableModel); 
+0

@Matthew - 이것을 구현하려고하면 테이블이 사라집니다. 내 테이블이 JScrollPane에 있는지가 중요합니까? 이처럼 : 'JScrollPane editPatDocScrollPane = new JScrollPane(); JTable editPatDocTable = 새 JTable (data, columnNames); editPatDocScrollPane.setViewportView (editPatDocTable); ' – Jona

+0

@Jona 그 이유가 무엇인지 알아 내지 못합니다. 세포는 아직 거기에 있습니다, 그들은 단지 읽기 전용입니다. 자신의 상황에 도움이 필요하면, 사라지는 테이블을 보여주는 자진적인 예제를 사용하여 새로운 질문을 열 것을 제안합니다. –

+0

나는 똑같은 문제가 있었다. 내가 한 일은 JTable 테이블 = 새로운 JTable (data, columnNames); 및 setModel. 그러나 그것은 당신의 데이터와 columnNames를 오버라이드합니다! 따라서 data 및 columnNames로 defaultTableModel을 초기화 한 다음 JTable에 전달해야합니다. – Lyth

관련 문제