簡體   English   中英

Java JComboBox問題

[英]java JComboBox issue

我試圖擁有兩個Jcombox,其中第二個Jcombox應該根據第一個Jcombox的更改來更改其值。 我嘗試過但未能成功,不勝感激。 謝謝

到目前為止,這是我嘗試過的:

public class SharedDataBetweenComboBoxSample {

    static private String selectedString(ItemSelectable is) {
        Object selected[] = is.getSelectedObjects();
        return ((selected.length == 0) ? "null" : (String)selected[0]);
    }

    public static void main(String args[]) {
        final String labels[] = { "A", "B", "C" };
        final String labelsA[] = { "A", "AA", "AAA" };
        final String labelsB[] = { "B", "BB", "BBB" };
        final String labelsC[] = { "C", "CC", "CCC" };

        final JFrame frame = new JFrame("Shared Data");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        JComboBox comboBox1 = new JComboBox();
        comboBox1.addItem(labels);
        comboBox1.setSelectedItem(null);

        final JComboBox comboBox2 = new JComboBox();
        // comboBox2.setEditable(true);
        panel.add(comboBox1);
        panel.add(comboBox2);
        frame.add(panel,BorderLayout.NORTH);

        ItemListener itemListener = new ItemListener() {
            public void itemStateChanged(ItemEvent itemEvent) {
                int state = itemEvent.getStateChange();
                System.out.println((state == ItemEvent.SELECTED) ? "Selected" : "Deselected");
                System.out.println("Item: " + itemEvent.getItem());
                ItemSelectable is = itemEvent.getItemSelectable();
                System.out.println(", Selected: " + selectedString(is));
                if (selectedString(is) == "B") {
                    comboBox2.addItem(labelsB);
                    // frame.add(comboBox1, BorderLayout.CENTER);
                } else if (selectedString(is) == "A") {
                    comboBox2.addItem(labelsA);
                    // frame.add(comboBox1, BorderLayout.CENTER);
                } else if (selectedString(is) == "C") {
                    comboBox2.addItem(labelsC);
                    // frame.add(comboBox1, BorderLayout.CENTER);
                } else {
                    comboBox2.setSelectedItem(null);
                    // frame.add(comboBox1, BorderLayout.CENTER);
                }
            }

        };
        comboBox1.addItemListener(itemListener);

        frame.setSize(300,200);
        frame.setVisible(true);
    }
}
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

public class ComboBoxTwo extends JFrame implements ActionListener
{
 private JComboBox mainComboBox;
 private JComboBox subComboBox;
 private Hashtable subItems = new Hashtable();

 public ComboBoxTwo()
 {
  String[] items = { "Select Item", "Color", "Shape", "Fruit" };
  mainComboBox = new JComboBox( items );
  mainComboBox.addActionListener( this );

  getContentPane().add( mainComboBox, BorderLayout.WEST );

  //  Create sub combo box with multiple models

  subComboBox = new JComboBox();
  subComboBox.setPrototypeDisplayValue("XXXXXXXXXX"); // JDK1.4
  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);
 }

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

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

不確定您說的是什么問題。 也許問題是

comboBox2.addItem(labelsB);

這是將一個數組添加為列表中的單個項目,假設它是正確的,則完全可以接受,但是我猜測您想遍歷該數組並將每個項目添加為單獨的項目。 您可能要在取消選擇時刪除項目。

我假設您正在嘗試從第一個列表中的多個選擇中進行選擇(基於您的selectedString操作),如果您的代碼還不夠用呢? 如果您不希望使用if/else構造,則只需多個if s

另外,不要使用(selectedString(is)=="A") ,可能會很幸運,但是應該使用`“ A” .equals(selectedString(is))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM