当前位置: 代码迷 >> Java相关 >> 关于按钮交互的问题。
  详细解决方案

关于按钮交互的问题。

热度:261   发布时间:2006-07-01 10:56:41.0

aa改好了,谢谢!
现在还要回到我原来的程序了,希望适用!

非常感谢千里冰封!


----------------解决方案--------------------------------------------------------
解决了就好

----------------解决方案--------------------------------------------------------

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Button;
import java.awt.Cursor;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class aa implements ActionListener,MouseListener{
Frame fr;
Button bt1,bt2,bt3,bt4;
Panel pn;
Label label;
Canvas canvas;
String attr,tool;
private static final long serialVersionUID = 884142590900760515L;
public aa() {
fr=new Frame("陕西地图");
FlowLayout layout=new FlowLayout(FlowLayout.LEFT);//组件左对齐;

bt1=new Button("复位");
bt1.setCursor(new Cursor(Cursor.HAND_CURSOR));
bt1.addActionListener(this);
bt2=new Button("放大");
bt2.setCursor(new Cursor(Cursor.HAND_CURSOR));
bt2.addActionListener(this);
bt3=new Button("缩小");
bt3.setCursor(new Cursor(Cursor.HAND_CURSOR));
bt3.addActionListener(this);
bt4=new Button("漫游");
bt4.setCursor(new Cursor(Cursor.HAND_CURSOR));
bt4.addActionListener(this);

pn=new Panel();
pn.setLayout(layout);//设置布局管理器;
pn.add(bt1);pn.add(bt2);pn.add(bt3);pn.add(bt4);
pn.setBackground(Color.white.darker());

label=new Label();
label.setBackground(Color.white.darker());

canvas=new Canvas();

fr.add(pn,"North");
fr.add(canvas,"Center");
fr.add(label,"South");
fr.setBounds(50,50,800,680);
fr.setVisible(true);
fr.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==bt4)
{
tool="pan";
canvas.addMouseListener(this);
}
if(e.getSource()==bt1)
{
tool="reset";
canvas.addMouseListener(this);
}
if(e.getSource()==bt2)
{
tool="big";
canvas.addMouseListener(this);
}
if(e.getSource()==bt3)
{
tool="small";
canvas.addMouseListener(this);
}
}

public void mouseClicked(MouseEvent event) {
if(tool=="reset")
{
label.setText(tool);
System.out.println(tool);
canvas.removeMouseListener(this);
}
if(tool=="big")
{
label.setText(tool);
System.out.println(tool);
canvas.removeMouseListener(this);
}

if(tool=="small")
{
label.setText(tool);
System.out.println(tool);
canvas.removeMouseListener(this);
}
if(tool=="pan")
{
label.setText(tool);
System.out.println(tool);
canvas.removeMouseListener(this);
}
}
public static void main(String[] args) {
new aa();
}
public void mousePressed(MouseEvent e) {}

public void mouseReleased(MouseEvent e) {}

public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}
}
又有新问题了,如果点击同一个button多次,再点击canvas,就会有多次输出,怎么判断点击的是同一个button?


----------------解决方案--------------------------------------------------------
你这是点了一次按钮就加一次事件处理函数,这样当然不好
你在处理按钮事件的时候,判断是一样,是否这个按钮已经按过了,不就可以了吗?

----------------解决方案--------------------------------------------------------

你用适配器写 更方便 不用把每个接口都给写出来


----------------解决方案--------------------------------------------------------
有没有判断按钮是否按下的方法?isPressed()方法不对呀!!
----------------解决方案--------------------------------------------------------
不是是否按下,而是是否已经按过了
你可以调一个变量,它用于保存按过哪个按钮
当产生按钮事件时,先查询是否这个键被按过,如果没有就可以添加事件了
如果有,那就什么也不要做
这样不是很好吗?
----------------解决方案--------------------------------------------------------
要保存的只能是当前按过的按钮,不能把所有按过的按钮都记录。连续按下的按钮任务不能重复执行的。

你能不能帮忙把这个程序该一下,谢谢了。我现在头都大了
----------------解决方案--------------------------------------------------------
我用了4个变量来记录4个按钮的状态,是不是很麻烦?如果用一个变量可以实现么?
----------------解决方案--------------------------------------------------------
如果你的程序允许四个状态共存的时候,就设四个变量
否则一个就够了,

----------------解决方案--------------------------------------------------------
  相关解决方案