2014-01-20 50 views
0

我想從這個程序是當按下第一個按鈕時,它會顯示分配的數組,當按下第二個按鈕是清除列表並顯示分配的數組,我一直在尋找解決方案在線和許多人建議使用列表模型,任何提示都表示讚賞。如何更新JList?


import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 

public class tester extends JFrame{ 
private JList list = new JList(); 
private JButton b1 = new JButton("Array1"); 
private JButton b2 = new JButton("Array2"); 

public tester(){ 
    final String [] Array1 = {"1", "2", "3", "4"}; 
    final String [] Array2 = {"one", "two", "three", "four"}; 

    JPanel p1 = new JPanel(); 
    p1.add(new JScrollPane(list)); 
    p1.add(b1); 
    p1.add(b2); 
    add(p1, BorderLayout.CENTER); 

    b1.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e){ 
      DefaultListModel Model1 = (DefaultListModel)list.getModel(); 
      for(int i = 0; i < Array1.length; i++){ 
       Model1.addElement(Array1[i]); 
      } 
     } 
    }); 

    b2.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e){ 
      DefaultListModel Model2 = (DefaultListModel)list.getModel(); 
      for(int i = 0; i < Array2.length; i++){ 
       Model2.addElement(Array2[i]); 
      } 
     } 
    }); 

} 

public static void main (String [] args){ 
    tester t1= new tester(); 
    t1.pack(); 
    t1.setLocationRelativeTo(null); 
    t1.setTitle("Test"); 
    t1.setVisible(true); 
    t1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

} 
} 
+0

你面臨的問題是什麼?如果你問一個關於你的代碼的具體問題,這個帖子將是一個完美的候選人(並構成一個完美的問題),因爲它已經有一個MCVE –

回答

0

試試這個:

b1.addActionListener(new ActionListener(){ 
    @Override 
    public void actionPerformed(ActionEvent e){ 
     DefaultListModel Model1 = new DefaultListModel(); 
     for(int i = 0; i < Array1.length; i++){ 
      Model1.addElement(Array1[i]); 
     } 
     list.setModel(Model1); 
    } 
}); 

b2.addActionListener(new ActionListener(){ 
    @Override 
    public void actionPerformed(ActionEvent e){ 
     DefaultListModel Model2 = new DefaultListModel(); 
     for (String Array21 : Array2) { 
      Model2.addElement(Array21); 
     } 
     list.setModel(Model2); 
    } 
}); 
2

你得到ClassDCastException,因爲你想投(DefaultListModel)到一個模型,是不是DefaultListModel。首先,您需要模型來將列表設置爲DefaultListModel這樣

DefaultListModel model = new DefaultListModel(); 
    list.setModel(model); 

這將擺脫ClassCastException的,當你做到這一點

DefaultListModel Model1 = (DefaultListModel)list.getModel(); 

而且你沒有一個按鈕來清除,只能添加數組。所以,你想一個按鈕來清除,並在actionPerformed只是使用

model.removeAllElements(); 

這是你的代碼的重構版本,在這裏工作

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 

public class tester extends JFrame { 

    private JList list = new JList(); 
    private JButton b1 = new JButton("Array1"); 
    private JButton b2 = new JButton("Array2"); 
    private JButton clear = new JButton("Clear"); 
    private DefaultListModel model; 

    public tester() { 
     final String[] Array1 = {"1", "2", "3", "4"}; 
     final String[] Array2 = {"one", "two", "three", "four"}; 

     model = new DefaultListModel(); 
     list.setModel(model); 
     JPanel p1 = new JPanel(); 
     p1.add(new JScrollPane(list)); 
     p1.add(b1); 
     p1.add(b2); 
     p1.add(clear); 
     add(p1, BorderLayout.CENTER); 

     clear.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       model.removeAllElements(); 
      } 
     }); 
     b1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       DefaultListModel Model1 = (DefaultListModel) list.getModel(); 
       for (int i = 0; i < Array1.length; i++) { 
        Model1.addElement(Array1[i]); 
       } 
      } 
     }); 

     b2.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       DefaultListModel Model2 = (DefaultListModel) list.getModel(); 
       for (int i = 0; i < Array2.length; i++) { 
        Model2.addElement(Array2[i]); 
       } 
      } 
     }); 
    } 

    public static void main(String[] args) { 
     tester t1 = new tester(); 
     t1.pack(); 
     t1.setLocationRelativeTo(null); 
     t1.setTitle("Test"); 
     t1.setVisible(true); 
     t1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    } 
} 
0

爲您樣本

import java.awt.BorderLayout; 
import java.awt.Container; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.DefaultListModel; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JList; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 

public class Main { 
    private static int i = 1; 

    public static void main(String args[]) { 
     JFrame frame = new JFrame("Demo Frame/SuRu"); 
     Container contentPane = frame.getContentPane(); 
     Container contentPane2 = new JPanel(new GridLayout(3, 1)); 
     contentPane.setLayout(new BorderLayout()); 

     final DefaultListModel model = new DefaultListModel(); 
     final JList jList = new JList(model); 
     JButton addButton = new JButton("Add Element"); 
     JButton removeButton = new JButton("Remove Element"); 
     JButton removeAllButton = new JButton("Remove All"); 

     contentPane2.add(addButton); 
     contentPane2.add(removeButton); 
     contentPane2.add(removeAllButton); 
     contentPane.add(new JScrollPane(jList), BorderLayout.CENTER); 
     contentPane.add(contentPane2, BorderLayout.EAST); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setBounds(100, 100, 500, 350); 
     frame.setVisible(true); 

     addButton.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       model.addElement("Element " + i); 
       i++; 
      } 
     }); 
     removeButton.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       if (jList.getSelectedIndex() != -1) { 
        model.remove(jList.getSelectedIndex()); 
       } 
      } 
     }); 
     removeAllButton.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       model.removeAllElements(); 
      } 
     }); 

    } 
}