【发布时间】:2016-05-04 14:56:29
【问题描述】:
我正在尝试使用 JScrollPane 中的 DefaultListModel 处理通用 JList。但是,我看不到 JList。
这是课程:
字段滚动列表:
public class FieldScrollList<T> extends JScrollPane {
private DefaultListModel<T> listModel;
public int length () {
return listModel.size();
}
public FieldScrollList () {
setBorder(new TitledBorder(this.getClass().getSimpleName()));
setBackground(Color.PINK);
listModel = new DefaultListModel<>();
JList<T> jList = new JList<>(listModel);
add(jList);
jList.setBorder(new TitledBorder(jList.getClass().getSimpleName()));
}
public void clear () {
listModel.clear();
}
public void push(T t) {
listModel.add(length(),t);
}
public <C extends Collection<T>> void pushAll(C coll) {
coll.forEach(this::push);
}
public void pushAll(T[] coll) {
for (T t : coll) {
push(t);
}
}
}
这是使用它的类。在这个例子中,我是一个 FieldScrollList,它可以显示列表项:hi 和 hello。
public class test {
public static void main(String[] args) {
new Thread(() -> {
//---------------------------------- Content initialization ------------------
JFrame frame = new JFrame("Test");
JPanel panel = new JPanel();
FieldScrollList<String> list = new FieldScrollList<String>();
//---------------------------------- Strings initialization ------------------
ArrayList<String> strings = new ArrayList<>();
strings.add("Hello");
strings.add("Hi");
strings.forEach(list::push);
//---------------------------------- JPanel configuration --------------------
panel.setLayout(new GridLayout(1,1));
panel.add(list);
//---------------------------------- JFrame configuration --------------------
frame.add(panel);
frame.setPreferredSize(new Dimension(550,600));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.setVisible(true);
}).start();
}
}
结果是这样的:
边框和背景的目标是显示内容的位置和区域(视觉上)
我不明白为什么这些字段不显示
【问题讨论】:
-
你真的需要扩展
JScrollPane吗? -
我开始使用 JPanel,但我只需要能够将它用作组件。什么应该是最好的?
-
revalidate();repaint();添加jList后试试这个 -
@PierreAntoineGuillaume :我只需创建一个列表实例,然后添加一个
new JScrollPane(list);。事实上,add方法不会在JScrollPane中得到预期的结果,滚动窗格适用于 视口视图:docs.oracle.com/javase/tutorial/uiswing/components/… -
“什么应该是最好的?”
JScrollPane。但是没有必要仅仅为了使用一个实例而扩展该组件。很确定这是 @Berger 质疑的扩展部分。
标签: java swing jscrollpane jlist defaultlistmodel