【问题标题】:how to set the selected item in combobox and set the equivalent value in txtfield如何在组合框中设置所选项目并在文本字段中设置等效值
【发布时间】:2014-06-25 05:09:43
【问题描述】:

我试图弄清楚如何设置我的代码,以便在组合框中选择一个选项时,它也会更改文本字段的文本。据我了解,它涉及一个称为项目侦听器的东西,但我们在课堂上没有讨论任何关于它的内容。

在组合框的值中还有一个等价的值,例如 juan = '123456'

我尝试了事件监听器,但仍然没有得到组合框的值

有人可以帮忙提前谢谢

【问题讨论】:

  • 考虑提供一个runnable example 来证明您的问题,这将减少猜测工作并产生更好的响应
  • == 不是您比较 String 的方式,但是,ItemEvent#getStateChange 返回一个 int,它指示事件是描述选择还是取消选择事件
  • combo1.addItemListener( new ItemListener(){ public void itemStateChanged(ItemEvent event){ if(event.getStateChange()=='juan'){ def juan = '1223312123' } } }) 标签'令牌',边界:[10,735,200,20]; textField id:'trackerId',text:'$juan',bounds:[170,735,200,20]
  • 这是我的代码,我想将值放在 txtfield 中,即 12223312123

标签: java swing textfield jcombobox


【解决方案1】:

首先查看How to Use Combo Boxes,尤其是Handling Events on a Combo Box,您还应该引用JavaDocs

例如

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JTextField;
import javax.swing.ListCellRenderer;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;

public class ComboBoxTest {

    public static void main(String[] args) {
        new ComboBoxTest();
    }

    private JComboBox<Product> cbProduts;
    private JTextField tfSku;

    public ComboBoxTest() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                DefaultComboBoxModel<Product> productModel = new DefaultComboBoxModel<>();
                productModel.addElement(new Product("Bananas", "1234"));
                productModel.addElement(new Product("Apples", "56789"));
                productModel.addElement(new Product("Pears", "00001"));
                productModel.addElement(new Product("Grapes", "00002"));

                cbProduts = new JComboBox<>(productModel);
                cbProduts.setRenderer(new ProductListCellRenderer());
                tfSku = new JTextField(5);

                cbProduts.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        Product p = (Product) cbProduts.getSelectedItem();
                        if (p != null) {
                            tfSku.setText(p.getSKU());
                        } else {
                            tfSku.setText(null);
                        }
                    }
                });

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new GridBagLayout());
                frame.add(cbProduts);
                frame.add(tfSku);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class Product {

        private final String description;
        private final String sku;

        public Product(String description, String sku) {
            this.description = description;
            this.sku = sku;
        }

        public String getDescription() {
            return description;
        }

        public String getSKU() {
            return sku;
        }

    }

    public static class ProductListCellRenderer extends DefaultListCellRenderer {

        @Override
        public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {

            if (value instanceof Product) {
                value = ((Product)value).getDescription();

            }
            super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
            return this;

        }

    }

}

【讨论】:

    【解决方案2】:
    private void jComboBox1ItemStateChanged(java.awt.event.ItemEvent evt) {                                            
        txt1.setText((String) jComboBox1.getSelectedItem());
    }     
    

    【讨论】:

    • 假设您的设计中有一个文本字段,变量名称为“txt1”。 getSelectedItem 返回一个必须类型转换为字符串的对象
    • 另外请记住,itemChanged 可能会在短时间内连续调用多次,指示选择/取消选择事件...
    猜你喜欢
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2013-06-08
    • 1970-01-01
    • 2012-09-18
    • 2011-02-21
    • 1970-01-01
    相关资源
    最近更新 更多