2015-06-27 71 views
-1

好吧我想要做的是允許用戶爲自己創建一個列表,他們在TextField中輸入的內容將會在Jlist中顯示,但是我的問題在於如果我輸入換句話說,TextField的輸出是追加或替換已經存在的其他單詞,它假設在另一個單詞下面,並保存在那裏有誰能幫助我?Java JList問題

public lala(){ 

    b2 = new JButton("ADD"); 
    b2.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent e){ 
     model.removeAllElements(); 
     list1.setModel(model); 

     } 
    }); 

    b3 = new JButton("MOVE"); 
    b3.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent e){ 
      model = new DefaultListModel<String>(); 
      model.addElement(field.getText()); 
      list.setModel(model); 
      field.setText(""); 

     } 
    }); 

    list = new JList<String>(); 
    list.setFixedCellHeight(10); 
    list.setFixedCellWidth(10); 
    list.setVisibleRowCount(10); 
    list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 

    scroll = new JScrollPane(list); 
    scroll.setPreferredSize(new Dimension(100,100)); 

    field = new JTextField(19); 
    field.setToolTipText("Input Text Area Here"); 
    field.setFont(new Font("Corier",Font.BOLD,20)); 
    field.setBackground(Color.BLACK); 
    field.setForeground(Color.RED); 
    field.setDragEnabled(true); 

    panel = new JPanel(); 
    panel.setBackground(Color.BLACK); 

    panel.add(b3); 
    //panel.add(b2); 
    panel.add(field); 
    panel.add(scroll); 
    add(panel); 

     } 
    } 
+1

爲了更快得到更好的幫助,請發佈[MCVE](http://stackoverflow.com/help/mcve)(最小完整可驗證示例)或[SSCCE](http://www.sscce.org/)(短,獨立,正確的例子)。 –

+1

'field.setFont(new Font(「Corier」,Font.BOLD,20));'這裏沒有'Corier'字體,雖然可能有'Courier'字體。 OTOH我更喜歡使用邏輯字體,如['Font.MONOSPACED'](https://docs.oracle.com/javase/8/docs/api/java/awt/Font.html#MONOSPACED)以實現跨平臺的健壯性。 –

回答

3

你的問題是,你正在創建的事件偵聽器的每個動作一個全新的DefaultListModel

您需要在用戶按下按鈕時向其聲明全局DefaultListModel和addElement()

這也許能夠幫助你指明正確的方向:

public class Examples { 

    private DefaultListModel modelList; 
    private JList list; 
    private JButton button; 
    private JTextField field; 

    public Examples() { 
     modelList = new DefaultListModel(); 
     list = new JList(modelList); 
     button = new JButton("Add To List"); 
     field = new JTextField(); 
     init(); 
    } 

    private void init() { 
     button.addActionListener((ActionEvent e) -> { 
      modelList.addElement(field.getText()); 
      // !! list.setModel(modelList); 
      field.setText(""); 
     }); 
    } 

} 

在這裏,我們已經註冊了DefaultListModel作爲一個實例字段我們Examples類。

然後,我們使用lambda表達式註冊一個新的偵聽器,並使用該字段的文本更新modelList,並將modelList設置爲JList的模型。

+0

爲什麼在ActionListener中重新設置模型列表?該列表已被設置爲同一模型。我評論說,因爲這看起來完全沒有必要。我還刪除了「全局變量」,因爲Java沒有這些,而是​​「實例字段」似乎更貼近。 –

+0

如果它幫助解決問題,請[接受答案](http://meta.stackexchange.com/a/5235/155831)。 –