JCombobox改变了另一个JCombobox [英] JCombobox change another JCombobox

查看:99
本文介绍了JCombobox改变了另一个JCombobox的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试组合2个jcomboboxes。 1个组合框用于显示类别的开销。第二个组合框是从文本文件中读取文件以显示产品类型。如果我改变第一个组合框,我希望第二个组合框会根据用户在第一个组合框中的选择而改变。

I'm trying to combine 2 jcomboboxes. 1 combobox is for showing category of expences. and second combobox is reading file from text file to show types of products. If I change first combobox I would like that second combobox will change based on what user select in the first one.

我是否还有机会加载其他组合框从文本文件?该子项目不是Arrays,但与之前相同,因为它位于代码底部的cboperson。

Is there any chance that i can still load the other combobox from text files? That subitems would not be Arrays but same as before as it is on the bottom of the code to cboperson.

已编辑的代码:

private JComboBox cboCategory;
private JComboBox cboPerson;
private JComboBox cboItem;
public String itemChange = "groceries.txt";

public ExpenditureTracker() {......


    String[] items = {"Select Item", "Groceries", "Bills", "Travelling", "Leasure", "Other"};
    mainComboBox = new JComboBox(items);
    mainComboBox.addActionListener(this);
    mainComboBox.addItemListener(this);
    //prevent action events from being fired when the up/down arrow keys are used
    //mainComboBox.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE);
    mainComboBox.setBounds(113, 138, 85, 20);
    importPanel.add(mainComboBox);


    subComboBox = new JComboBox();//  Create sub combo box with multiple models
    subComboBox.setPrototypeDisplayValue("XXXXXXXXXX"); // JDK1.4
    subComboBox.addItemListener(this);
    subComboBox.setBounds(113, 188, 85, 20);
    importPanel.add(subComboBox);


    String[] subItems1 = {"Select Color", "Red", "Blue", "Green"};
    subItems.put(items[1], subItems1);
    String[] subItems2 = {"Select Shape", "Circle", "Square", "Triangle"};
    subItems.put(items[2], subItems2);
    String[] subItems3 = {"Select Fruit", "Apple", "Orange", "Banana"};
    subItems.put(items[3], subItems3);
    String[] subItems4 = {"Select Fruit", "Apple", "Orange", "Banana"};
    subItems.put(items[4], subItems3);
    String[] subItems5 = {"Select Fruit", "Apple", "Orange", "Banana"};
    subItems.put(items[5], subItems3);


    loadDataTocboPerson();
}




private void loadDataToCboPerson() {
    Scanner fileReader = new Scanner(getClass().getResourceAsStream(
            itemChange));
    try {
        DefaultComboBoxModel model = new DefaultComboBoxModel();
        while (fileReader.hasNextLine()) {
            model.addElement(fileReader.nextLine());
        }
        cboItem.setModel(model);
    } finally {
        fileReader.close();
    }
}


推荐答案

for示例

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

public class ComboBoxTwo extends JFrame implements ActionListener, ItemListener {

    private static final long serialVersionUID = 1L;
    private JComboBox mainComboBox;
    private JComboBox subComboBox;
    private Hashtable<Object, Object> subItems = new Hashtable<Object, Object>();

    public ComboBoxTwo() {
        String[] items = {"Select Item", "Color", "Shape", "Fruit"};
        mainComboBox = new JComboBox(items);
        mainComboBox.addActionListener(this);
        mainComboBox.addItemListener(this);
        //prevent action events from being fired when the up/down arrow keys are used
        //mainComboBox.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE);
        getContentPane().add(mainComboBox, BorderLayout.WEST);
        subComboBox = new JComboBox();//  Create sub combo box with multiple models
        subComboBox.setPrototypeDisplayValue("XXXXXXXXXX"); // JDK1.4
        subComboBox.addItemListener(this);
        getContentPane().add(subComboBox, BorderLayout.EAST);
        String[] subItems1 = {"Select Color", "Red", "Blue", "Green"};
        subItems.put(items[1], subItems1);
        String[] subItems2 = {"Select Shape", "Circle", "Square", "Triangle"};
        subItems.put(items[2], subItems2);
        String[] subItems3 = {"Select Fruit", "Apple", "Orange", "Banana"};
        subItems.put(items[3], subItems3);
//      mainComboBox.setSelectedIndex(1);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        String item = (String) mainComboBox.getSelectedItem();
        Object o = subItems.get(item);
        if (o == null) {
            subComboBox.setModel(new DefaultComboBoxModel());
        } else {
            subComboBox.setModel(new DefaultComboBoxModel((String[]) o));
        }
    }

    @Override
    public void itemStateChanged(ItemEvent e) {
        if (e.getStateChange() == ItemEvent.SELECTED) {
            if (e.getSource() == mainComboBox) {
                if (mainComboBox.getSelectedIndex() != 0) {
                    FirstDialog firstDialog = new FirstDialog(ComboBoxTwo.this,
                            mainComboBox.getSelectedItem().toString(), "Please wait,  Searching for ..... ");
                }
            } 
        }
    }

    private class FirstDialog extends JDialog {

        private static final long serialVersionUID = 1L;

        FirstDialog(final Frame parent, String winTitle, String msgString) {
            super(parent, winTitle);
            setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
            JLabel myLabel = new JLabel(msgString);
            JButton bNext = new JButton("Stop Processes");
            add(myLabel, BorderLayout.CENTER);
            add(bNext, BorderLayout.SOUTH);
            bNext.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent evt) {
                    setVisible(false);
                }
            });
            javax.swing.Timer t = new javax.swing.Timer(1000, new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    setVisible(false);
                }
            });
            t.setRepeats(false);
            t.start();
            setLocationRelativeTo(parent);
            setSize(new Dimension(400, 100));
            setVisible(true);
        }
    }

    public static void main(String[] args) {
        JFrame frame = new ComboBoxTwo();
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

这篇关于JCombobox改变了另一个JCombobox的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