java JScrollPane弄乱了大小
我试图向JList添加一个JScrollPane,但是当我这样做时,它会弄乱大小,如图所示:
如果列表为空,它将像右边的一样大,但是如果我添加了一些内容,它将缩小到右边的大小,设置最大大小或首选大小对它没有影响
这很烦人,我希望它总是看起来像左边的那个,不管它是否是空的。以下是我正在使用的代码,但由于项目的复杂性,很难提供一个有效的示例
private JPanel setUpRight(){
//right.setLayout(new BoxLayout(right,BoxLayout.PAGE_AXIS));
right.setBorder(BorderFactory.createEmptyBorder(
2, //top
10, //left
2, //bottom
10)); //right
JPanel localCenter = new JPanel(new BorderLayout());
JPanel localBottom = new JPanel(new BorderLayout());
saves.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
saves.setLayoutOrientation(JList.VERTICAL);
saves.setDragEnabled(true);
saves.setTransferHandler(new FromTransferHandler());
JScrollPane scroll = new JScrollPane(saves,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
configs.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
configs.setLayoutOrientation(JList.VERTICAL);
configs.setDragEnabled(true);
configs.setTransferHandler(new FromTransferHandler1());
JScrollPane scroll1 = new JScrollPane(configs,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
localCenter.add(new JLabel("List of saved macros"),BorderLayout.NORTH);
localCenter.add(scroll,BorderLayout.CENTER);
localCenter.add(new JButton("Delete"),BorderLayout.SOUTH);
localBottom.add(new JLabel("List of saved configs"),BorderLayout.NORTH);
localBottom.add(scroll1,BorderLayout.CENTER);
right.add(localCenter);
right.add(Box.createRigidArea(new Dimension(left.getHeight(), 10)));
JSeparator separate = new JSeparator(SwingConstants.HORIZONTAL);
Dimension d = separate.getPreferredSize();
d.width = separate.getMaximumSize().width;
separate.setMaximumSize( d );
right.add(separate,BoxLayout.LINE_AXIS);
right.add(Box.createRigidArea(new Dimension(left.getHeight(), 10)));
right.add(localBottom);
return right;
}
# 1 楼答案
您似乎没有调用JList对象上最重要的方法来正确调整JScrollPane视口的大小:
setVisibleRowCount(int rowCount)
和setPrototypeCellValue(T value)
。第一种方法帮助JList告诉JScrollPane它的垂直视口大小,第二种方法帮助JList告诉它的控股JScrollPane它的首选水平视口大小有关详细信息,请查看JList API
例如