永发信息网

JAVA按钮的问题

答案:2  悬赏:40  手机版
解决时间 2021-05-18 07:45

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JOptionPane;
public class test {
public static void main(String[]ar)
{
show1 ah=new show1();
ah.setSize(300,300);
ah.setVisible(true);
ah.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class show1 extends JFrame implements ActionListener
{
Container A;
JPanel p1;
JTextField JF1,JF2;
JButton JB,start;
show1()
{
A=getContentPane();
JF1=new JTextField(5);
JF2=new JTextField(5);
JB=new JButton("OK");
JB.addActionListener(this);
start=new JButton("start");
start.addActionListener(this);
p1=new JPanel();
p1.add(JF1);p1.add(JF2);
p1.add(JB);p1.add(start);
A.add(p1);
}
public void actionPerformed(ActionEvent e)
{
JButton source=(JButton)e.getSource();
if(source!=start)
{
if(JF1.getText().equals("1")&&JF2.getText().equals("2"))
{
if(source==JB)
{
JOptionPane.showMessageDialog(show1.this,"JB");
JB.removeActionListener(this);
}
}
else
{
if(!JF1.getText().equals("1")&&JF2.getText().equals("2"))
JOptionPane.showMessageDialog(show1.this,"JB2");
else
JOptionPane.showMessageDialog(show1.this,"JB1");
} System.out.println("test");
}
else
{
if(source==start)
{
JB.addActionListener(this);
}
}

}
}

我想问的是:第一次当点OK按钮时,会弹出一个提示面板,这个你看那个if语句也知道,但当第一个if通过时,就会去掉它的事件,然后点start按钮为OK添加事件,这时再按OK,就会弹出至少二个以上的提示面板,这就是我不知道为什么的,明明看那个if判断一次只能弹出一个提示面板呀,怎么会连续弹出呢,高手们看看吧。这只是做个测式,代码的有作性不用管哈。

最佳答案

你是否点start的次数多于点OK的次数,这时就会重复注册监听器。。


我的建议是,增加一个成员属性boolean add = true;


然后在注册监听器时这么写:


if(source==start)
{
if(!add)JB.addActionListener(this);
add = true;
}


在去掉的时候:JB.removeActionListener(this);
加一句:add = false;



这样就保证只有一个监听器了,完整代码:


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JOptionPane;
public class test {
public static void main(String[]ar)
{
show1 ah=new show1();
ah.setSize(300,300);
ah.setVisible(true);
ah.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class show1 extends JFrame implements ActionListener
{
Container A;
JPanel p1;
JTextField JF1,JF2;
JButton JB,start;
boolean add = true;
show1()
{
A=getContentPane();
JF1=new JTextField(5);
JF2=new JTextField(5);
JB=new JButton("OK");
JB.addActionListener(this);
start=new JButton("start");
start.addActionListener(this);
p1=new JPanel();
p1.add(JF1);p1.add(JF2);
p1.add(JB);p1.add(start);
A.add(p1);
}
public void actionPerformed(ActionEvent e)
{
JButton source=(JButton)e.getSource();
if(source!=start)
{
if(JF1.getText().equals("1")&&JF2.getText().equals("2"))
{
if(source==JB)
{
JOptionPane.showMessageDialog(show1.this,"JB");
JB.removeActionListener(this);
add = false;
}
}
else
{
if(!JF1.getText().equals("1")&&JF2.getText().equals("2"))
JOptionPane.showMessageDialog(show1.this,"JB2");
else
JOptionPane.showMessageDialog(show1.this,"JB1");
}
System.out.println("test");
}
else
{
if(source==start)
{
if(!add)JB.addActionListener(this);
add = true;
}
}
}
}


全部回答

我这里按你说的只弹出一个啊?!

你要注意,跳过第一个if语句去执行监听删除语句的条件是,两个文本区域需要输入1和2

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
英雄岛的新三英雄技能怎么学的?去哪学的
伊川县洛阳佛光阁(文化北路店)地址在哪,我要
烽火战国上海14区 出售四种资源 比例大概是多
患宫颈糜烂的症状会有什么?
阿拉善口号征集,原地踏步的口号和齐步走的口
DNF开G被封过了,解封后怎么经常无缘无故被封
南岗区哈尔滨如家旅馆(辽阳街)地址是什么,有
13万左右买什么车合试啊。
为什么女人是那么的花心》??
如何计算应纳税所得额,应纳税所得额的计算公
对一个女人来讲.什么才是最重要的?
最近经常播放的丰田汽车的广告歌
开福区长沙火焱兔在什么地方啊,我要过去处理
谁知道梦幻诛仙师们技能的计算器
115元怎么撑三个星期?
推荐资讯
什么动物喜欢睡觉?
梦幻珠仙帮主的帮贡怎么来啊?
我的也是两个月两个多月!吃药也不管用!该杂
qq宠物里的小锄头在哪
汝城县郴州五金螺丝电器杂货店地址有谁知道?
奶油爆米花的做法
现在沈阳哪里买房性价比最高?
DNF里爆好东西就说RP好,那怎么样才算是好RP
涧西区洛阳同力水泥(卓飞路)这个地址怎么能查
哎、、我脸上长癣怎么办?大家有什么办法麽?
我想和我老婆分了,用什么方式最有风度?
科学发展为什么要以人为本?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?