如何指定Jlist宽度?

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

Sag*_*age 6

不,不要设置JList已添加的大小JScrollpane.因为JList具有实现的功能getPreferredScrollableViewportSize(),其viewport通过计算它包含的单元宽度和单元高度来计算优选的大小.让我JScrollPane来处理.如果需要,您可以尝试添加JScrollPane's维度.但是,要控制项目显示编号和方向,您可以使用:

  • setLayoutOrientation这使列表在多列中显示其数据.价值:

    1. JList.HORIZONTAL_WRAP:指定列表在包装到新行之前应从左到右显示其项目.
    2. JList.VERTICAL_WRAP:指定在包装到新列之前从上到下(照例)显示数据.
  • setVisibleRowCount(-1)使列表显示屏幕上可用空间中可能的最大项目数.另一个常见用途setVisibleRowCount是在列表的滚动窗格中指定列表优先显示的行数.

查看:如何使用列表进行演示和示例.


Con*_*one 5

解决的办法是调整的大小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)


cam*_*ckr 5

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