[英]How to make changes to model show in JList
我正在嘗試創建一個簡單的程序,該程序在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已經具有這些方法,並且通過重寫它們,可以防止視圖(您的JList)偵聽和響應模型中的更改。 刪除這些空方法,或從它們中調用super的方法,您的代碼應該可以工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.