2017-06-21 2 views
0

J'essaye de créer un programme simple qui prend l'entrée dans un JTextArea et le place ensuite dans un JList (quand enter est pressé avec JTextArea focalisé). Le problème est que pendant que le texte est enregistré dans ArrayList dans la classe Model, il n'est pas visible dans le JList. Une solution serait grandement appréciée.Comment apporter des modifications au modèle show dans JList

Classe principale:

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()); 
     } 
    }); 

Modèle Classe:

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); 
    } 

J'ai entendu dire que l'utilisation des méthodes et fireIntervalAdded fireIntervalRemoved fixerait mon problème, mais ce n'est pas le cas. Peut-être que je ne les utilise pas correctement?

+0

.................. bonjour? S'il vous plaît laissez-nous savoir si la réponse a aidé/résolu votre problème. –

+0

Pourquoi créez-vous un ListModel personnalisé? Utilisez simplement le DefaultListModel. – camickr

Répondre

1

Vous vous tirer une balle dans le pied avec ce code:

@Override 
public void addListDataListener(ListDataListener l) { } 

@Override 
public void removeListDataListener(ListDataListener l) { } 

AbstractListModel a déjà ces méthodes, et en les remplaçant, vous empêchez la vue (votre JList) d'écouter et de répondre aux changements dans le modèle. Supprimez ces méthodes vides ou appelez la méthode du super en leur sein, et votre code devrait fonctionner.