Java JList 选择项多且运行后能显示当前选择项

以下是原程序内容:packagecom.view;importjava.awt.*;importjavax.swing.*;publicclasstestextendsJ... 以下是原程序内容:

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中的第一行(也不一定就第一行,只要能显示在窗体中即可)。

以下是运行后的图:
展开
 我来答
R夏至未至H
2013-06-18 · TA获得超过469个赞
知道小有建树答主
回答量:273
采纳率:100%
帮助的人:352万
展开全部

这个可以实现的,如图

 

代码如下,最后几行我添加的

 

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);
 }
}

旧丶小梦
2013-06-18
知道答主
回答量:6
采纳率:0%
帮助的人:8686
展开全部
想显示在第一行,把想显示的放在数组的第一个位置就可以了
追问
Er……我这里的数字是有序排列的,你叫我改变它们的排序?在不改变排序下,能否实现?
追答
setSelectedValue之后加上:
int i=jList1.getSelectedIndex();
Rectangle rect=jList1.getCellBounds(i, i);
jList1.scrollRectToVisible(rect);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式