Java JList 选择项多且运行后能显示当前选择项
package com.view;
import java.awt.*;import javax.swing.*;
public class test extends JFrame {
private final JPanel jcp; private final JScrollPane scp; private final JList list; // 主函数 public static void main(String[] args) { // 新建窗体 test frame = new test(); // 显示窗体 frame.setVisible(true); }
public test() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体大小 setSize(new Dimension(100,350)); setLocationRelativeTo(null); // 根面板 jcp = new JPanel(); // 设置布局 jcp.setLayout(new BorderLayout()); setContentPane(jcp); // 滚动条 scp = new JScrollPane(); scp.setSize(new Dimension(100,350)); jcp.add(scp); // 列表数组 int tol = 100; final String[] strs = new String[tol]; for(int i=0;i<tol;i++){ strs[i] = (i+1)+""; } // 新建JList列表 list = new JList(); // 设置列表模型 list.setModel(new AbstractListModel() { String[] values = strs; public int getSize() { return values.length; } public Object getElementAt(int index) { return values[index]; } }); // 选择值为50的一条 list.setSelectedValue("50", true); // 单选模式 list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 显示列表 scp.setViewportView(list); // 添加到根面板中部 jcp.add(scp, BorderLayout.CENTER); }}
问题:默认运行后无法看到选择条,需要往下接找到50,才能看到选择条;要求程序运行后将50一项出现在JList中的第一行(也不一定就第一行,只要能显示在窗体中即可)。
以下是运行后的图: 展开
这个可以实现的,如图
代码如下,最后几行我添加的
import java.awt.*;
import javax.swing.*;
public class test extends JFrame {
private final JPanel jcp;
private final JScrollPane scp;
private final JList list;
// 主函数
public static void main(String[] args) {
// 新建窗体
test frame = new test();
// 显示窗体
frame.setVisible(true);
}
public test() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置窗体大小
setSize(new Dimension(100, 350));
setLocationRelativeTo(null);
// 根面板
jcp = new JPanel();
// 设置布局
jcp.setLayout(new BorderLayout());
setContentPane(jcp);
// 滚动条
scp = new JScrollPane();
scp.setSize(new Dimension(100, 350));
jcp.add(scp);
// 列表数组
int tol = 100;
final String[] strs = new String[tol];
for (int i = 0; i < tol; i++) {
strs[i] = (i + 1) + "";
}
// 新建JList列表
list = new JList();
// 设置列表模型
list.setModel(new AbstractListModel() {
String[] values = strs;
public int getSize() {
return values.length;
}
public Object getElementAt(int index) {
return values[index];
}
});
// 选择值为50的一条
list.setSelectedValue("50", true);
// 单选模式
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// list.setFocusable(true);
// 显示列表
// getContentPane().add(list);
scp.setViewportView(list);
// 添加到根面板中部s
jcp.add(scp, BorderLayout.CENTER);
//新添加的代码
int i = list.getSelectedIndex();
Rectangle rect = list.getCellBounds(i, i);
scp.getViewport().scrollRectToVisible(rect);
}
}