gpt4 book ai didi

java - 如何更改 JList 中的模型显示

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

我正在尝试创建一个简单的程序,它接受 JTextArea 中的输入,然后将其放入 JList 中(当在 JTextArea 焦点上按下 Enter 时)。问题是,虽然文本保存在 Model 类的 ArrayList 中,但它在 JList 中不可见。修复将不胜感激。

主类:

 public class Main {

public static void main(String[] args) {

Model model = new Model();
JFrame frame = new JFrame();
JPanel panel = new JPanel(new BorderLayout());
JTextField text = new JTextField();
JList list = new JList(model);
JScrollPane scroll = new JScrollPane(list);

frame.setSize(300, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);

frame.add(panel);
panel.add(scroll, BorderLayout.CENTER);
panel.add(text, BorderLayout.PAGE_END);

text.setText("Enter Text");

frame.setVisible(true);

text.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
model.add(text.getText());
}
});

模型类:

public class Model extends AbstractListModel{

List<String> list = new ArrayList<>();

@Override
public int getSize() {
return list.size();
}

@Override
public Object getElementAt(int index) {
return list.get(index);
}

@Override
public void addListDataListener(ListDataListener l) { }

@Override
public void removeListDataListener(ListDataListener l) { }

public void add(String x){
int size = list.size();
list.add(size, x);
fireIntervalAdded(this, size, size);
}

void remove(int index) {
list.remove(index);
fireIntervalRemoved(this, index, index);
}

我听说使用 fireIntervalAdded 和 fireIntervalRemoved 方法可以解决我的问题,但事实并非如此。也许我没有正确使用它们?

最佳答案

使用以下代码是搬起石头砸自己的脚:

@Override
public void addListDataListener(ListDataListener l) { }

@Override
public void removeListDataListener(ListDataListener l) { }

AbstractListModel 已经具有这些方法,通过重写它们,您可以防止 View (您的 JList)监听和响应模型中的更改。删除这些空方法,或者从它们内部调用 super 方法,您的代码应该可以工作。

关于java - 如何更改 JList 中的模型显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44684809/

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