2011-06-05 70 views
3

我想2个jcomboboxes结合起来。 1组合框用于显示费用类别。第二个组合框是从文本文件中读取文件以显示产品的类型。如果我更改第一个组合框,我希望第二个组合框将根据用户在第一个组合框中选择的内容进行更改。JComboBox的另一个变化JComboBox的

是否有任何机会,我仍然可以从文本文件加载其他组合框?该子项不会是数组,而是与之前相同,因为它位于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(); 
    } 
} 
+0

你调用loadDataToCboItem()?你应该在displaySelectedItem()方法中从你的actionPerformed方法中调用它。 – 2011-06-05 21:52:12

+0

请再编辑你的答案。代码格式不正确,不清楚这些方法属于哪个组合框。 – toto2 2011-06-05 21:54:36

回答

4

例如

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); 
    } 
} 
+0

你好,这是完美的没有任何机会,串子项可以从文本文件中拉我的其他组合框??? – Petr 2011-06-06 01:47:06

+0

这是完美的没有任何机会,我可以像以前一样从文本文件中加载它们?私人无效loadDataToCboItem(){ \t \t扫描器的FileReader =新扫描仪(的getClass()的getResourceAsStream( \t \t \t \t itemChange)。); \t \t尝试{ \t \t \t DefaultComboBoxModel model = new DefaultComboBoxModel(); \t \t \t而(fileReader.hasNextLine()){ \t \t \t \t model.addElement(fileReader.nextLine()); \t \t \t} \t \t \t subComboBox.setModel(model); \t \t} finally { \t \t \t fileReader.close(); \t \t} \t},只是将其更改为子项,并添加有文本文件????非常感谢。 – Petr 2011-06-06 01:51:27

+0

@Petr:请编辑您的问题以包含新代码示例。那看起来像是狗的早餐! – 2011-06-06 02:33:29

1

一方面,不==比较字符串,而是使用了equals或equalsIgnoreCase方法。例如,

更改此:

if (item == "Groceries") { 

这样:

if ("Groceries".equalsIgnoreCase(item.toString())) { 

你要调用toString()的项目,以确保您比较字符串的字符串。在做任何这些之前,您还需要确保该项目不为空。

0
if(jComboBox1.getSelectedItem() == "First Choice"){ 
    jComboBox2.removeAllItems(); 
    jComboBox2.addItem("First Choice Item 1"); 
} 
if(jComboBox1.getSelectedItem() == "Another Choice"){ 
    jComboBox2.removeAllItems(); 
    jComboBox2.addItem("Another Choice Item 1"); 
} 

或者你可以包括在阵列中的项目,如果它是太多了。