我在 JScrollPane 中有一个 Jlist,并且我设置了一个原型值,这样它就不必计算大列表的宽度,而只需使用这个默认宽度。
现在,问题是 Jlist 出于某种原因用点 (...) 替换了元素的结尾,因此永远不会显示水平滚动条。
如何使用“包装”禁用?如果长元素比 Jlist 的宽度宽,那么长元素不会被点替换吗?
我在一个小示例应用程序中重现了这个问题。如果您不明白我的意思,请运行它:
import javax.swing.*;
import java.awt.*;
public class Test
{
//window
private static final int windowWidth = 450;
private static final int windowHeight = 500;
//components
private JFrame frame;
private JList classesList;
private DefaultListModel classesListModel;
public Test()
{
load();
}
private void load()
{
//create window
frame = new JFrame("Test");
frame.setSize(windowWidth, windowHeight);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setUndecorated(true);
frame.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);
//classes list
classesListModel = new DefaultListModel();
classesList = new JList(classesListModel);
classesList.setPrototypeCellValue("prototype value");
classesList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
classesList.setVisibleRowCount(20);
JScrollPane scrollClasses = new JScrollPane(classesList, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
for (int i = 0; i < 200; i++)
{
classesListModel.addElement("this is a long string, does not fit in width");
}
//panel
JPanel drawingArea = new JPanel();
drawingArea.setBackground(Color.white);
drawingArea.add(scrollClasses);
frame.add(drawingArea);
//set visible
frame.setVisible(true);
}
}
即使您强制水平滚动条,您仍然无法滚动,因为元素实际上并不比宽度更宽,因为点 (...) 环绕。
提前致谢。