2014-04-21 96 views
0

你好我想在java swing中創建一個Jlist,但我無法理解我可以在哪裏顯示它。到目前爲止,我所見過的所有教程都在一個新窗口中創建了列表,這不是我想要的。我想用一個工具或其他東西來給出特定的座標和站點在我目前所在的框架中。我是java swing的新手,所以我可以使用一些幫助。我使用windows builder pro作爲eclipse的插件。是否有任何工具可以用來「繪製」列表顯示的位置?Java swing Jlist的創建

Thx提前

我試過這個,但它不起作用。

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); 

但是當我運行程序我得到這樣一個錯誤:在線程 「AWT-EventQueue的-0」 java.lang.ClassCastException

例外: JScrollPane的佈局必須是ScrollPaneLayout使用在 javax.swing.JScrollPane.setLayout(來源不明)在 主要$ 3.mouseClicked(Main.java:122)維持在 java.awt.Component.processMouseEvent java.awt.AWTEventMulticaster.mouseClicked(來源不明)(未知源)在 javax.swing.JComponent.process的MouseEvent(來源不明)處的 java.awt.Component.dispatchEventImpl(來源不明) java.awt.Container.processEvent(來源不明) java.awt.Component.processEvent(來源不明)在 java.awt中。 Container.dispatchEventImpl(來源不明)處的 java.awt.LightweightDispatcher.processMouseEvent(來源不明) java.awt.LightweightDispatcher.retargetMouseEvent(來源不明) java.awt.Component.dispatchEvent(來源不明)在 的Java。 awt.LightweightDispatcher.dispatchEvent(Unknown Source)at java.awt.Container.dispatchEventImpl(Unknown Source)at java.awt.Window.dispatchEventImpl(Unknown Source)at java.awt.Component.dispatchEvent(Unknown資料來源)處 java.awt.EventQueue.access $ 200(來源不明) java.awt.EventQueue.dispatchEventImpl(來源不明)在 java.awt.EventQueue中的$ 3.run(來源不明)在 java.awt.EventQueue中$ 3.run(來源不明)在 java.security.AccessController.doPrivileged(本機方法)在 java.security.ProtectionDomain $ 1.doIntersectionPrivilege(未知 來源)在 java.security.ProtectionDomain $ 1.doIntersectionPrivilege(未知 來源) java.awt.EventQueue $ 4.run(Unknown Source)at java.awt.EventQueue $ 4.run(Unknown Source)at java.security.AccessController.doPrivileged(Native Method)at java.security.ProtectionDomain $ 1.doIn tersectionPrivilege(未知 源)在java.awt.EventQueue.dispatchEvent(未知來源)在 java.awt.EventDispatchThread.pumpOneEventForFilters(未知來源) 在java.awt.EventDispatchThread.pumpEventsForFilter(未知來源) 在java.awt中。 EventDispatchThread.pumpEventsForHierarchy(Unknown Source)at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source)at java.awt.EventDispatchThread。運行(來源不明)

回答

2

你想要做什麼本質上是將一個組件(這裏由JScrollPane中舉行一個JList - 相信我,你想它一個JScrollPane內)放入容器(通常一個JPanel),而一般有三種方法可以做到這一點:

  1. 給JPanel的一個null佈局,然後設置大小和任何位置,您添加到它的所有組件,包括JScrollPane的保持通過setBounds(...)方法的JPanel,或...
  2. 使用GUI構建器放置於您的組件在絕對FAS北恩,或者與佈局管理器的幫助下,或...
  3. 使用嵌套JPanels創建GUI,每一個使用它自己的佈局管理器,添加JScrollPane的以智能的方式JPanels之一(這取決於含JList的,在佈局管理器),讓你的佈局和首選大小設置所有適當尺寸的組件。

在非常短期的第一條路徑是最快和最簡單的,但中長期來看,它有嚴重的問題,因爲它使一個非常不靈活GUI的,雖然他們看起來好一個平臺上看起來可怕在大多數其他平臺或屏幕分辨率上,這些都很難更新和維護。相反,你將要研究和學習的佈局管理器,然後窩JPanels,分別使用自己的佈局管理器來創建賞心悅目的和複雜的圖形用戶界面的好看在所有操作系統的。

第二條路可以讓你創建快速簡單的GUI,但是如果你還不熟悉Swing庫並且熟練使用佈局管理器,那麼如果你需要修改你的代碼以後的時間,因爲你會嚴格依賴代碼生成工具。不要誤解我的意思,只要GUI生成器軟件不會失效(這在過去發生過),如果你對Swing編碼非常好,這是一個可行的解決方案。

在我看來,您的問題的最佳答案是學習如何使用佈局管理器,然後使用它們。並瞭解他們,請看看這裏:The Layout Manager Tutorial


編輯
關於你的編輯問題,你已經發布的代碼:

  • 請勿將JScrollPane的佈局,因爲這將防止JScrollPane的正常工作。
  • 取而代之,將您的JList放入JScrollPane(實際上是在其視口中,但是如果您將JList傳遞到JScrollPane的構造函數中,您將這樣做)。
  • 然後使用適當的佈局將JScrollPane添加到容器(JPanel)中。
  • 請勿使用setBounds(...)
  • 嵌套您的JPanel,每個使用其自己的佈局,每個包含其他組件和JPanel。
  • 在通過pack()方法添加所有組件後打包GUI,然後在頂級窗口中調用setVisible(true)

編輯2
幽州在commment:

你能爲我提供了一個簡短的教程?我會馬上編輯問題,告訴你問題

我說過我做過。

我的意思是Jpanel不適合佈局!

請理解我們理解您的問題的唯一來源是您明確告訴我們的。問題中的相關信息越多,我們越能理解它們,我們可以提供更好的幫助。這是一個很好的鏈接,可以幫助您瞭解最重要的Swing教程。你可以在你與你的問題使用標籤此鏈接:

+0

你能爲我提供了一個簡短的教程?我會馬上編輯問題,向您展示問題 – JmRag

+0

@JmRag:我做到了。請在我的答案中查看最後一段中的鏈接。 –

+0

我的意思是Jpanel不適合佈局! – JmRag