有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何指定Jlist宽度?

我想指定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


共 (6) 个答案

  1. # 1 楼答案

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

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

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

    查看:How to Use List了解演示和示例

  2. # 2 楼答案

    您只需使用JList的setFixedCellWidth

  3. # 3 楼答案

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

    fixed size list in Java

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

  4. # 4 楼答案

        // 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个字符,与我的另一个窗口相比,我看不见了。所以我用了绳子。格式化以在其末尾添加空格。这拓宽了我的视野。我还能够添加美元符号并设置小数点的格式

    enter image description here

  5. # 5 楼答案

    解决方案是调整JScrollPane的大小。如果我没记错的话,JListJScrollPane填满

    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);
    
  6. # 6 楼答案

    it is about the width of the 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的大小