2014-06-16 5 views
1

많은 사람들이 알고 있듯이 JList의 구성 요소는 상호 작용할 수 없으며 상호 작용할 수 없으며 구성 요소 모양의 스냅 샷과 같습니다. 간단한 응용 프로그램에서 작업하고 JList는 목록의 구성 요소가 상호 작용할 수 있어야한다는 점을 제외하고는 원하는 것입니다. ,상호 작용 가능한 JList 만들기

screenshot

JList의 각 구성 요소는 당신이 볼 수있는 JPanel과는 JProgressBar가 같은 다른 구성 요소가 포함되어

는 지금까지 간단한하는 AbstractListModel를 구현하여,이 만든, 그리고의 ListCellRenderer은 JLable 및 JButton. 유일한 문제는 버튼 (및 다른 모든 구성 요소)이 상호 작용할 수 없다는 것입니다. 이 문제를 어떻게 해결할 수 있습니까?

참고 : 단일 열이 필요하지 않습니다. JTable!

+3

레이아웃을 사용하여 수직으로 정렬 된 구성 요소 목록을 생성하는 대신 SwingX 또는 BoxLayout의 VerticalLayout (예 : – MadProgrammer

+0

)을 사용하십시오. @MadProgrammer 실제로 JList를 수정할 수없는 경우 (JPanel GridLayout은 내가 가지고있는 것입니다.) 그러나 나는이 질문에 대한 답을 기다리고있을 것이다. –

+1

당신이 스스로 대답했다고 생각합니다.'JList'는 편집 할 수 없으며, 개조하려고 노력하지 않았으며, 열심히 노력하고 있습니다 (예, 실제로 시도했습니다). 당신은'JList'에서'MouseListener'를 사용하고, 클릭 된 행을 찾고,'MouseEvent'를'ListCellRenderer' 문맥 안에서 번역하고, 클릭 한 것을 결정할 수 있습니다. 그러나 첫 번째 옵션은 더 빠르고 간단하게 (레이아웃 관리자 사용) – MadProgrammer

답변

1

당신이 스스로 대답했다고 생각합니다. JList은 편집 할 수 없으며, 실제로 사용하기 위해 고안된 것이 아니며, 많은 노력이 필요합니다 (예, 실제로 시도했습니다).

는 는

당신의 컨텍스트 내에서 일하기 위해 MouseEvent 번역, 클릭 된 행을 찾습니다 JListMouseListener을 사용하여 "수"를 ListCellRendererComponent하고 다시 시도하고 클릭 한 결정 ...하지만

이 추가 예

1

어쩌면 SwingX에서 VerticalLayout 또는 BoxLayout 대신 수직 배향 성분의 목록을 생성하도록 레이아웃의 사용을 고려보다 용이하게하는 다른 수단을 통해 달성 될 수있는 추가의 작업이 많이 ...이고 미래의 사람들을위한 대답. 난 정확히 똑같은 문제가 생겼다. JListListCellRenderer을 사용하면 커스텀 렌더링 아이템 만 있으면 충분하지만, 완전한 기능을 갖춘 컴포넌트는 필요 없다.

내가 무슨 짓을하고 치료 작동합니다

panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 

와 나는 동적으로 패널을 조립하는 데 필요한 정보의 목록이있을 때 다음 :

public void build(List<Item> items){ 
    panel.removeAll(); 
    for(Item item: items){ 
     panel.add(new ItemEntry(item)); 
    } 
} 

가에 패널을 포장을 a JScrollPane 그리고 모든 컨트롤이 이제는 제대로 작동하기 전에처럼 작동합니다. :).