2011-02-21 2 views
3

JTable의 열에 JList를 넣는 간단한 방법이 필요합니다. 나는 이미 JLists와 테이블을 가지고 있지만, 테이블에 넣을 때 JList는 String으로 표시된다. DefaultTableModel을 사용하기 때문에 정상이다. 나는 는 getColumnClass를 오버라이드 (override) 한() 등 :JTable 셀에서 JLists를 사용하는 방법은 무엇입니까?

public Class<? extends Object> getColumnClass(int c) 
{ 
    return getValueAt(0, c).getClass(); 
} 

그러나 이것은 단지 정수를 포맷하고 값을 부동.

내가 생각하는 의 setValueAt() 나는 JList.getSelectedValues를 (호출 할 때)을 문자열의 오전 배열을 반환하기 위해해 getValueAt()는, 오버라이드 (override) 할 필요가 있습니다,하지만 난 방법을 알아낼 수 없습니다 .
또한 셀을 편집 가능하게하고 사용자가 JList에서 하나 이상의 옵션을 선택할 수있게하려고합니다. 행을 편집 한 후 저장 버튼을 사용하여 변경 사항을 데이터베이스에 저장하므로 ListSelectionListener가 필요하지 않다고 생각하므로 JList.getSelectedValues ​​()가 정상적으로 작동합니다.

나는 이것이 일반적인 질문이라는 것을 알고 있지만 여기에서 대답을 찾을 수 없습니다. 이 사본이 중복되는 경우 알려 주시면 삭제하겠습니다.

+0

[의 ListCellRenderer]에 대해 자세히 (http://download.oracle.com/javase /1.5.0/docs/api/javax/swing/ListCellRenderer.html) 및 [CellEditors] (http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/CellEditor.html) 이 [튜토리얼] (http://download.oracle.com/javase/tutorial/uiswing/components/table.html#renderer) –

+0

고마워. 나는 이미 그것들을 읽었습니다. 나는 그들을 다시 읽고 그것을 독자적으로 만들려고 노력할 것입니다. – radonys

답변

6

나는 그것을했다. 나는이 렌더러

table.getColumnModel().getColumn(5).setCellRenderer(new JScrollTableRenderer()); 

를 사용하는 JList를 표시하는 데 필요한 열을

1) 나는 JScrollTableRenderer 만든 및 설정 : 같은 일을해야 모든 사람들을위한, 여기에 내가 무슨 짓을했는지입니다 JScrollTableRenderer 클래스 내용 :

public class JScrollTableRenderer extends DefaultTableCellRenderer { 

JScrollPane pane = new JScrollPane(); 

public JScrollTableRenderer() 
{ 
    super(); 
} 

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, 
     boolean hasFocus, int row, int column) 
{ 
    pane = (JScrollPane) value; 
    return pane; 
} 
} 

2)는 JScrollTableEditor 생성하고 열을 설정 한 나는이 편집기

table.getColumnModel().getColumn(5).setCellEditor(new JScrollTableEditor()); 
를 사용하는 JList를 표시 할 필요

JScrollTableEditor 클래스 함량

public class JScrollTableEditor extends AbstractCellEditor implements TableCellEditor { 
    JScrollPane component = new JScrollPane(); 
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, 
      int rowIndex, int vColIndex) 
    { 
     component = ((JScrollPane) value); 
     return ((JScrollPane) value); 
    } 

    public Object getCellEditorValue() 
    { 
     return component; 
    } 

    } 

3) I는 JTable의 모델이 메소드가 추가

  public Class<? extends Object> getColumnClass(int c) 
      { 
       if(c == 5) return JScrollPane.class; 
       else return getValueAt(0, c).getClass(); 
      }