2014-04-21 3 views
0

안녕하세요, 자바 스윙에서 Jlist를 만들고 싶지만 어디에서 볼 수 있는지 이해할 수 없습니다. 지금까지 본 모든 자습서는 내가 원하는 바가 아닌 새 창에서 목록을 만듭니다. 나는 특정 좌표와 사이트를 제공하기 위해 도구 나 무언가를 사용하고 싶습니다. 현재 자바 스윙에 익숙하지 않아 도움이 될 수 있습니다. 나는 이클립스 플러그인으로 윈도우 빌더 프로를 사용한다. 목록을 표시 할 곳을 "그리는"데 사용할 수있는 도구가 있습니까?자바 스윙 Jlist 생성

미리 Thumb in

시도했지만 작동하지 않습니다. 스레드 "AWT-EventQueue의-0"java.lang.ClassCastException가에서

예외 : 나는이 프로그램을 실행하면

JPanel panel = new JPanel(); 
panel.setBounds(36, 109, 619, 202); 
MainFrame.getContentPane().add(panel); 

final JScrollPane scrollPane = new JScrollPane(); 
panel.add(scrollPane); 


/*on a click listener of a button*/ 
    scrollPane.setLayout(new BorderLayout()); 
       getContentPane().add(scrollPane); 

       // Create some items to add to the list 
       String listData[] = 
       { 
        "Item 1", 
        "Item 2", 
        "Item 3", 
        "Item 4" 
       }; 
       JList listbox = new JList(listData); 
       scrollPane.add(listbox, BorderLayout.CENTER); 

는하지만이 같은 오류가 JScrollPane의 레이아웃이 ScrollPaneLayout가 있어야합니다 (주) 에있는 javax.swing.JScrollPane.setLayout (알 수없는 소스) 주 $ 3.mouseClicked (Main.java:122) at 에서 java.awt.AWTEventMulticaster.mouseClicked (알 수없는 소스) java.awt.Component.processMouseEvent Source) at javax.swing.JComponent.process MouseEvent (알 수없는 소스)에서 에서 java.awt.Component.processEvent (알 수없는 소스) 에서 java.awt.Container.processEvent (알 수없는 소스) 에서 java.awt.Component.dispatchEventImpl (알 수없는 소스) java.awt. 자바에서 java.awt.LightweightDispatcher.processMouseEvent (알 수없는 소스)에서 java.awt.LightweightDispatcher.retargetMouseEvent (알 수없는 소스)에서 java.awt.Component.dispatchEvent (알 수없는 소스)에서 Container.dispatchEventImpl (알 수없는 소스).에서 awt.LightweightDispatcher.dispatchEvent (알 수없는 소스) 에서 java.awt.Container.dispatchEventImpl (알 수없는 소스) 에서 java.awt.Window.dispatchEventImpl (알 수없는 소스) java.awt.Component.dispatchEvent (알 수없는 소스) 소스)에서 에서 java.awt.EventQueue.dispatchEventImpl (알 수없는 소스) java.awt.EventQueue.access 에서 $ 200 (알 수없는 소스) java.awt.EventQueue $ 3.run (알 수없는 소스) 에서 java.awt.EventQueue java.security.ProtectionDomain $ 1.doIntersectionPrivilege (알 소스)에서 java.security.ProtectionDomain $ 1.doIntersectionPrivilege (알 소스)에서 $ 3.run java.security.AccessController.doPrivileged (기본 방법)에서 (알 수없는 소스) java.awt.EventQueue $ 4.run (알려지지 않은 소스) at java.awt.EventQueue $ 4.run (알 수없는 소스) at java.security.AccessController.doPrivileged (네이티브 메소드) java.security.ProtectionDomain $ 1.doIn tersectionPrivilege있는 java.awt에서 java.awt.EventDispatchThread.pumpEventsForFilter (알 소스)에 java.awt.EventDispatchThread.pumpOneEventForFilters에서 java.awt.EventQueue.dispatchEvent (알 소스) (알 소스)에 (알 소스). EventDispatchThread.pumpEventsForHierarchy (알려지지 않은 소스) at java.awt.EventDispatchThread.pumpEvents (알 수없는 소스) ( 소스)에서 java.awt.EventDispatchThread.(알 수없는 소스)

답변

2

