2013-02-24 171 views
-1

我创建了一个JListJTextField。在我的JList中,我写了几个选择选项,并且我希望所选选项名称出现在JTextField中。添加动作监听器

什么代码,我需要在jTextField2动作监听这么写,例如,如果我选择计算机它会显示电脑JTextField

的ListModel

jList1Model = new DefaultComboBoxModel (new String[] { "Computer","Mouse","HDD"}); 

jList1 = new JList(); 
getContentPane().add(jList1); 
jList1.setModel(jList1Model); 
jList1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
jTextField2 = new JTextField(); 

getContentPane().add(jTextField2); 
jTextField2.setEditable(false); 
jTextField2.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent evt) { 
    } 
}); 

回答

-1

javax.swing.JComboBox cboSelect = new javax.swing.JComboBox(); 
javax.swing.JTextField tfResult = new javax.swing.JTextField(); cboSelect.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Computer", "Mouse", "HDD" })); cboSelect.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { tfResult.setText(cboSelect.getSelectedItem().toString()); } });
+0

JList在哪里? – 2013-02-24 13:27:59

1

这个怎么样:

jList1t.addListSelectionListener(new ListSelectionListener() { 
     public void valueChanged(ListSelectionEvent e) { 
      jTextField2.setText((String) jList1.getSelectedValue()); 
     } 
    }); 

(和jTextField2中必须final!)

+0

看到我的评论http://stackoverflow.com/a/15052245/203657 – kleopatra 2013-02-24 14:05:51

2

您需要添加ListSelectionListener这将在变化列表选择炒鱿鱼:

jList1.addListSelectionListener(new ListSelectionListener() { 
     public void valueChanged(ListSelectionEvent evt) { 
      jList1ValueChanged(evt); 
     } 
    }); 

ListSelectionEvent

private void jList1ValueChanged(ListSelectionEvent evt) { 

    if(!jList1.getValueIsAdjusting()) 
    { 
    jTextField2.setText((String) jList1.getSelectedValue()); 
    } 
    } 

这里是一个简短的例子:

import javax.swing.AbstractListModel; 
import javax.swing.JFrame; 
import javax.swing.JList; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 
import javax.swing.WindowConstants; 
import javax.swing.event.ListSelectionEvent; 
import javax.swing.event.ListSelectionListener; 

public class JListTest { 
    private JList jList1; 
    private JPanel jPanel1; 
    private JTextField jTextField2; 
    private JFrame frame; 


    public JListTest() { 
     initComponents(); 
    } 

    private void initComponents() { 

     jPanel1 = new JPanel(); 
     jList1 = new JList(); 
     jTextField2 = new JTextField(); 
     frame =new JFrame(); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 

     jList1.setModel(new AbstractListModel() { 
      String[] strings = { "Computer", "Mouse", "HDD" }; 
      public int getSize() { return strings.length; } 
      public Object getElementAt(int i) { return strings[i]; } 
     }); 
     jList1.addListSelectionListener(new ListSelectionListener() { 
      public void valueChanged(ListSelectionEvent evt) { 
       jList1ValueChanged(evt); 
      } 
     }); 


     jTextField2.setText("jTextField1"); 
     jPanel1.add(jList1); 
     jPanel1.add(jTextField2); 
     frame.add(jPanel1); 
     frame.pack(); 
     frame.setVisible(true); 


    } 

    private void jList1ValueChanged(ListSelectionEvent evt) { 

    if(!jList1.getValueIsAdjusting()) 
    { 
    jTextField2.setText((String) jList1.getSelectedValue()); 
    } 
} 


    public static void main(String args[]) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new JListTest(); 
      } 
     }); 
    } 
} 
+0

这是不完整的:你 - 最有可能 - 只想更改文本字段,如果选择更改已准备就绪,即getValueIsAdjusting返回false。 – kleopatra 2013-02-24 14:04:52

+0

@kleopatra你的意思是'jList1ValueChanged'会工作两次,并且使用MouseClicked insted的ValueChanged? – 2013-02-24 14:07:42

+0

re:_two times?_当你尝试时发生了什么;-) re:_mouseClicked_在我最后的评论中,你读过我在谈论一个低级别的监听器;-)如果有语义监听器,请选择 – kleopatra 2013-02-24 14:11:36