新手JAVA编程 GUI事件处理的问题 高手来看下

package 调查统计;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
import java.awt.*;
public class N20
{
public static void main(String[] args)
{
Myframe frame=new Myframe();
frame.setFrame();
frame.show();
}
}

class Myframe extends JFrame
{
public void setFrame()
{
this.setTitle("投票统计");
this.setSize(350,300);
this.setLocation(450,250);
this.setLayout(new GridLayout(2,0));
this.addWindowListener(new Exit());
Mypanel jp1=new Mypanel();
Youpanel jp2=new Youpanel();
this.add(jp1);
jp2.Text();
jp1.gouzhao();
this.add(jp2);
}
}

class Exit extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}

class Mypanel extends JPanel implements ActionListener
{
Youpanel pj=new Youpanel();
ButtonGroup btg=new ButtonGroup();
JRadioButton danbt1=new JRadioButton("吃",true);
JRadioButton danbt2=new JRadioButton("喝");
JButton okbt=new JButton("OK");
JButton exitbt=new JButton("EXIT");
public void gouzhao()
{
btg.add(danbt1);
btg.add(danbt2);
this.add(danbt1);
this.add(danbt2);
this.add(okbt);
this.add(exitbt);
okbt.addActionListener(this);
exitbt.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
Object obj=e.getSource();
if(obj==okbt)
{
if(danbt1.isSelected())
{
pj.text.setText("GOOD"); //这条语句不工作??
}
else if(danbt2.isSelected())
{
System.exit(0);
}
}
if(obj==exitbt)
{
System.exit(0);
}
}
}

class Youpanel extends JPanel
{
JTextArea text=new JTextArea(" ");
public void Text()
{
text.setEnabled(false);
this.add(text);
}
}

——————————————————————————————————————————————————————————————————————

pj.text.setText("GOOD"); 为什么这条语句不工作?? 其他的按钮都没问题?
各位高手帮我看下 我想了半天也没想通。。谢谢

第1个回答  2011-05-08
代码太长我没仔细看,你这个问题,我觉得你可以从以下几个方面着手:
1,断点调试,pj.text.setText("GOOD"); 是否执行。
2,setext(),和add(text)的先后顺序,可能是没有刷新界面造成的。追问

pj.text.setText("GOOD"); 这个不执行。。。 换成别的语句也不行 所有在这个IF里的语句完全不执行

追答

我这没环境啊,没法调试,我刚看了下代码,应该是if(obj==okbt)
有问题,改成if(obj.equals(okbt))试试。

追问

先谢谢你们了啊 应该没问题 obj是个对象不能用equals比较吧 而且下面2句都能工作
if(obj==okbt)
{
if(danbt1.isSelected())
{
pj.text.setText("GOOD"); //这条语句不工作??
}
else if(danbt2.isSelected())
{
System.exit(0); //这个是可以工作的
}
}
if(obj==exitbt)
{
System.exit(0); //这个也可以
}
}
}

第2个回答  2011-05-07
btg.add(danbt1);
btg.add(danbt2);
this.add(danbt1);
this.add(danbt2);

这个好像好问题,
this.add(danbt1);
this.add(danbt2);
应该改为this.add(btg)吧!追问

this.add(danbt1);
this.add(danbt2);//是把2个Button注册到JPanel里 这个应该没问题吧

追答

两个Button,你不是要放在ButtonGroup里的吗

追问

是啊 btg.add(danbt1);
btg.add(danbt2); 这个已经放进去了

追答

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
import java.awt.*;
public class N20
{
public static void main(String[] args)
{
Myframe frame=new Myframe();
frame.setFrame();
frame.show();
}
}
class Myframe extends JFrame
{
public void setFrame()
{
this.setTitle("投票统计");
this.setSize(350,300);
this.setLocation(450,250);
this.setLayout(new GridLayout(2,0));
this.addWindowListener(new Exit());
Youpanel jp2=new Youpanel();
jp2.Text();
Mypanel jp1=new Mypanel(jp2);
this.add(jp1);
jp1.gouzhao();
this.add(jp2);
}
}
class Exit extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
class Mypanel extends JPanel implements ActionListener
{
Youpanel pj=null;
ButtonGroup btg=new ButtonGroup();
JRadioButton danbt1=new JRadioButton("吃",true);
JRadioButton danbt2=new JRadioButton("喝");
JButton okbt=new JButton("OK");
JButton exitbt=new JButton("EXIT");
public Mypanel(Youpanel pj)
{
this.pj=pj;
}
public void gouzhao()
{
btg.add(danbt1);
btg.add(danbt2);
this.add(danbt1);
this.add(danbt2);
this.add(okbt);
this.add(exitbt);
okbt.addActionListener(this);
exitbt.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
Object obj=e.getSource();
if(obj==okbt)
{
if(danbt1.isSelected())
{
pj.text.setText("GOOD"); //这条语句不工作??
}
else if(danbt2.isSelected())
{
System.exit(0);
}
}
if(obj==exitbt)
{
System.exit(0);
}
}
}
class Youpanel extends JPanel
{
JTextArea text=new JTextArea("吃或喝");
public void Text()
{
text.setEnabled(false);
this.add(text);
}
}
我把代码调了一遍发现你的YourPanel pj不是界面的那个,上面的可以了,自己找下差别。

本回答被提问者采纳
第3个回答  2011-05-07
textArea加入文本的方法应该是APPEND吧,TEXTFIELD才是用SET这个方法追问

TextArea 也有这个方法的 、、、
TextField我也用过 一样没用

追答

text.setEnabled(false);,你这条已经把你的可编辑状态为FALSE了啊,你要用SET这个也要的它改为TRUE吧

追问

没呢 可编辑状态是指用户能否输入。。
我快晕了、、

第4个回答  2012-06-14
你没有 Yourpanel 这个类啊 只有 Youpanel 这个类
相似回答