당신이하고자하는 것은 기본적으로 JScrollPane에있는 JList (JScrollPane 내부에있는 JList)를 컨테이너 JPanel과),이 할 수있는 세 가지 일반적인 방법이 있습니다 :

  1. 인 JPanel에게 null 레이아웃을 지정하고 JScrollPane의 홀딩을 포함하여 크기 및 위치 당신이 그것을에 추가 모든 구성 요소를 설정은 JPanel setBounds(...) 메서드를 통해 또는
  2. GUI 빌더를 사용하면 절대적으로 당신을 위해 구성 요소를 배치 할 수 있습니다 hoon 또는 레이아웃 관리자의 도움을 받아야합니다.
  3. 중첩 된 JPanel을 사용하여 각각의 고유 한 레이아웃 관리자를 사용하여 GUI를 만들고 JList가 포함 된 JScrollPane을 지능형 방식으로 JPanels 중 하나에 추가합니다. 레이아웃 관리자에서) 레이아웃 및 구성 요소의 기본 크기가 모든 적절한 크기로 설정되도록하십시오.

매우 짧은 기간에 첫 번째 경로가 가장 빠르고 쉬운 방법이지만 중장기 적으로는 매우 유연하지 않은 GUI를 만들기 때문에 심각한 문제가 있습니다. 한 플랫폼에서보기에는 좋지 않지만 대부분의 다른 플랫폼이나 화면 해상도에서 업데이트하고 유지하기가 매우 어렵습니다. 대신 레이아웃 관리자를 배우고 배우고 각각의 레이아웃 관리자를 사용하여 JPanels를 중첩하여 모든 OS에서 잘 보이는 기발하고 복잡한 GUI를 만들 수 있습니다.

두 번째 경로를 사용하면 빠르고 쉬운 GUI를 만들 수 있지만 아직 레이아웃 관리자 사용에 익숙하지 않고 스윙 라이브러리에 익숙하지 않은 경우 코드 수정이 필요하면 방해받을 수 있습니다. 나중에 코드 생성 유틸리티에 묶여 있어야하기 때문입니다. GUI 빌더 소프트웨어가 작동하지 않는 한 (과거에는 발생 했음) Swing 코딩에 능숙하다면 나에게 잘못된 해결책을 제시 할 수 있습니다.

내 생각에 귀하의 질문에 대한 최선의 대답은 레이아웃 관리자를 사용하는 방법을 배우는 것입니다. 그리고 그들을 배우기 위해서 여기를보세요 : The Layout Manager Tutorial. 편집 된 질문 당신이 게시 한 코드에 대해서는 편집


:이이 기능에서 JScrollPane의를 차단하므로

  • 는 JScrollPane의 레이아웃을 설정하지 마십시오.
  • JList를 실제로 JScrollPane의 뷰포트에 배치하고 JList를 JScrollPane의 생성자에 전달하면이 작업을 수행하게됩니다.
  • 그런 다음 적절한 레이아웃을 사용하여 JPanel 컨테이너에 JScrollPane을 추가합니다.
  • 사용하지 마십시오 setBounds(...)
  • 각각 다른 구성 요소와 JPanels를 포함하는 자체 레이아웃을 사용하여 JPanel을 중첩합니다.
  • pack() 방법을 통해 모든 구성 요소를 추가 한 후 GUI를 압축 한 다음 최상위 창에서 setVisible(true)으로 전화하십시오.

편집 2
commment에서 당신의 상태 :

당신이 간단한 튜토리얼는 무엇입니까? 문제를 바로 표시하기 위해 질문을 수정하겠습니다.

내가 말했듯이.

나는 레이아웃이 아닌 Jpanel을 의미했습니다.

귀하의 문제를 파악할 수있는 유일한 원인은 귀하가 구체적으로 말한 내용입니다. 질문에 더 많은 관련 정보가있을수록 더 잘 이해하고 더 잘 이해할 수 있습니다. 가장 중요한 스윙 튜토리얼로 연결되는 훌륭한 링크가 있습니다.

+0

당신이 간단한 튜토리얼로 날을 제공 할 수 있습니다 : 당신은 당신이 당신의 질문을 사용하는 태그에이 링크를 찾을 수 있습니까? 나는 당신에게 문제를 보여주기 위해 바로 질문을 편집 할 것이다. – JmRag

+0

@JmRag : 나는했다. 내 대답의 마지막 단락에있는 링크를 확인하십시오. –

+0

레이아웃 용이 아닌 Jpanel을 의미했습니다! – JmRag