java中如何实现一个按钮拥有两种功能。

时间:2022-11-14 23:27:50
即如:按钮JButton jb = new JButton();
在监听中,jb可以实现两个功能:开/关。
点一次按钮上的文字为:开,第二次点击为:关。再点击又变回:开。

10 个解决方案

#1


可以设置一个全局变量、点次开关就累计加一、

取模运算 等于1 和等于0  在累加多少次之后 从新给该变量赋值 

#2


传参数 1就是开 0就是关

#3


jb.setText("开"), jb.setText("关");就是这么简单。

#4



JButton jb=new JButton("开");
jb.addActionListener(new btnClick());
public class btnClick implements ActionListener{


public void actionPerformed(ActionEvent e) {
JButton jb=(JButton)e.getSource();
if(jb.getText().equals("开")){
jb.setText("关");
}
else if(jb.getText().equals("关")){
jb.setText("开");
}
}

}

这样应该就行了,如果不行把text换成ActionCommand

#5


这样行不通啊。
引用 4 楼  的回复:
Java code


JButton jb=new JButton("开");
jb.addActionListener(new btnClick());
public class btnClick implements ActionListener{

        
        public void actionPerformed(ActionEvent e) {
……

#6


你可以给按钮设置个 状态的变量 1为开 , 0为关  初始为0   按第一下1  在按下0  

#7


引用 1 楼  的回复:
可以设置一个全局变量、点次开关就累计加一、

取模运算 等于1 和等于0  在累加多少次之后 从新给该变量赋值

 我觉着这个不错  按一次+1  然后对%2  得到的结果是0   true    得到1  false   再判断

#8


引用 1 楼  的回复:
可以设置一个全局变量、点次开关就累计加一、

取模运算 等于1 和等于0 在累加多少次之后 从新给该变量赋值


package de;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class som extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
static int i=0;
JButton jb;
boolean mark;
public som()
{
    
    
Panel p = new Panel();
jb = new JButton("关");
jb.addActionListener(this);
p.add(jb);
add(p);
this.setVisible(true);
this.pack();

}

public static void main(String args[])
{
new som();
}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jb)
{
if(i%2==0)
{

jb.setActionCommand("开");
mark=true; //用于中止线程的run()方法
i=i+1;
}
else
{
mark = false;

jb.setActionCommand("关");
i=i+1;

    }

}
}



}
这个程序还是不行,思想应该跟你的差不多。不知道错在哪,还是说JButton根本就不可以重写标签。急……

#9



package de;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class som extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
static int i=0;
JButton jb;
boolean mark;
public som()
{
    
    
Panel p = new Panel();
jb = new JButton("关");
jb.addActionListener(this);
p.add(jb);
add(p);
this.setVisible(true);
this.pack();

}

public static void main(String args[])
{
new som();
}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jb)
{
if(i%2==0)
{

jb.setActionCommand("开");
jb.setText(" 关");//这里忘了改变文本值,所以你看不出效果来
mark=true; //用于中止线程的run()方法
i=i+1;
}
else
{
mark = false;

jb.setActionCommand("关");
jb.setText(" 关");//这里忘了改变文本值,所以你看不出效果来
i=i+1;

}

}
}



}


亲,你这段代码我可是在自己机子上试过可以的哦,你确定四楼的那段代码不行么??感觉是一个逻辑意思啊

#10


引用 9 楼  的回复:
Java code


package de;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class som extends JFrame implements Actio……

package de;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class som extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
static int i=0;
JButton jb;
boolean mark;
public som()
{
    
    
Panel p = new Panel();
jb = new JButton("关");
jb.addActionListener(this);
p.add(jb);
add(p);
this.setVisible(true);
this.pack();

}

public static void main(String args[])
{
new som();
}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jb)
{
if(i%2==0)
{

jb.setActionCommand("关");
jb.setText("开");//这里忘了改变文本值,所以你看不出效果来[/color]
mark=true; //用于中止线程的run()方法
i=i+1;
System.out.println("hello ");
}
else
{
mark = false;

jb.setActionCommand("开");
jb.setText("关");//这里忘了改变文本值,所以你看不出效果来[/color]
i=i+1;
System.out.println("nonono");

}

}
}



}


亲,我真的也运行你帮我修改的。但是还是没变化,后来才知道在“开”“关”那里写反了。现在可以了。问题是,四楼你的那个,定义变量不可以那么定义。那样定义会出错。 
不过,问题也算是解决啦。只不过我嵌套到我整个程序里又没见效果。看来整个程序里面也有错。

