Java 如何指定Jlist宽度?

Java 如何指定Jlist宽度?,java,swing,layout-manager,jlist,preferredsize,Java,Swing,Layout Manager,Jlist,Preferredsize,我想指定JList的固定宽度 我遵循了 但这并不强制大小为200。我需要JScrollPane的宽度为200通常,列表的大小是您放入其中的元素数,因此不会以这种方式固定。您不能创建一个包含N个空格的列表,因为它不是一个列表(它的长度是多少?)-数组更适合这里。如果要创建固定大小的列表,请参阅: 您还可以创建一个类,该类允许您向列表中添加指定数量的元素,然后禁止进一步添加(当列表的大小达到所需的N时)。通常列表的大小是您放入其中的元素数,因此不会以这种方式固定。您不能创建一个包含N个空格的列表,

我想指定JList的固定宽度

我遵循了


但这并不强制大小为
200
。我需要
JScrollPane
的宽度为200

通常,列表的大小是您放入其中的元素数,因此不会以这种方式固定。您不能创建一个包含N个空格的列表,因为它不是一个列表(它的长度是多少?)-数组更适合这里。如果要创建固定大小的列表,请参阅:


您还可以创建一个类,该类允许您向列表中添加指定数量的元素,然后禁止进一步添加(当列表的大小达到所需的N时)。

通常列表的大小是您放入其中的元素数,因此不会以这种方式固定。您不能创建一个包含N个空格的列表,因为它不是一个列表(它的长度是多少?)-数组更适合这里。如果要创建固定大小的列表,请参阅:


您还可以创建一个类,该类允许您向列表中添加指定数量的元素,然后禁止进一步添加(当列表大小达到所需的N时)。

解决方案是调整
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);

解决方案是调整
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);

否,不要设置已添加到
JScrollpane
JList
的大小。因为
JList
有一个实现的函数
getPreferredScrollableViewportSize()
,该函数通过计算单元格宽度和单元格高度来计算视口的大小。让
JScrollPane
来处理这个问题。如果需要,可以尝试添加
JScrollPane的
维度。但是,要控制项目显示编号和方向,可以使用:

  • setLayoutOrientation
    允许列表以多列显示其数据。值:

  • JList.HORIZONTAL\u WRAP
    :指定在换行到新行之前,列表应从左到右显示其项目
  • JList.VERTICAL\u WRAP
    :指定数据在包装到新列之前从上到下(通常)显示
  • 设置VisibleRowCount(-1)
    使列表在屏幕上的可用空间中显示尽可能多的项目。
    setVisibleRowCount
    的另一个常见用法是在列表的滚动窗格中指定列表希望显示的行数


查看:查看演示和示例。否,不要设置已添加到
JScrollpane
JList
的大小。因为
JList
有一个实现的函数
getPreferredScrollableViewportSize()
,该函数通过计算单元格宽度和单元格高度来计算视口的大小。让
JScrollPane
来处理这个问题。如果需要,可以尝试添加
JScrollPane的
维度。但是,要控制项目显示编号和方向,可以使用:

  • setLayoutOrientation
    允许列表以多列显示其数据。值:

  • JList.HORIZONTAL\u WRAP
    :指定在换行到新行之前,列表应从左到右显示其项目
  • JList.VERTICAL\u WRAP
    :指定数据在包装到新列之前从上到下(通常)显示
  • 设置VisibleRowCount(-1)
    使列表在屏幕上的可用空间中显示尽可能多的项目。
    setVisibleRowCount
    的另一个常见用法是在列表的滚动窗格中指定列表希望显示的行数

查看:了解演示和示例。


它大约是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的大小


它大约是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行,这看起来不专业


宽度我可以理解一点,如果你只有一个字符串,它可能看起来太窄了。但是在这种情况下,一个更好的解决方案是创建一个自定义渲染器并使用一个在左/右分配额外空间的空顺序,然后让LAF调整JList的大小。

您可以简单地使用JList的
setFixedCellWidth

您可以简单地使用JList的
setFixedCellWidth

//循环ArraylistO
    // 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));
    }