【问题标题】:Java ScrollPane And JListJava ScrollPane 和 JList
【发布时间】:2015-09-14 23:14:20
【问题描述】:

我遇到了问题,似乎无法解决。

我创建了两个列表,list1 持有和在构造函数之外初始化的数组,list2 没有任何内容。

我似乎真的无法解决的一个问题是,当我通过单击添加按钮在list1 中选择一个单词时,它会显示在list2 中,但每次我尝试选择另一个时都会出于某种奇怪的原因list1 中的值,它将替换 list2 中已经存在的值。我已经尝试了所有方法,但没有任何效果。

我遇到的另一个问题是,在list2 中,当我输入一个长于列表宽度的单词时,整个单词都不会显示。它只显示几个单词和单词末尾的三个点。我在其中设置了一个滚动窗格。

谁能帮我解决这个问题???

private String[] c = {"blue","white","cyan","darkGray","green","gray","black,"d","purple","orange","cyan"};    

public lala(){

model = new DefaultListModel();

list1 = new JList(c);
list1.setVisibleRowCount(10);
list1.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);   


b2 = new JButton("ADD");
b2.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        list.setListData(list1.getSelectedValues());

    }
});

b3 = new JButton("MOVE-->>");
b3.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
          model.addElement(field.getText());
          list.setModel(model);
          field.setText("");

    }
});

list2 = new JList();
list2.setFixedCellHeight(50);
list2.setFixedCellWidth(50);
list2.setVisibleRowCount(10);
list2.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

scroll = new JScrollPane(list2);
scroll.setPreferredSize(new Dimension(150,150));

field = new JTextField(19);
field.setToolTipText("Input Text Area Here");
field.setFont(new Font("Courier",Font.BOLD,20));
field.setBackground(Color.BLACK);
field.setForeground(Color.RED);
field.setDragEnabled(true);

panel = new JPanel();
panel.setBackground(Color.BLACK);

panel.add(b3);
panel.add(b2);
panel.add(field);
panel.add(new JScrollPane(list1));
panel.add(scroll);
add(panel);

   }
}

【问题讨论】:

  • 你的问题不太好理解。请提供您的完整代码,我一定可以解决您的问题。
  • 顺便说一句,您在black 之后很怀念。

标签: java swing jscrollpane jlist


【解决方案1】:

我似乎确实无法解决的一个问题是,当我通过单击添加按钮在 list1 中选择一个单词时,它会显示在 list2 中,但由于某些奇怪的原因,每次我尝试在 list1 中选择另一个值时,它替换了 list2 中已经存在的值。

您的代码只会按照您的指示行事:

b2.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        list.setListData(list1.getSelectedValues());    
    }
});

在这里,您在列表中调用setListData(...),它完全用新数据替换了它保存的数据。而是获取 JList 的模型,然后简单地在模型上调用 addElement(...)

b2.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        DefaultListModel model = (DefaultListModel) list.getModel();
        model.addElement(list1.getSelectedValues());    
    }
});

我已经尝试了所有方法,但没有任何效果。

抱歉,您可能希望以后避免这样说,因为这显然不是真的。拍摄,您所要做的就是阅读JList Tutorial,因为那里的解释都很好。


关于,

另一个问题是,在 list2 中,当我输入一个比列表宽度更长的单词时,整个单词都不会显示。它只显示几个单词和单词末尾的三个点。我在其中设置了一个滚动窗格。

在 list2 上调用 setPrototypeCellValue(...),并传入一个足够大的字符串以容纳它将接收的字符串。


编辑
在您最近的 previous question 中已经告诉您 DefaultListModel 的 addElement(...) 方法,这让我摸不着头脑,想知道您为什么不在这里使用它。

【讨论】:

  • 非常感谢,我非常感谢您向我展示的内容,顺便说一下,我是 java swing 的初学者,所以现在正在学习 Jlist,我确实阅读了 Jlist 教程,只需要一点指导这个,我会记住不要再说“我什么都试过了”之类的话,java有时学起来很令人沮丧,但还是谢谢
  • @danielmohammed:在您最近的上一个问题中,您已经被告知addElement(...) 方法。请不要忽视给出的建议。
  • 是的,很抱歉,我知道有人告诉我这件事,但是在使用该公式期间,我从未想过使用该公式,我正在观看有关 JList 的教程,并看到正在教书的人写了那篇文章代码,所以我这样做就像我说是初学者一样
猜你喜欢
  • 1970-01-01
  • 2023-03-21
  • 2012-10-12
  • 2012-09-22
  • 2013-08-06
  • 2011-01-09
  • 1970-01-01
  • 2011-08-25
相关资源
最近更新 更多