Don*_*llo 1 java swing jlist layout-manager preferredsize
我想指定我的JList的固定宽度
我按照吉尔伯特勒布朗克22k提供的例子
getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.X_AXIS));
Panel panel = new JPanel();
panel.setBackground(Color.WHITE);
getContentPane().add(panel);
String [] queries = {"a", "b", "a", "b" , "a", "b", "a", "b"};
panel.setLayout(new BorderLayout());
JList list = new JList(queries);
list.setMaximumSize(new Dimension(200, 200)); // this line does not do the job
list.setMinimumSize (new Dimension (200,200));
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setVisibleRowCount(5);
JScrollPane scrollPane_1 = new JScrollPane(list);
panel.add(scrollPane_1 , BorderLayout.CENTER);
Run Code Online (Sandbox Code Playgroud)
但这并没有强制规模200 200.我需要宽度为JScrollPane200
不,不要设置JList已添加的大小JScrollpane.因为JList具有实现的功能getPreferredScrollableViewportSize(),其viewport通过计算它包含的单元宽度和单元高度来计算优选的大小.让我JScrollPane来处理.如果需要,您可以尝试添加JScrollPane's维度.但是,要控制项目显示编号和方向,您可以使用:
setLayoutOrientation这使列表在多列中显示其数据.价值:
JList.HORIZONTAL_WRAP:指定列表在包装到新行之前应从左到右显示其项目.JList.VERTICAL_WRAP:指定在包装到新列之前从上到下(照例)显示数据.setVisibleRowCount(-1)使列表显示屏幕上可用空间中可能的最大项目数.另一个常见用途setVisibleRowCount是在列表的滚动窗格中指定列表优先显示的行数.
查看:如何使用列表进行演示和示例.
解决的办法是调整的大小JScrollPane。如果我没记错的话,请JList填写JScrollPane。
JScrollPane scrollPane_1 = new JScrollPane(list);
scrollPane_1.setMaximumSize(new Dimension(200, 200));
scrollPane_1.setMinimumSize (new Dimension (200,200));
panel.add(scrollPane_1 , BorderLayout.CENTER);
Run Code Online (Sandbox Code Playgroud)
它大约是JScrollPane的宽度
大多数布局管理器使用首选大小来确定最佳大小,然后使用min/max来处理调整大小(如果帧大小调整).
我会尝试类似的东西:
JList list = new JList(queries);
list.setVisibleRowCount(5);
JScrollPane scrollPane_1 = new JScrollPane(list);
Dimension d = list.getPreferredSize();
d.width = 200;
scrollPane_1.setPreferredSize(d);
Run Code Online (Sandbox Code Playgroud)
尽管手动设置组件的首选大小并不是一个好主意.让LAF确定合适的首选大小.例如,我永远不会硬编码高度,因为那样你的列表可能会显示4 1/2行,这是不专业的.
如果你只有一个字符串可能看起来太窄,我可以理解一点宽度.但在这种情况下,更好的解决方案是创建自定义渲染器并使用EmptyBorder在左/右分配额外的空间,然后让LAF调整JList的大小.
| 归档时间: |
|
| 查看次数: |
20311 次 |
| 最近记录: |