【问题标题】:Add an Action Listener [closed]添加一个动作监听器[关闭]
【发布时间】:2013-02-24 13:05:27
【问题描述】:

我创建了JListJTextField。在我的JList 中,我写了几个选择选项,我希望选择的选项名称出现在JTextField 中。

我需要在 jTextField2 动作监听器中编写什么代码,例如,如果我选择 Computer,它将在 JTextField

中显示 Computer

列表模型

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) {
    }
});

【问题讨论】:

    标签: java eclipse swing jcombobox mixing


    【解决方案1】:

    您需要添加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();
                }
            });
        }
    }
    

    【讨论】:

    • 这是不完整的:您 - 很可能 - 只想在选择更改准备好时更改文本字段,即 getValueIsAdjusting 返回 false。
    • @kleopatra 你的意思是jList1ValueChanged 会工作两次,并使用 MouseClicked 安装的 ValueChanged?
    • re: 两次? 当你尝试时发生了什么 ;-) re: mouseClicked 你在我上一条评论中读到我谈论的低级侦听器 ;-) 如果有语义侦听器,例如选择,请不要使用它们
    • @kleopatra 与 ValueIsAdjusting 一样两次 将使其触发两次。已编辑。这是您要指出的吗?
    【解决方案2】:

    这个怎么样:

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

    (并且 jTextField2 必须是final!)

    【讨论】:

    【解决方案3】:
    
    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()); } });

    【讨论】:

      猜你喜欢
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 2014-07-14
      • 1970-01-01
      • 2012-06-02
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      相关资源
      最近更新 更多