3

チェックボックス、コンボボックス、テキストフィールドの3つを使用しているプログラムがあります。チェックボックスが有効な場合、ロジックは次のように機能し、そうでない場合を除き、コンボボックスとテキストフィールドが有効になります。

次に、コンボボックス内のアイテムを掛け合わせて、テキストフィールドに値を設定します。

私が取り組んでいるJFrame

フレームから - 最終価格の値は、価格 * 数量です。

購入をクリックしたときの問題はすべてうまくいきました。しかし、Jcombobox から値を変更しても、最終価格の値は自動的に変更されず、最初のケースのように 1200 のままです。値を変更するには、チェックボックスをオフにしてからオンにします。

何が問題になる可能性があります。チェックボックスとコンボボックスの両方に ItemListner を使用しました。

@Override
public void itemStateChanged(ItemEvent e){

    Object get = e.getSource();

    int multiplier;
    int ftotal;


    if (e.getStateChange()==ItemEvent.SELECTED){
        if(get==chkbox1){
             qntbox1.setEnabled(true);            
             size1.setEnabled(true);
             multiplier = Integer.parseInt(String.valueOf(qntbox1.getSelectedItem()));


             ftotal = Integer.parseInt(price1.getText()) * multiplier;
             fprice1.setText(String.valueOf(ftotal));}
4

3 に答える 3

4

あなたのために実装する必要がありActionListenerますJComboBox

private static final String command_cbo1 = "ComboBox1";
// ...

public class YourClass implements ItemListener, ActionListener
{
    // ...

    public YourClass()
    {
        // ...
        qntbox1.addActionListener(this);
        qntbox1.setActionCommand(command_cbo1);
        // ...
    }

    // ...

    public void itemStateChanged(ItemEvent e)        
    {
        // ...
    }

    // ...

    public void actionPerformed(ActionEvent e)
    {
        JComboBox cb = (JComboBox) e.getSource();
        String s = (String) cb.getSelectedItem();

        if(e.getActionCommand().equals(command_cbo1))
        {
            fprice1.setText("" + (Integer.parseInt(price1.getText()) * Integer.parseInt(s)));
        }
        // ...
    }

    // ...
}
于 2011-08-07T05:05:09.653 に答える
1

あなたの質問に直接ではありません

1/ JCheckBoxはまったく役に立たず、最終的な計算に本当に必要になります

2/ JComponents for PriceandはJFormattedTextFieldFinal Priceのみであると考えてください。Parse#Whatever

3/ JComponentsforはJSpinnerQuantityのみになると考えてくださいJFormattedTextField

4/ 良い出力を得るには、すべてをJTableに入れます

5/ JComboBox の場合、 ActionListenerではなくItemListenerを優先しました。問題は適切ではなく、正しい方法で解析するためですListenerNumbers

于 2011-08-07T07:48:08.587 に答える
0

わかりました。ActionListner はそれを機能させました (JComboBox)。あまりにも多くのコンポーネントに ItemListner を使用すると、解析が少し混乱したと思います。さらに、ItemListner スコープで使用した句が多すぎます。助けてくれてありがとう。

@mKorbel:私はあなたの提案をできるだけ早く使用します:)そしてJTableとそのコンポーネントをチェックします。私はそれを使用していないので、それらを通過する必要があります。

@Eng.Fouad:助けてくれてありがとう。

たった1つの問題。getSelectedItem() を整数に型キャストすると、 NumberFormatException エラー (実行時) が発生します。そのため、最初にオブジェクトを String に変更してから、parseit を整数に変更する必要があります。直接変換がエラーをスローする理由の手がかりはありますか?

これがプロジェクトの作業コードです。

public void itemStateChanged(ItemEvent e){

    Object get = e.getSource();



    if (e.getStateChange()==ItemEvent.SELECTED){
        if(get==chkbox1){
             qntbox1.setEnabled(true);            
             size1.setEnabled(true);   
             fprice1.setText(String.valueOf(Integer.parseInt(price1.getText()) * Integer.parseInt(String.valueOf(qntbox1.getSelectedItem()))));
        }
  @Override
       public void actionPerformed (ActionEvent ae)
       {

          Object toggel = ae.getSource();      
          String check;

          if (toggel == qntbox1)
          {
            check = (String) qntbox1.getSelectedItem();
            fprice1.setText(String.valueOf(Integer.parseInt(price1.getText()) * Integer.parseInt(check)));

          }
于 2011-08-07T15:40:01.817 に答える