0

ItemListener で宣言したことをコンボ ボックスが実行しないのはなぜですか? コンボ ボックス内の項目をクリックすると、プログラムがハングします。BlueJ 全体を閉じる必要があります。私のコードで何が間違っているのか見てください

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

public class HulaHoops {

private Scanner inp = new Scanner(System.in);

public static void main(String[]args) {
    EventQueue.invokeLater(new Runnable()
    {
        @Override
        public void run()
        {
            new HulaHoops();
        }
    });
}

public HulaHoops() {
    JFrame frame = new JFrame();
    JPanel panel = new JPanel();
    String choices[] = {"Shoes","Comb","Ball"};
    JComboBox combo = new JComboBox(choices);
    combo.setBackground(Color.gray);
    combo.setForeground(Color.red);
    panel.add(combo);
    frame.add(panel);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300,100);
    frame.setVisible(true);


    combo.addItemListener(new ItemListener () {
        @Override
        public void itemStateChanged(ItemEvent e)
        {
            String item = (String)e.getItem();
            if (e.getStateChange () == ItemEvent.SELECTED)
            {
                System.out.println("You chose " +item);
                    if (item == "Shoes")
                    {
                        System.out.println("Enter quantity: ");
                        int bilang = inp.nextInt();
                        int total = bilang * 99;
                        String order = bilang + " " + "Shoes " + "     " + total;
                        System.out.print("" + order);
                    }

                    else if (item == "Comb")
                    {
                        System.out.println("Enter quantity: ");
                        int bilang = inp.nextInt();
                        int total1 = bilang * 99;
                        String order1 = bilang + " " + "Comb " + "     " + total1;
                        System.out.print("" + order1);
                    }

                    else if (item == "Ball")
                    {
                        System.out.println("Enter quantity: ");
                        int bilang = inp.nextInt();
                        int total2 = bilang * 99;
                        String order2 = bilang + " " + "Ball " + "     " + total2;
                        System.out.print("" + order2);
                    }
            }

        }
    });
}

}

4

2 に答える 2

3

問題は、次からの入力を待っているEDT呼び出しをブロックしていることです。Scanner#nextIntSystem.inItemListener

int bilang = inp.nextInt(); 

ScannerSwing アプリケーションでユーザー入力を読み取るために使用しないでください。EDTこれは、データがコンソール ウィンドウに提供されるまでのみブロックされます。を使用するなど、入力を読み取る方法はいくつかありますJOptionPane#showInputDialog。このオプションの詳細については、ダイアログの作成方法 を参照してください


これとは別に、演算子ではなく内容.equalsを比較する場合に使用します。後者は参照を比較します。String==Object

于 2013-03-06T17:09:58.817 に答える
1

あなたがしている基本的な間違いは、==演算子を使用して 2 つの String オブジェクトを比較することです。
代わりに、次の条件を使用する必要があります。

if (item .equals("Shoes"))
if (item .equals("Comb"))
if (item .equals("Ball"))

JOptionPane の短いデモとして..コードの変更されたバージョンをここに置きます...そのような状況を適切に処理する方法を理解するのに役立つことを願っています...

    //combo box, the program hangs I need to close the entire BlueJ. Please take a look what is wrong in my code
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class HulaHoops  {

private Scanner inp = new Scanner(System.in);

public static void main(String[]args) {
    EventQueue.invokeLater(new Runnable()
    {
        @Override
        public void run()
        {
            new HulaHoops();
        }
    });
}

public HulaHoops() {
    JFrame frame = new JFrame();
    JPanel panel = new JPanel();
    String choices[] = {"Shoes","Comb","Ball"};
    JComboBox combo = new JComboBox(choices);
    combo.setBackground(Color.gray);
    combo.setForeground(Color.red);
    panel.add(combo);
    frame.add(panel);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300,100);
    frame.setVisible(true);


    combo.addItemListener(new ItemListener () {
        @Override
        public void itemStateChanged(ItemEvent e)
        {
            String item = (String)e.getItem();
            if (e.getStateChange () == ItemEvent.SELECTED)
            {
                System.out.println("You chose " +item);
                    if (item.equals("Comb"))
                    {
            Object val = JOptionPane.showInputDialog("Please input quantity of comb"); 
            System.out.println(val);

                        Integer bilang= Integer.valueOf((String)val);
                        int total = bilang * 99;
                        String order = bilang + " " + "Shoes " + "     " + total;
                        System.out.print("" + order);
                    }


            }
    }
    });
    }
}
于 2013-03-06T17:11:21.860 に答える