【问题标题】:Event for JComboBox array and show information at the JLabel ArrayJComboBox 数组的事件并在 JLabel 数组中显示信息
【发布时间】:2013-11-27 06:25:12
【问题描述】:

我有这样的 JComboBox 数组和 JLabel 数组 当我在每个 JComboBo 中选择值时,我将在这里做什么以使 JLabel 返回对应 例如当 comboBox[0].setSelectItem(4); label[0] 将得到文本为 4 当comboBox[4].setSelectedItem(2);标签[4] 将得到文本为 2

import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JComboBox;
import javax.swing.JLabel;

public class Example extends javax.swing.JFrame implements ItemListener {
    JComboBox[] comboBox = new JComboBox[5];
    JLabel[] label = new JLabel[5];

    public void test() {
        for (int i = 0; i < label.length; i++) {
            comboBox[i] = new JComboBox();
            label[i] = new JLabel();
            add(comboBox[i]);
            add(label[i]);
            for (int j = 0; j <= 10; j++) {
                comboBox[i].addItem(j);
            }
            comboBox[i].addItemListener(this);

        }
    }

    @Override
    public void itemStateChanged(ItemEvent e) {
        // What i will do here to make the JLabel return corresponding when I
        // select the values in each JComboBox

        /*
         * Example when comboBox[0].setSelectItem(4); the label[0] will get the
         * text is 4 when the comboBox[4].setSelectedItem(2); the lable[4] will
         * get the text is 2
         */
    }
}

请任何人帮助我:(

【问题讨论】:

  • “我有这样的 JComboBox 数组和 JLabel 数组”你有问题吗?跨度>
  • 问题是什么??
  • 对不起大家,我把问题放入代码中,在代码块的底部:D

标签: java arrays swing jcombobox itemlistener


【解决方案1】:

JComboBox 有方法

public int getSelectedIndex()

使用它来获取索引,将索引转换为字符串并设置为JLabel

【讨论】:

    【解决方案2】:

    1) 在

    的帮助下,您将组件直接添加到 JFrame

    add(comboBox[i]); add(label[i]); ,但在这种情况下,您的 JFrame 使用 BorderLayout 作为默认值,并且您始终将组件添加到中心位置,在这种情况下您只会看到一个组件。 Tutorial for LayoutManager.

    我建议您将标签和组合框添加到单独的面板中,然后将它们添加到 JFrame

    2) 你的Example 类实现了ItemListener,然后你将它添加到你的JComboBox,这是对的,但在这种情况下,你必须在itemStateChanged(ItemEvent e) 中循环相关JLabel。尝试将JLabel 作为参数的每个组合框添加单独的侦听器。

    3) 您可以将 constructorJComboBox 与数组参数一起使用,而不是将每个值添加到组合框。

    我更改了您的代码检查它:

    import java.awt.BorderLayout;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    
    import javax.swing.JComboBox;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    public class Test extends javax.swing.JFrame {
        JComboBox[] comboBox = new JComboBox[5];
        JLabel[] label = new JLabel[5];
    
        public void test() {
            JPanel labels = new JPanel();
            JPanel boxes = new JPanel();
            Object[] values = new Object[]{1,2,3,4,5,6,7,8,9,0};
            for (int i = 0; i < label.length; i++) {
                comboBox[i] = new JComboBox(values);
                label[i] = new JLabel(" ");
                boxes.add(comboBox[i]);
                labels. add(label[i]);
                comboBox[i].addItemListener(getListener(label[i]));
            }
            getContentPane().add(boxes,BorderLayout.SOUTH);
            getContentPane().add(labels,BorderLayout.NORTH);
            pack();
        }
    
        private ItemListener getListener(final JLabel jLabel) {
            return new ItemListener() {
    
                @Override
                public void itemStateChanged(ItemEvent arg0) {
                    if(arg0.getStateChange() == ItemEvent.SELECTED){
                        jLabel.setText(((JComboBox)arg0.getSource()).getSelectedItem().toString());
                    }
                }
            };
        }
    
        public static void main(String...strings ){
            Test test = new Test();
            test.test();
            test.setVisible(true);
        }
    }
    

    和输出:

    【讨论】:

    • 谢谢一百万谢谢这就是我想要的,真的谢谢你的支持
    猜你喜欢
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多