【问题标题】:JList sudden changeJList突变
【发布时间】:2013-01-08 22:47:59
【问题描述】:

在下图中,底部的JComponentJScrollPane 中的JList(列表)。 默认情况下,可见行数是 8 或 10,我不知道。 但是突然间,当我对项目进行更多更改时,它发生了变化 对此,现在我一次只能看到一个项目(fsgisfg)。 如何更改一次显示的行数?

list.setVisibleRowCount(8) 不起作用。

list 使用AbstractListModel 的扩展作为模型。

主菜单JFrame使用GridBagLayout

我不知道是什么可能导致这种情况发生,因为我什至试图撤消 在项目中进行的所有更改,结果仍然相同。

private JList<String> list;
[...]

list = new JList<String>(); 
list.setVisibleRowCount(8); //doesn't change anything
[...]

JScrollPane scroll2 = new JScrollPane(list);
[...]

list.setModel(new BookListModel(library));
list.repaint(); //the model gets the data for the list, and refresh is needed

[...]

GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 4;
c.gridwidth = 2;
frame.add(scroll2, c);

image http://dl.dropbox.com/u/71389667/problem.jpg

【问题讨论】:

  • 您应该添加一些代码...
  • 这不足以用来推断发生了什么。你真的需要提供一个SSCCE
  • 这个想法是我也不知道是什么原因造成的,因为一开始没问题。我无法显示所有代码,因为我不知道问题出在哪里:(。
  • 您是否使用任何类型的版本控制?您是否能够将您的代码恢复到可以正常工作的最新版本?对于大型项目,这是一个很好的工具。
  • “我无法显示所有代码,因为我不知道问题出在哪里” 制作SSCCE的过程中往往会显示问题的根源!我投票支持@MadProgrammer 的建议。

标签: java swing jlist gridbaglayout


【解决方案1】:

Emm...现在很难找出导致问题的原因,所以首先我建议您在继续查找错误之前阅读this tutorial...

至于此刻,我只是假设问题实际上可能来自布局管理器或这个方向的东西......尝试使用包含面板(或您使用的组件......)的 JList 布局管理器.似乎现在您正在使用某种 absolute one,因此将其更改为比如说 FlowLayout。

作为另一个提示,检查 ListModel 是否添加了空元素?

如需更多建议,希望能看到更多代码...


报告是否有帮助

【讨论】:

    【解决方案2】:

    我想我已经找到了问题,但我不知道是什么原因造成的:首先,我的书以 xml 文件保存在磁盘上的一个文件夹(称为 Library)中;现在如果我删除这个文件夹,以便启用按钮创建库,JList 似乎是正常大小(显示 8 行)。即使我添加书籍,JList 保持不变,这很好。当我尝试实际更改已创建的 xml 文件时出现问题,因为默认情况下该文件看起来像这样

    <?xml version="1.0" encoding="UTF-8"?>
    <book name="name" author="author" isbn="isbn" />`
    

    如果我做到这一点

    <?xml version="1.0" encoding="UTF-8"?>
    <book name="name" author="" author="" >
    <chapter title="chapter1">
        <paragraph>
            <sentence>sentence1</sentence>
            <sentence>sentence1</sentence>
            <sentence>sentence1</sentence>
            <sentence>sentence1</sentence>
        </paragraph>
    
    </chapter>
    </book>
    

    JList 显示搞砸了。

    如果我这样做:

    <?xml version="1.0" encoding="UTF-8"?>
    <book name="fadsf" author="" isbn="" >
        <chapter title="chapter1">
             <paragraph>
                <sentence>sentence1</sentence>
                <sentence>sentence1</sentence>
                <sentence>sentence1</sentence>
        </paragraph>
        </chapter>
    </book>
    

    它工作正常。 如果我添加第四句标签,事情会变得很糟糕。

    【讨论】:

    • 我不知道为什么,但它似乎可以通过使框架更大并设置列表 list.setVisibleRowCount(8) 的最小行数来工作; frame.setSize(400, 500);
    • 你使用BorderLayout吗?我不确定您在问题中显示的图像是否包含“北”中的宽面板,对吗?因此,请尝试将 FlowLayout 设置为北面板,或者如果我弄错布局管理器,请纠正我,因为图像不太清楚:S
    • 我正在使用 GridBagLayout,正如您在图片中看到的那样,我故意调整了窗口的大小以表明它没有改变。无论如何,它似乎可以按我的意愿工作,所以问题解决了:)。
    • 实际上,这基本上不应该依赖于 JFrame 静态比例,即使你使用 pack() 方法它也应该工作:S 所以问题应该更深一些......所以我可以推荐不要在 JFrame 中直接将布局管理器用作 GridBagConstraints,而是将其用作附加管理器;尝试将 GridLayout 作为基础...
    猜你喜欢
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    相关资源
    最近更新 更多