2017-07-07 77 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

@德克斯特沒問題:) –

相關問題