#1


可以设置一个全局变量、点次开关就累计加一、

取模运算 等于1 和等于0  在累加多少次之后 从新给该变量赋值 

#2


传参数 1就是开 0就是关

#3


jb.setText("开"), jb.setText("关");就是这么简单。

#4



JButton jb=new JButton("开");
jb.addActionListener(new btnClick());
public class btnClick implements ActionListener{


public void actionPerformed(ActionEvent e) {
JButton jb=(JButton)e.getSource();
if(jb.getText().equals("开")){
jb.setText("关");
}
else if(jb.getText().equals("关")){
jb.setText("开");
}
}

}

这样应该就行了,如果不行把text换成ActionCommand

#5


这样行不通啊。
引用 4 楼  的回复:
Java code


JButton jb=new JButton("开");
jb.addActionListener(new btnClick());
public class btnClick implements ActionListener{

        
        public void actionPerformed(ActionEvent e) {
……

#6


你可以给按钮设置个 状态的变量 1为开 , 0为关  初始为0   按第一下1  在按下0  

#7


引用 1 楼  的回复:
可以设置一个全局变量、点次开关就累计加一、

取模运算 等于1 和等于0  在累加多少次之后 从新给该变量赋值

 我觉着这个不错  按一次+1  然后对%2  得到的结果是0   true    得到1  false   再判断

#8


引用 1 楼  的回复:
可以设置一个全局变量、点次开关就累计加一、

取模运算 等于1 和等于0 在累加多少次之后 从新给该变量赋值


package de;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class som extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
static int i=0;
JButton jb;
boolean mark;
public som()
{
    
    
Panel p = new Panel();
jb = new JButton("关");
jb.addActionListener(this);
p.add(jb);
add(p);
this.setVisible(true);
this.pack();

}

public static void main(String args[])
{
new som();
}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jb)
{
if(i%2==0)
{

jb.setActionCommand("开");
mark=true; //用于中止线程的run()方法
i=i+1;
}
else
{
mark = false;

jb.setActionCommand("关");
i=i+1;

    }

}
}



}
这个程序还是不行,思想应该跟你的差不多。不知道错在哪,还是说JButton根本就不可以重写标签。急……

#9



package de;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class som extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
static int i=0;
JButton jb;
boolean mark;
public som()
{
    
    
Panel p = new Panel();
jb = new JButton("关");
jb.addActionListener(this);
p.add(jb);
add(p);
this.setVisible(true);
this.pack();

}

public static void main(String args[])
{
new som();
}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jb)
{
if(i%2==0)
{

jb.setActionCommand("开");
jb.setText(" 关");//这里忘了改变文本值,所以你看不出效果来
mark=true; //用于中止线程的run()方法
i=i+1;
}
else
{
mark = false;

jb.setActionCommand("关");
jb.setText(" 关");//这里忘了改变文本值,所以你看不出效果来
i=i+1;

}

}
}



}


亲,你这段代码我可是在自己机子上试过可以的哦,你确定四楼的那段代码不行么??感觉是一个逻辑意思啊

#10


引用 9 楼  的回复:
Java code


package de;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class som extends JFrame implements Actio……

package de;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class som extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
static int i=0;
JButton jb;
boolean mark;
public som()
{
    
    
Panel p = new Panel();
jb = new JButton("关");
jb.addActionListener(this);
p.add(jb);
add(p);
this.setVisible(true);
this.pack();

}

public static void main(String args[])
{
new som();
}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jb)
{
if(i%2==0)
{

jb.setActionCommand("关");
jb.setText("开");//这里忘了改变文本值,所以你看不出效果来[/color]
mark=true; //用于中止线程的run()方法
i=i+1;
System.out.println("hello ");
}
else
{
mark = false;

jb.setActionCommand("开");
jb.setText("关");//这里忘了改变文本值,所以你看不出效果来[/color]
i=i+1;
System.out.println("nonono");

}

}
}



}


亲,我真的也运行你帮我修改的。但是还是没变化,后来才知道在“开”“关”那里写反了。现在可以了。问题是,四楼你的那个,定义变量不可以那么定义。那样定义会出错。 
不过,问题也算是解决啦。只不过我嵌套到我整个程序里又没见效果。看来整个程序里面也有错。

相关文章