2015-06-27 43 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)。 –