2012-03-05 3 views
2

사용자가 드래그 앤 드롭 방식으로 다시 배열 할 수 있도록 확장 한 내 JList (Reorder a JList with Drag-and-DropUse drag and drop to reorder a list)가 이상한 결과를 제공합니다. 나에게 나의 주문 JComponent를주는 대신에, 그것은 나에게 .toString() 가치를 준다. 내 맞춤형 모델 JListDefaultListModel<JComponent>으로 설정하면 효과가 있다고 생각되지만 그렇지는 않습니다.Java JList 원하지 않는 toString() 변환

+1

렌더러는 무엇입니까? –

+1

해당 기사는 심각하게 구식입니다. dnd를 사용자 정의하는 현재 방법은 사용자 정의 TransferHandler입니다. http://docs.oracle.com/javase/tutorial/uiswing/index.html의 해당 장을 참조하십시오. – kleopatra

+1

방금 ​​알아 챘습니다 : _never_ (99.99 %)에는 목록에 JComponent 유형의 항목이 있습니다. – kleopatra

답변

5

렌더링 할 개체에 대해 사용자 지정 CellRenderer을 만들어야합니다. 디폴트에서는, JList는 컴퍼넌트의 toString 치를 표시합니다 (DefaultListCellRenderer가 JLabel를 확장하기 (위해) 때문에).

class MyRenderer extends DefaultListCellRenderer { 
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 
     Component c = super.getListCellRendererComponent(...); 
     setText(getValue(value)); // where getValue is some method you implement that gets the text you want to render for the component 
     return c; 
} 

문자열을 실제로 렌더링하지 않으려면 렌더링 할 구성 요소를 반환하는 CellRenderer 구현을 만듭니다.

+0

그래서 내 JComponent를 확장하는 동안'CellRenderer'을 구현하고 getListCellRendererComponent()가 내 JComponent를 반환하도록 만드시겠습니까? 시도해 볼게. 감사:). –

+0

** 고마워요! ** 잘 돌아갔습니다! –

+0

확실한 점 - 도움을 주어서 기쁩니다. –