gpt4 book ai didi

java - JScrollPane 使我的 JList 单元格的宽度属性无效

转载 作者:行者123 更新时间:2023-12-01 05:24:03 25 4
gpt4 key购买 nike

我有一个JFrame,它仅由JList组成,JList有自己的单元格渲染器,在单元格渲染器中有一个JList>JTextPane 返回时具有自定义尺寸。自定义尺寸会导致该文本 Pane 的行被换行。

textPane.setSize(WIDTH, HEIGHT);

现在我想让这个 JList 可滚动,因此我将其包装到 JScrollPane 组件中,但这会使我在单元格渲染器中定义的宽度约束无效。在 JScrollPane 中强制执行宽度约束的最佳方法是什么?

setSize(FRAME_WIDTH, FRAME_HEIGHT);
setLayout(new BorderLayout());

DefaultListModel<Status> listModel = new DefaultListModel<Status>();
JList<Status> list = new JList<>(listModel);
list.setLayout(new BorderLayout());
list.setSize(FRAME_WIDTH, FRAME_HEIGHT);
list.setCellRenderer(new MyCellRenderer());
// wrap the list with a JScrollPane
add(new JScrollPane(list), BorderLayout.CENTER);

最佳答案

Cell 的渲染操作是由 javax.swing.plaf.basic.BasicListUI 类完成的,并且无论您设置的大小如何,它都会绘制整个案例单元格渲染器。您可以深入研究 BasicListUI 类的源代码以了解其工作原理。

我猜你只是为了确保单元格的内容可以全部显示。在这种情况下,您可以为列表添加水平滚动条。为此,请获取列表的首选宽度。

如下:

public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setSize(800, 600);

JList list = new JList(new Object[]{ "11", "22" })
{
@Override
public Dimension getPreferredSize()
{
return new Dimension(1000, 800);
}
};
frame.getContentPane().add(new JScrollPane(list), BorderLayout.CENTER);

frame.setVisible(true);
}

关于java - JScrollPane 使我的 JList 单元格的宽度属性无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9935469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com