0

与组一起使用时遇到一些问题checkbox。我使用事件操作来获取checkbox标签字符串。我正在使用两个组checkbox,当我单击第一个checkbox时,标签的文本将被更改。但是当我点击第一组checkbox时,两个标签都会改变。

这是我的代码:

/* <applet code="third.class" width=500 height=500></applet> */

import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class third extends Applet implements ItemListener
{
private  Label l1,l2;
private Checkbox cb,cbj2;
CheckboxGroup grp = new CheckboxGroup();
CheckboxGroup grp2 = new CheckboxGroup();
public void init()
{



    Checkbox cb1 = new Checkbox("Mango",grp,false);
    Checkbox cb2 = new Checkbox("Apple",grp,false);
    Checkbox cb3 = new Checkbox("Orange",grp,false);

    Checkbox cbj1 = new Checkbox("Male",grp2,false);
    Checkbox cbj2 = new Checkbox("Female",grp2,false);

    FlowLayout f1=new FlowLayout(FlowLayout.LEFT);
    FlowLayout f2=new FlowLayout(FlowLayout.RIGHT);
    FlowLayout f3=new FlowLayout(FlowLayout.CENTER);

    cb1.addItemListener(this);
    cb2.addItemListener(this);
    cb3.addItemListener(this);

    cbj1.addItemListener(this);
    cbj2.addItemListener(this);

    setLayout(f3);
    add(cb1);
    add(cb2);
    add(cb3);

    l1 = new Label("                                                         ");
    add(l1);

    setLayout(f2);
    add(cbj1);
    add(cbj2);              

    l2 = new Label("                                                         ");
    add(l2);
}
public void itemStateChanged(ItemEvent e)
{

    cb=(Checkbox)(e.getItemSelectable());
    l1.setText(cb.getLabel());

    cb2=(Checkbox)(e.getItemSelectable());
    l2.setText(cb2.getLabel());
}   
}

看图在这里!!

http://img201.imageshack.us/img201/9779/76059549.png

问题是,当我当时点击第一checkbox组时,两个标签字符串都发生了变化。
那么我该如何阻止呢?

4

1 回答 1

0

问题是由于ItemEvent对所选复选框项目的比较。
对于每个点击事件,您应该只检查事件的一个源项。
在您的情况下,它将是cb1or cb2
但是您正在单击Female复选框,但将其标签分配给cb1cb2
因此,两个复选框都带有相同的标签。

应用以下更改并查看其影响。

  Checkbox cb = ( Checkbox ) e.getItemSelectable();

  if ( cb.getLabel().equals( "Male" ) ) {
    l1.setText( cb.getLabel() );
  }
  else if ( cb.getLabel().equals( "Female" ) ) {
    l2.setText( cb.getLabel() );
  }
于 2012-10-26T10:56:05.553 回答