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 和只是JFormattedTextField 那么你可以很漂亮地忘记PriceFinal PriceParse#Whatever

3/认为JComponentsforQuantity只是JSpinner,但是 Number Instance 的解决方法会有点复杂,JFormattedTextField例如这里

4/ 为了获得好的输出,把所有东西都放到JTable 中

5/ 对于JComboBox我更喜欢ItemListener而不是ActionListener,因为你的问题不是正确的Listener,而是解析Numbers正确的方法

于 2011-08-07T07:48:08.587 回答
0

好的,让它工作。ActionListner 使它工作(JComboBox)。我猜想对太多组件使用 ItemListner 会使解析有点混乱,此外我在 ItemListner 范围内使用了太多子句。非常感谢大家的帮助。

@mKorbel:我将尽快使用您的建议 :) 并将检查 JTable 和所述组件。必须通过它们,因为我没有使用它。

@Eng.Fouad:谢谢你的帮助。

只有一个问题。当我将 getSelectedItem() 类型转换为整数时,它会给出 NumberFormatException 错误(运行时)。所以我必须首先将对象更改为字符串,然后将其解析为整数。任何线索为什么直接转换会引发错误?

这是该项目的工作代码。

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 回答