2012-09-17 7 views
0

나는 아래와 같이 두 개의 열이있는 테이블 모델에 들어있는 구성 요소를 만들었습니다. 사용자가 다시 내 약어 개체에 대한 항목을 변환 테이블 모델에 항목을 선택하면테이블 모델의 선택된 항목을 개체로 변환

if (!newAcList.isEmpty()) { 
    for (Acronym acc : newAcList) { 
     tableModel.addRow(new String[]{acc.getName(), acc.getDefinition()}); 

    } 
} 

는 내가 필요로하는 것입니다. Listselectionevent Listener를 사용하고 있습니다. 여기

  @Override 
      public void valueChanged(ListSelectionEvent e) { 
       String selectedAcData = null; 
       String selectDefData = null; 

       int[] selectedRow = accTable.getSelectedRows(); 
       int[] selectedColumns = accTable.getSelectedColumns(); 

       for (int i = 0; i < selectedRow.length; i++) { 
//     for (int j = 0; j < selectedColumns.length; j++) { 
        selectedAcData = (String) accTable.getValueAt(selectedRow[i], 0); 
       } 
      } 
+1

왜 변환 하시겠습니까? 테이블에 리스너를 추가하려고 시도 했습니까? 선택된 인덱스를 얻고 선택한 인덱스를 기반으로 모델을 참조합니까? – km1

+0

거기에 listselectionevent 리스너가 있습니다. selectedAcData = (String) jtable.getValueAt (selectedRow [i], 0);를 사용합니다. 내가 문자열 값을 사용하는 테이블 모델을 만들었지 만, 머리 글자 어 개체로 다시 변환 할 때 손실이 있습니다. – yams

답변

1

당신은 약어에 대한의 TableModel 인터페이스를 구현하는 클래스를 생성 할 수 있습니다 event``의 valueChanged 선택입니다. AcronymTableModel이라고하며, List<Acronym>의 약어 목록이 뒷받침됩니다. 그런 다음이 모델을 귀하의 테이블에 제공하십시오.

valueChanged 메서드에서 accTable.getValueAt(selectedRow[i], 0);을 호출하면 머리 글자 어의 인스턴스가 반환됩니다.

다음은 간단한 예입니다.

public class Example { 

     public static void main(String [] a) { 
      JFrame f = new JFrame(); 

      JPanel p = new JPanel(); 

      List<Acronym> acronyms = new ArrayList<Acronym>(); 
      acronyms.add(new Acronym("FBI", "Federal Bureau of Investigation")); 
      acronyms.add(new Acronym("CIA", "Central Intelligence Agency")); 

      final TableModel tModel = new AcronymTableModel(acronyms); 

      JTable t = new JTable(tModel); 
      t.getSelectionModel().addListSelectionListener(new ListSelectionListener() { 
       @Override 
       public void valueChanged(ListSelectionEvent e) { 
        Acronym a = (Acronym)tModel.getValueAt(e.getFirstIndex(), 0); 
        System.out.println(a.acronym + ": " + a.definition); 
       }}); 

      p.add(t); 

      f.getContentPane().add(p); 

      f.pack(); 

      f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 

      f.setVisible(true); 
     } 


    } 
    class Acronym { 
     String acronym; 
     String definition; 

     public Acronym(String a, String d) { 
      acronym = a; 
      definition = d; 
     } 
    } 
    class AcronymTableModel implements TableModel { 

     private List<Acronym> acronyms; 

     public AcronymTableModel(List<Acronym> acs) { 
      this.acronyms = new ArrayList<Acronym>(acs); 
     } 

     @Override 
     public int getRowCount() { 
      return this.acronyms.size(); 
     } 

     @Override 
     public int getColumnCount() { 
      return 2; 
     } 

     @Override 
     public String getColumnName(int columnIndex) { 
      switch(columnIndex) { 
      case 0: 
       return "Acronym"; 
      case 1: 
       return "Definition"; 
      } 

      return null; 

     } 

     @Override 
     public Class<?> getColumnClass(int columnIndex) { 
      return String.class; // Since both columns are simply 
     } 

     @Override 
     public boolean isCellEditable(int rowIndex, int columnIndex) { 
      return false; 
     } 

     @Override 
     public Object getValueAt(int rowIndex, int columnIndex) { 
      return acronyms.get(rowIndex); 
     } 

     @Override 
     public void setValueAt(Object aValue, int rowIndex, int columnIndex) { 
     } 

     @Override 
     public void addTableModelListener(TableModelListener l) { 
     } 

     @Override 
     public void removeTableModelListener(TableModelListener l) { 
     } 
    } 

Java 튜토리얼은 항상 좋은 예제가 있습니다. http://docs.oracle.com/javase/tutorial/uiswing/events/listselectionlistener.html

+0

나는 여기서 너무 많이 추측하고 있다고 생각합니다. 저는 테이블이 머리 글자 어로 된 테이블이라고 가정합니다. 두 개의 열. 단어 자체에 대한 하나의 열과 머리 글자에 대한 또 다른 열. – km1

+0

사실 첫 번째는 문자열이고 두 번째는 본질적으로 문자열입니다. 하지만 Acc 테이블 모델 클래스의 예를 들어 주시겠습니까? – yams

+0

@ 마크, 예제를 게시합니다. 여기 예제를 위해 테이블 ​​모델을 마지막으로 만들었습니다. – km1

관련 문제