Java 帮助在JComboBox中更改项时自动更改值
我有一个程序,其中我使用了3种东西,一个复选框,一个组合框和一个文本字段。逻辑是这样的,如果复选框是enable,那么combobox和textfield是enable,除非没有 然后通过将文本字段与combobox中的项目相乘,在文本字段中设置一些值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;
@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不像我的例子那样工作,我将研究表格和微调器组件。