Java JList控件大小在运行jar文件时更改

Java JList控件大小在运行jar文件时更改,java,swing,layout,jlist,gridbaglayout,Java,Swing,Layout,Jlist,Gridbaglayout,我有两个并列的JList控件。它们之间几乎没有按钮。当我从eclipse运行时,布局看起来很好 但是如果我运行导出的jar文件,左边会占用更多的空间。我不知道它为什么这样做 我把它们放在这样的网格布局中 mLstMdlTestSuitesAvailable = new DefaultListModel<String>(); mLstTestSuitesAvailable = new JList<String>(); mLstTestSuitesAvailable.se

我有两个并列的JList控件。它们之间几乎没有按钮。当我从eclipse运行时,布局看起来很好

但是如果我运行导出的jar文件,左边会占用更多的空间。我不知道它为什么这样做

我把它们放在这样的网格布局中

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);
mLstMdlTestSuitesAvailable=newdefaultlistmodel();
mLstTestSuitesAvailable=new JList();
mlstmtestsuitesavailable.setModel(mlstmdltestsuitesailable);
mLstTestSuitesAvailable.setMinimumSize(新尺寸(100100));
JScrollPane scrollPaneTestSuitesAvailable=新的JScrollPane(mLstTestSuitesAvailable);
GridBagConstraints gbcLstTestSuitesAvailable=新的GridBagConstraints();
gbcLstTestSuitesAvailable.fill=GridBagConstraints.BOTH;
gbcLstTestSuitesAvailable.weights x=10;
gbcLstTestSuitesAvailable.gridwidth=10;
gbcLstTestSuitesAvailable.weighty=8;
gbcLstTestSuitesAvailable.gridheight=8;
gbcLstTestSuitesAvailable.insets=新的insets(0,11,10,11);
gbcLstTestSuitesAvailable.gridx=0;
gbcLstTestSuitesAvailable.gridy=1;
panel.add(scrollPaneTestSuitesAvailable,gbcLstTestSuitesAvailable);
mLstMdlTestSuitesSelected=新的DefaultListModel();
mLstTestSuitesSelected=new JList();
mLstTestSuitesSelected.setModel(mLstMdlTestSuitesSelected);
GridBagConstraints GBCLSTTestSuiteSelected=新建GridBagConstraints();
GBCLSTTestSuiteSelected.fill=GridBagConstraints.BOTH;
GBCLSTTestSuiteSelected.weights x=10;
GBCLSTTestSuiteSelected.gridwidth=10;
GBCLSTTestSuiteSelected.weighty=8;
GBCLSTTestSuiteSelected.gridheight=8;
gbcLstTestSuitesSelected.insets=新的insets(0,11,10,11);
gbcLstTestSuitesSelected.gridx=15;
gbcLstTestSuitesSelected.gridy=1;
JScrollPane ScrollPaneTestSuiteSelected=新JScrollPane(MLSTTestSuiteSelected);
panel.add(ScrollPaneTestSuiteSelected,GBCLSTTestSuiteSelected);
有人能帮我找出这里出了什么问题吗?

JTable
所示,您可以覆盖列表的
getPreferredScrollableViewportSize()
方法来指定初始的首选大小。使用
getRowHeight()
的倍数可以提供良好的外观


网格布局符合所含组件的首选尺寸。而
JList
的首选大小由其内容决定。通过查看您的屏幕截图,您的
JList
s根据您运行的环境具有不同的内容,因此首选大小不同并不奇怪


如果你想有一个更可预测的行为,看看。这允许您设置一个确定单元格大小的“典型值”。与setFixedCellWidth相比,setFixedCellWidth的优势在于它仍然尊重字体、显示分辨率等。

我找到了原因。顶部的横幅图像没有导出,因此导致jar布局混乱。当我将图像添加到jar导出到的文件夹中时,它显示的与eclipse中运行的图像完全相同。谢谢大家。

我的初步猜测是,配置了运行JAR的系统的JRE与Eclipse使用的JRE不同。两者都使用1.7.0\u 45自己动手,使用一个像样的布局管理器,例如MiGLayoutMy bad。实际上,它们都是以相同的值启动的。但用户可以选择更改值。所以我拍摄了不同价值的屏幕截图。但是,即使它们相同,大小也不同。你现在可以看编辑后的问题了。有趣的是,图片的高度不同。因此,您似乎强制执行高度,例如通过
JFrame
的大小。然后我猜,
GridBagLayout
在首选和最小大小策略之间切换。试着改变一下镜框的大小,看看会发生什么。你能给我一个你是如何做到这一点的示例代码吗?@KarthikAndhamil:这种方法也可以看到和看到。