Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 帮助在JComboBox中更改项时自动更改值_Java_Swing_Listener_Jcombobox_Parseint - Fatal编程技术网

Java 帮助在JComboBox中更改项时自动更改值

Java 帮助在JComboBox中更改项时自动更改值,java,swing,listener,jcombobox,parseint,Java,Swing,Listener,Jcombobox,Parseint,我有一个程序,其中我使用了3种东西,一个复选框,一个组合框和一个文本字段。逻辑是这样的,如果复选框是enable,那么combobox和textfield是enable,除非没有 然后通过将文本字段与combobox中的项目相乘,在文本字段中设置一些值 @Override public void itemStateChanged(ItemEvent e){ Object get = e.getSource(); int multiplier; int ftotal;

我有一个程序,其中我使用了3种东西,一个复选框,一个组合框和一个文本字段。逻辑是这样的,如果复选框是enable,那么combobox和textfield是enable,除非没有

然后通过将文本字段与combobox中的项目相乘,在文本字段中设置一些值

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

从框架来看,最终价格的值是价格*数量

现在,当我点击“购买”时,一切都很顺利。但当我从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));}

您必须为
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)));
        }
        // ...
    }

    // ...
}

不是直接针对你的问题

1/完全没有用,这将是最终计算真正需要的

2:考虑到<代码>价格>代码>代码>最终价格<代码>,那么您可以很好地忘记<代码>解析> < <代码> >

<> 3 /考虑<<代码> JCults>代码> >代码>数量>代码>,但是对于数字实例的处理将稍微复杂一些,如<代码> JFrastDeTeXField示例

4/要获得良好的输出,请将所有内容放到


5/因为我不喜欢,因为你的问题不是正确的
监听器,而是解析
数字的正确方式。ActionListner使其工作(JComboBox)。我想对太多的组件使用ItemListner会使解析有点混乱,再加上我在ItemListner范围中使用了太多的子句。非常感谢大家的帮助

@mKorbel:我会尽快使用您的建议:),并检查JTable和所述组件。因为我没用过,所以我得检查一下

@工程师福阿德:谢谢你的帮助

只有一个问题。当我将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)));

          }

该屏幕截图不需要1)位于字段顶部2)第2行到第7行的图像3)图像周围的边框,或。。4) 事实上,屏幕截图本身所传达的除了可以描述为文本的内容之外,什么都没有。在未来,请考虑不要包括这些问题的截图,如果你认为合适的话,请使用“谢谢”的建议。但我认为我们是否实现ItemListner的ActionListner并不重要。重要的是组合框状态的改变,这是由ItemListener实现的。将考虑您的代码,并将稍后回复。谢谢,将考虑您的建议,并将实施它。问题是,我真的没有太多时间去试验,因此我想做一些漂亮的事情。但由于JComboBox不像我的例子那样工作,我将研究表格和微调器组件。