0
JTextAreaで入力を受け取り、それをJListに配置する単純なプログラムを作成しようとしています。問題は、テキストがModelクラスのArrayListに保存されるうちに、JListに表示されないことです。修正は非常に高く評価されるだろう。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());
}
});
Modelクラス:
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)を防止している:あなたはこのコードを足で自分自身を撮影している
..................こんにちは?答えがあなたの問題を助け/解決したかどうかお知らせください。 –
カスタムListModelを作成する理由は何ですか?単にDefaultListModelを使用してください。 – camickr