2017-07-07 116 views
0

我想要做的是只要按下“删除”按钮,它就会删除我在JComboBox中选择的项目。所以一旦我删除所有的项目,我有另一个名为“重置”的按钮,其中所有已删除的项目将再次在JComboBox中,并且有可能有一个恢复方法,而不必重新添加每个模型,导致我的实际的程序有很多模型Java重新添加已从JComboBox中删除的项目

这是我所尝试过的,但它不工作任何建议如何做到这一点?

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

加复位的ActionListener内打印语句,以确保它的实际发射 –

+0

是的,我且将其被解雇 –

回答

0

我修好了。下面是新的代码:

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

的问题是,你使用相同DefaultComboBoxModel,每次你从JComboBox删除了一个文件时,它实际上是从你的DefaultComboBoxModel项删除它。这意味着,当你重置模型时,你删除的东西也从你的DefaultComboBoxModel中删除,并且它什么也没做

这个新代码使你的DefaultComboBoxModel克隆,并补充说,所以当你删除东西从它,它不会影响final一个

+0

它完美的作品非常感谢贾马尔生病纪念这个为解决 –

+0

@德克斯特没问题:) –

相关问题