gpt4 book ai didi

java - JList 边框在滚动时消失

转载 作者:行者123 更新时间:2023-11-29 05:56:15 24 4
gpt4 key购买 nike

enter image description here

我有五个列表(包含在 jscrollpane 中)添加到组布局中的 jpanel。列表的问题是当滚动条自动出现时,底部/顶部的边框消失(列表 2、3、4)。我如何确保所有列表看起来与第一个/最后一个列表具有相同的 w.r.t 边框?

我已经尝试使用 setViewPortBroder 设置视口(viewport)边界,但它并没有太大改变。 2、3、4 显示为浅边框,而其余列表为双边框。

编辑

添加代码示例:

您看到的每个列表都是使用以下代码创建的:

        MyJList jList = new MyJList(value);
jList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jList.setModel(listModel);
jList.setMinimumSize(new Dimension(135, 300));
jList.setMaximumSize(new Dimension(135, 300));
jList.clearSelection();
jList.setSelectionBackground(Color.darkGray);
jList.setSelectionForeground(Color.white);
jList.setBorder(new LineBorder(Color.darkGray, 1));
jList.setFixedCellHeight(30);
jList.setFixedCellWidth(100);
Font font = jList.getFont();
jList.addListSelectionListener(new ListListener());
return jList;

MyList 是JList 的扩展。除了存储一些与域相关的元数据外,它没有什么特别之处。并且,然后将列表添加到中间面板,如下所示:

private void layoutLists(JLabel[] labels, JList[] lists) {

panel.removeAll();
panel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.NONE;

JScrollPane[] jScrollPanes = new JScrollPane[lists.length];
for (int index = 0; index < lists.length; index++) {
jScrollPanes[index] = new JScrollPane(lists[index]);
jScrollPanes[index].setBorder(BorderFactory.createEmptyBorder());
jScrollPanes[index].setMinimumSize(new Dimension(135, 300));
jScrollPanes[index].setMaximumSize(new Dimension(135, 300));
jScrollPanes[index].setPreferredSize(new Dimension(135, 300));
}

for (int index = 0; index < labels.length; index++) {
gbc.gridx = index;
gbc.gridy = 0;
gbc.insets = new Insets(8, 8, 8, 8);
panel.add(labels[index], gbc);
gbc.gridy = 1;
if (index == labels.length - 1) {
gbc.insets = new Insets(8, 8, 8, 13);
}
panel.add(jScrollPanes[index], gbc);
}}

最佳答案

内部(JList)边框的顶部/底部部分不可见的解释是......如果出现垂直滚动条(列表被滚动关闭)它们不可见

如果你坚持,要么:

  • 切换边框 - 列表本身为空,scrollPane 上为 lineBorder 或
  • 设置scrollPane的viewportBorderProperty为lineBorder

注意:不建议修改默认的 LAF 设置 - 组件有无边框的位置应留给 ui,以保证整个应用程序的视觉效果一致。将左边框线放在 scrollPane 的垂直滚动条旁边(外部或内部)看起来也不太好。

编辑

刚刚注意到您已经尝试了第二个选项(并且对结果不满意:-) 但是然后:如果滚动条可见,您想要垂直边框线在哪里?无论如何,回到注意点:结果高度依赖于 LAF ...

关于java - JList 边框在滚动时消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11999960/

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