gpt4 book ai didi

java - 双重打印JList

转载 作者:行者123 更新时间:2023-12-02 11:50:02 24 4
gpt4 key购买 nike

我不确定为什么所有内容都打印两次。例如,如果您按“Male”,则程序将打印 MaleMale。这是一个更大程序的一部分:我想要性别(一个字符串)来存储最后的选择。这段代码是这样做的吗?

DefaultListModel toAdd = new DefaultListModel();
toAdd.addElement("Male");
toAdd.addElement("Female");
toAdd.addElement("Others");

JList list = new JList();
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setBorder(new TitledBorder(null, "How do you identify yourself?", `
TitledBorder.CENTER, TitledBorder.TOP, null, null));
list.setBackground(SystemColor.info);
list.setBounds(57, 85, 244, 97);
list.setModel(toAdd);
frame.getContentPane().add(list);

list.addListSelectionListener(new ListSelectionListener() {

public void valueChanged (ListSelectionEvent event) {
int lastSelIx = list.getMaxSelectionIndex();
gender = (String) list.getModel().getElementAt(lastSelIx);
System.out.print(gender);
}
);
}

最佳答案

一般来说,ListSelectionListener会生成两个事件,一个用于“取消选择”当前选定的项目/范围,另一个用于“选择”新的项目/范围。

如果您只对已选择的内容感兴趣,则可以使用 ListSelectionEvent#getValueIsAdjusting,如果有更多事件即将发生,它将返回 true 并且 false 如果没有更多相关事件发生(或者选择已变得稳定),例如...

import java.awt.EventQueue;
import java.awt.SystemColor;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.TitledBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class JavaApplication20 {

public static void main(String[] args) {
new JavaApplication20();
}

public JavaApplication20() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}

JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

DefaultListModel toAdd = new DefaultListModel();
toAdd.addElement("Male");
toAdd.addElement("Female");
toAdd.addElement("Others");

JList list = new JList();
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setBorder(new TitledBorder(null, "How do you identify yourself?", TitledBorder.CENTER, TitledBorder.TOP, null, null));
list.setBackground(SystemColor.info);
list.setModel(toAdd);
frame.getContentPane().add(new JScrollPane(list));

list.addListSelectionListener(new ListSelectionListener() {

public void valueChanged(ListSelectionEvent event) {
if (!event.getValueIsAdjusting()) {
int lastSelIx = list.getMaxSelectionIndex();
String gender = (String) list.getModel().getElementAt(lastSelIx);
System.out.println(gender);
} else {
// You can ignore this, I was just testing ;)
int lastSelIx = event.getFirstIndex();
String gender = (String) list.getModel().getElementAt(lastSelIx);
System.out.println(gender);
}
}
});
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

}

您可以阅读How to Write a List Selection Listener了解更多详情

关于java - 双重打印JList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47956706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com