我想知道是否有办法检索已添加到 JList 的所有元素的列表。例如,我希望 JList 从自定义单元格渲染器返回一个数组或字符串或 JLabels 列表。
问问题
34984 次
5 回答
4
是的当然。你getElementAt()
有一个循环。
例子:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.WindowConstants;
public class Jlist {
JFrame frame;
JList<String> list;
JButton button;
public Jlist(){
init();
}
public void init(){
frame = new JFrame("Sample");
frame.setSize(300, 300);
frame.setLayout(new BorderLayout(30, 30));
DefaultListModel<String> model = new DefaultListModel<>();
model.addElement("A");
model.addElement("B");
model.addElement("C");
model.addElement("D");
model.addElement("E");
list = new JList<>();
list.setModel(model);
JScrollPane pane = new JScrollPane(list);
pane.setViewportView(list);
button = new JButton("Get");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
buttonActionPerformed();
}
});
frame.add(pane, BorderLayout.NORTH);
frame.add(button, BorderLayout.CENTER);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public void buttonActionPerformed(){
for(int i = 0; i< list.getModel().getSize();i++){
System.out.println(list.getModel().getElementAt(i));
}
}
public static void main(String[] args) {
new Jlist();
}
}
于 2017-06-07T17:56:51.220 回答
1
试试这个...
String[] myArray = new String[50];
for (int i = 0; i < jList1.getModel().getSize(); i++) {
myArray[i] = String.valueOf(jList1.getModel().getElementAt(i));
}
于 2017-08-10T11:11:57.023 回答
1
我还没有看到任何人使用最简洁的方式来做到这一点。假设您使用的是 Java 8+:
IntStream.range(0,listModel.size()).mapToObj(listModel::get).collect(Collectors.toList());
我个人更喜欢它而不是任何循环方法。
于 2019-03-25T11:45:53.693 回答
0
我们还可以使用消息对话框从 JList(命名)myL 中获取元素,因此您可以使用以下方法对 JButton 对象执行操作。
String item = myL.getSelectedValue();
if( item == null ){
JOptionPane.showMessageDialog(null, "Not selected yet");
}else{
JOptionPane.showMessageDialog(null, item);
}
于 2019-12-11T07:46:44.747 回答