我想指定我的JList的固定宽度
我按照Gilbert Le Blanc 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);
但这不会强制大小为200 200
。我需要JScrollPane
的宽度为200
答案 0 :(得分:6)
不,请勿设置已添加到JList
的{{1}}的尺寸。因为JScrollpane
具有已实现的函数JList
,它通过计算它包含的单元格宽度和单元格高度来计算优先getPreferredScrollableViewportSize()
大小。让viewport
来处理。如果需要,请尝试添加JScrollPane
尺寸。但是,要控制项目显示编号和方向,您可以使用:
JScrollPane's
,可让列表在多列中显示其数据。价值:
setLayoutOrientation
:指定列表在换行到新行之前应从左到右显示其项目。JList.HORIZONTAL_WRAP
:指定在换行到新列之前,数据从上到下显示(照例)。 JList.VERTICAL_WRAP
使列表显示屏幕上可用空间中可能的最大项目数。 setVisibleRowCount(-1)
的另一个常见用途是向列表的滚动窗格指定列表优先显示的行数。
查看: How to Use List了解演示和示例。
答案 1 :(得分:5)
大约是JScrollPane的宽度
大多数布局管理器使用首选大小来确定最佳大小,然后使用最小/最大值来处理调整帧的大小。
我会尝试类似的事情:
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);
尽管手动设置组件的首选大小并不是一个好主意。让LAF确定合适的首选大小。例如,我永远不会硬编码高度,因为那样你的列表可能会显示4 1/2行,这是不专业的。
如果您只有一个字符串可能看起来太窄,我可以理解一点宽度。但在这种情况下,更好的解决方案是创建自定义渲染器并使用EmptyBorder在左/右分配额外空间,然后让LAF调整JList大小。
答案 2 :(得分:4)
解决方案是调整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);
答案 3 :(得分:3)
通常,您的列表大小是您放入其中的元素数量,因此不会以这种方式修复。你不能创建一个N个空格的列表,因为它不会是一个列表(它的长度是多少?) - 一个数组在这里更适合。如果要创建固定大小的列表,请参阅:
您还可以创建一个类,允许您向列表中添加指定数量的元素,然后禁止进一步添加(当列表的大小达到所需的N时)。
答案 4 :(得分:1)
您只需使用JList的setFixedCellWidth
。
答案 5 :(得分:0)
// Loop through the arrayList of doubles and convert to String
// with dollar signs, 2 decimal places, and extra spacing.
for(int i = 0; i < bookPrices.size(); i++)
{
bookPricesOnlyStrings.add(String.format("$%,.2f%-35s", bookPrices.get(i), ""));
System.out.println(bookPricesOnlyStrings.get(i));
}
我遇到了同样的问题。我的数据只有5个字符,与我的其他窗口相比较。所以我使用String.format在它的末尾添加空格。这拓宽了我的JList。我还能够添加美元符号并格式化小数位。