2014-09-26 64 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运行的文件完全相同。谢谢你们。