2017-07-07 1 views
0

Ce que j'essaie de faire, c'est quand j'appuie sur le bouton "Supprimer", il va supprimer l'élément que j'ai sélectionné dans le JComboBox. Donc, une fois que j'ai supprimé tous les éléments, j'ai un autre bouton appelé "Reset" où tous les éléments qui ont été supprimés seront à nouveau dans le JComboBox et il est possible d'avoir une méthode de restauration au lieu d'avoir à rajouter chaque modèle programme réel a beaucoup de modèlesJava reAjouter des éléments qui ont été supprimés de JComboBox

C'est ce que j'ai essayé, mais il ne fonctionne pas de suggestions comment cela peut-il être fait?

public class Testing{ 

    JFrame frame; 
    JPanel panel; 
    JButton remove,reset; 
    JComboBox box; 
    final DefaultComboBoxModel items = new DefaultComboBoxModel(new String[] 
    { 
     "-","Database System","Computer Fundamentals", 
     "Computer Maths","Internet Web Tech","Tertiary English 1"        
    }); 

    public void display() 
    { 
     frame = new JFrame(); 
     panel = new JPanel(); 

     box = new JComboBox(); 
     box.setModel(items); 
     remove = new JButton("Remove"); 
     reset = new JButton("Reset"); 

     remove.addActionListener((ActionEvent e)->{ 
     box.removeItem(box.getSelectedItem()); 
     }); 

     reset.addActionListener((ActionEvent e)->{  
     System.out.println("Reset"); 
     box.setModel(items); 
     box.revalidate(); 
     box.repaint(); 

     }); 

     panel.revalidate(); 
     panel.repaint(); 
     panel.add(box); 
     panel.add(remove); 
     panel.add(reset); 
     frame.add(panel); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(300,300); 
    } 

    public static void main(String[] args) 
    { 
     TestingProgram te = new TestingProgram(); 
     te.display(); 
    } 
} 
+0

ajoutez une instruction d'impression à l'intérieur du ActionListener de réinitialisation pour vous assurer qu'il est le tir –

+0

oui j'ajouté en fait et il tire –

Répondre

0

Je l'ai corrigé. Voici le nouveau code:

public class Test{ 

    JFrame frame; 
    JPanel panel; 
    JButton remove,reset; 
    JComboBox box; 
    final DefaultComboBoxModel items = new DefaultComboBoxModel(new String[] 
    { 
     "-","Database System","Computer Fundamentals", 
     "Computer Maths","Internet Web Tech","Tertiary English 1"        
    }); 
    public DefaultComboBoxModel getClone(DefaultComboBoxModel items) { 
     DefaultComboBoxModel clone = new DefaultComboBoxModel(); 
     for(int i = 0;i<items.getSize();i++) { 
      clone.addElement(items.getElementAt(i)); 
     } 
     return clone; 
    } 
    public void display() 
    { 
     frame = new JFrame(); 
     panel = new JPanel(); 

     box = new JComboBox(); 
     box.setModel(getClone(items)); 
     remove = new JButton("Remove"); 
     reset = new JButton("Reset"); 

     remove.addActionListener((ActionEvent e)->{ 
     box.removeItem(box.getSelectedItem()); 
     }); 

     reset.addActionListener((ActionEvent e)->{  


     box.setModel(getClone(items)); 


     }); 

     panel.revalidate(); 
     panel.repaint(); 
     panel.add(box); 
     panel.add(remove); 
     panel.add(reset); 
     frame.add(panel); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(300,300); 
    } 

    public static void main(String[] args) 
    { 
     Test te = new Test(); 
     te.display(); 
    } 
} 

Le problème est que vous utilisiez le même DefaultComboBoxModel, et chaque fois que vous avez retiré un élément de la JComboBox, il réellement retiré de votre article DefaultComboBoxModel. Cela signifie que lorsque vous réinitialisez le modèle, les éléments que vous avez supprimés ont également été supprimés de votre DefaultComboBoxModel, et il n'a rien fait

Ce nouveau code fait un clone de votre DefaultComboBoxModel et ajoute cela, donc lorsque vous supprimez des éléments de celui-ci, il n'a pas d'effet le final un

+0

cela fonctionne parfaitement merci beaucoup marquer mal Jamal cela comme résolu –

+0

@ dexter pas de problème :) –