【问题标题】:Help in automatically changing value upon ItemChange in JComboBox帮助在 JComboBox 中的 ItemChange 时自动更改值
【发布时间】:2011-08-07 04:49:08
【问题描述】:

我有一个程序,我在其中使用 3 个东西,一个复选框、一个组合框和一个文本字段。如果复选框被启用,那么逻辑是这样工作的,然后组合框和文本字段被启用,除非没有。

然后通过将它与组合框中的项目相乘来在文本字段中设置一些值。

从框架 - 最终价格的值是价格 * 数量。

现在我点击购买时的问题一切正常。但是,当我从 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));}

【问题讨论】:

  • 该屏幕截图不需要 1) 顶部的图像 2) 字段的第 2 行到第 7 行 3) 图像周围的边框,或者.. 4) 实际上屏幕截图本身没有传达任何内容什么可以被描述为文本。以后,请考虑包含此类问题的屏幕截图,如果您认为一个合适,请使用How do I create a screenshot to illustrate a post? FAQ中的建议。

标签: java swing listener jcombobox parseint


【解决方案1】:

您必须为您的JComboBox 实现ActionListener

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

    // ...
}

【讨论】:

  • 谢谢伙计。但是我认为我们是否实现ItemListner的ActionListner并不重要。重要的是组合框状态的变化,这由 ItemListener 完成。将考虑您的代码并稍后恢复。
【解决方案2】:

不直接回答你的问题

1/ JCheckBox 完全没用,最终计算确实需要它

2/ 考虑到PriceFinal PriceJComponents 将只有JFormattedTextField,那么你可以很漂亮地忘记Parse#Whatever

3/ 考虑到 JComponents for Quantity 将只是 JSpinner,但 Number Instance 的解决方法会有点复杂,如 JFormattedTextField 示例 here

4/ 为了获得不错的输出,请将所有内容都放到JTable

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

【讨论】:

  • 谢谢,会考虑您的建议并实施。问题是,我真的没有太多时间进行实验,因此正在考虑做一些漂亮的事情。但由于 JComboBox 不像我的情况那样工作,我将研究表格和微调器组件。
【解决方案3】:

好的,它开始工作了。 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)));

          }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    相关资源
    最近更新 更多