2014-09-26 70 views
1

我有兩個並列的JList控件。它們之間的按鈕很少。當我從eclipse運行時,佈局看起來很好。運行jar文件時JList控件大小發生變化

enter image description here

但是,如果我運行導出的jar文件,左側佔據更多的空間。我不知道它爲什麼這樣做。

enter image description here

我將它們放置在這樣的GridBagLayout的。

mLstMdlTestSuitesAvailable = new DefaultListModel<String>(); 
mLstTestSuitesAvailable = new JList<String>(); 
mLstTestSuitesAvailable.setModel(mLstMdlTestSuitesAvailable); 
mLstTestSuitesAvailable.setMinimumSize(new Dimension(100, 100)); 
JScrollPane scrollPaneTestSuitesAvailable = new JScrollPane(mLstTestSuitesAvailable); 
GridBagConstraints gbcLstTestSuitesAvailable = new GridBagConstraints(); 
gbcLstTestSuitesAvailable.fill = GridBagConstraints.BOTH; 
gbcLstTestSuitesAvailable.weightx = 10; 
gbcLstTestSuitesAvailable.gridwidth = 10; 
gbcLstTestSuitesAvailable.weighty = 8; 
gbcLstTestSuitesAvailable.gridheight = 8; 
gbcLstTestSuitesAvailable.insets = new Insets(0, 11, 10, 11); 
gbcLstTestSuitesAvailable.gridx = 0; 
gbcLstTestSuitesAvailable.gridy = 1; 
panel.add(scrollPaneTestSuitesAvailable, gbcLstTestSuitesAvailable); 

mLstMdlTestSuitesSelected = new DefaultListModel<String>(); 
mLstTestSuitesSelected = new JList<String>(); 
mLstTestSuitesSelected.setModel(mLstMdlTestSuitesSelected); 
GridBagConstraints gbcLstTestSuitesSelected = new GridBagConstraints(); 
gbcLstTestSuitesSelected.fill = GridBagConstraints.BOTH; 
gbcLstTestSuitesSelected.weightx = 10; 
gbcLstTestSuitesSelected.gridwidth = 10; 
gbcLstTestSuitesSelected.weighty = 8; 
gbcLstTestSuitesSelected.gridheight = 8; 
gbcLstTestSuitesSelected.insets = new Insets(0, 11, 10, 11); 
gbcLstTestSuitesSelected.gridx = 15; 
gbcLstTestSuitesSelected.gridy = 1; 
JScrollPane scrollPaneTestSuitesSelected = new JScrollPane(mLstTestSuitesSelected); 
panel.add(scrollPaneTestSuitesSelected, gbcLstTestSuitesSelected); 

任何人都可以請幫助我找出這裏出了什麼問題嗎?

+0

我最初的猜測是配置系統運行JAR的JRE與Eclipse使用的不同之處不同 – ControlAltDel 2014-09-26 16:04:35

+0

兩者都使用1.7.0_45 – 2014-09-26 16:12:10

+0

自己嘗試一下,並使用體面的LayoutManager, MiGLayout – keuleJ 2014-09-26 16:55:24

回答

1

here對於JTable,您可以覆蓋列表的getPreferredScrollableViewportSize()方法以指定初始首選大小。 Uisng的getRowHeight()的倍數提供了一個不錯的外觀。

image

+0

你能給我一個你如何實現這個目標的示例代碼嗎? – 2014-09-26 16:53:36

+0

@KarthikAndhamil:該方法也見[這裏](http://stackoverflow.com/a/7881957/230513)和[這裏](http://stackoverflow.com/a/7225323/230513)。 – trashgod 2014-09-26 17:00:41

1

GridBagLayout的方面與包含的組件的優選的尺寸。並且JList的首選尺寸由其內容決定。通過查看屏幕截圖,可以清楚地看到您的JList具有不同的內容,具體取決於您所使用的環境,因此首選尺寸不同並不奇怪。

如果你想有一個更可預測的行爲,看看setPrototypeCellValue。這使您可以設置一個「典型值」來確定單元大小。與setFixedCellWidth相比,它的優勢在於它仍然遵守字體,顯示分辨率等。

+0

我的不好。實際上他們都以相同的值啓動。但用戶可以選擇更改值。所以我以不同的價值拍攝了截圖。但是,即使它們相同,尺寸也不相同。你現在可以看看編輯過的問題。 – 2014-09-26 16:50:16

+0

有趣的是,圖片的高度不同。所以你似乎強制執行一個高度,例如通過'JFrame'的大小。那麼我的猜測是'GridBagLayout'在首選和最小尺寸策略之間切換。嘗試改變框架的大小,看看會發生什麼。 – Holger 2014-09-26 17:09:33

0

我明白了原因。頂部的橫幅圖像不會被導出,因此造成了罐子佈局的混亂。當我將圖像添加到jar導出到的文件夾時,它顯示與從eclipse運行的文件完全相同。謝謝你們。