************************关于事件监听器,附实例,100分*************************

sxhv998 2003-08-22 08:54:11
package sxh;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Puzzle {
public static void main(String[] args) {
PuzzleFrame frame = new PuzzleFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}

/**
A frame with a Puzzle panel.
*/

class PuzzleFrame extends JFrame {
public PuzzleFrame() {
setTitle("Puzzle");
setSize(WIDTH, HEIGHT);

Container contentPane = getContentPane();
PuzzlePanel panel = new PuzzlePanel();
contentPane.add(panel);
}
public static final int WIDTH = 220;
public static final int HEIGHT = 220;
}

/**
A panel with Puzzle buttons and a result display.
*/

class PuzzlePanel extends JPanel {
JButton[] button = { new JButton("1"),new JButton("2"),new JButton("3"),new JButton("4"),
new JButton("5"),new JButton("6"),new JButton("7"),new JButton("8"),
new JButton("9"),new JButton("10"),new JButton("11"),new JButton("12"),
new JButton("13"),new JButton("14"),new JButton("15"),new JButton("")};
private int i;
private JPanel panel;

public PuzzlePanel() {
setLayout(new BorderLayout());

// add the buttons in a 4 x 4 grid
panel = new JPanel();
panel.setLayout(new GridLayout(4,4,1,1));

for(int i=0;i<button.length;i++)
panel.add(button[i]);
button[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
if (button[i+4].getActionCommand().equals("")) {
button[i+4].setText(button[i].getActionCommand());
button[i].setText("");
} //up
else if (button[i-4].getActionCommand().equals("")) {
button[i-4].setText(button[i].getActionCommand());
button[i].setText("");
} //down
else if (button[i-1].getActionCommand().equals("")) {
button[i-1].setText(button[i].getActionCommand());
button[i].setText("");
} //left
else if (button[i+1].getActionCommand().equals("")) {
button[i+1].setText(button[i].getActionCommand());
button[i].setText("");
} //right
}
});
add(panel);
}
}

可以编译,但为什么运行后点击按钮没用!
帮忙改一下!
谢了!
...全文
91 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wfeng007 2003-08-23
  • 打赏
  • 举报
回复
我觉得用 java作界面为主的 东西不太合适。。。。。。。。。。。
sxhv998 2003-08-23
  • 打赏
  • 举报
回复
你们这是在每个按钮上添加监听器!这个我早就实现了!
我现在要实现的是通过+—自动判断是那个按钮!
fpwang 2003-08-23
  • 打赏
  • 举报
回复
event.getSource()呀//得到发生时间的对象

我的程序就是每个按钮的监听器一样,然后在程序中判断是哪个按钮

无论用什么方法,也要给每个按钮加监听器呀
除非你不用按钮,用Canvas类,自己绘制16个模拟按钮
sxhv998 2003-08-23
  • 打赏
  • 举报
回复
帮个忙啊!
fpwang 2003-08-22
  • 打赏
  • 举报
回复
package sxh;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Puzzle {
public static void main(String[] args) {
PuzzleFrame frame = new PuzzleFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}

/**
A frame with a Puzzle panel.
*/

class PuzzleFrame extends JFrame {
public PuzzleFrame() {
setTitle("Puzzle");
setSize(WIDTH, HEIGHT);

Container contentPane = getContentPane();
PuzzlePanel panel = new PuzzlePanel();
contentPane.add(panel);
}
public static final int WIDTH = 220;
public static final int HEIGHT = 220;
}

/**
A panel with Puzzle buttons and a result display.
*/
class NewButton extends JButton{
public int NUM;

public NewButton(String s,int n){
super(s);
NUM=n;
}
}

class PuzzlePanel extends JPanel {
JButton[] button = { new NewButton("1",1),new NewButton("2",2),new NewButton("3",3),new NewButton("4",4),
new NewButton("5",5),new NewButton("6",6),new NewButton("7",7),new NewButton("8",8),
new NewButton("9",9),new NewButton("10",10),new NewButton("11",11),new NewButton("12",12),
new NewButton("13",13),new NewButton("14",14),new NewButton("15",15),new NewButton("",16)};
private int i;
private JPanel panel;

public PuzzlePanel() {
setLayout(new BorderLayout());

// add the buttons in a 4 x 4 grid
panel = new JPanel();
panel.setLayout(new GridLayout(4,4,1,1));

for(int i=0;i<button.length;i++){
panel.add(button[i]);
button[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
NewButton b=(NewButton)e.getSource();
switch(b.NUM){
case 1:if (button[b.NUM-1+4].getText().equals("")) {
button[b.NUM-1+4].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
}else if (button[b.NUM-1+1].getText().equals("")) {
button[b.NUM-1+1].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
};break;
case 2:;
case 3:if (button[b.NUM-1+4].getText().equals("")) {
button[b.NUM-1+4].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
}else if (button[b.NUM-1+1].getText().equals("")) {
button[b.NUM-1+1].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
}else if (button[b.NUM-1-1].getText().equals("")) {
button[b.NUM-1-1].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
};break;
case 4:if (button[b.NUM-1+4].getText().equals("")) {
button[b.NUM-1+4].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
}else if (button[b.NUM-1-1].getText().equals("")) {
button[b.NUM-1-1].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
};break;
case 5:;
case 9:if (button[b.NUM-1+4].getText().equals("")) {
button[b.NUM-1+4].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
}else if (button[b.NUM-1+1].getText().equals("")) {
button[b.NUM-1+1].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
}else if (button[b.NUM-1-4].getText().equals("")) {
button[b.NUM-1-4].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
};break;
case 6:;
case 7:;
case 10:;
case 11:if (button[b.NUM-1+4].getText().equals("")) {
button[b.NUM-1+4].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
}else if (button[b.NUM-1+1].getText().equals("")) {
button[b.NUM-1+1].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
}else if (button[b.NUM-1-4].getText().equals("")) {
button[b.NUM-1-4].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
}else if (button[b.NUM-1-1].getText().equals("")) {
button[b.NUM-1-1].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
};break;
case 8:;
case 12:if (button[b.NUM-1+4].getText().equals("")) {
button[b.NUM-1+4].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
}else if (button[b.NUM-1-4].getText().equals("")) {
button[b.NUM-1-4].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
}else if (button[b.NUM-1-1].getText().equals("")) {
button[b.NUM-1-1].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
};break;

case 13:if (button[b.NUM-1+1].getText().equals("")) {
button[b.NUM-1+1].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
}else if (button[b.NUM-1-4].getText().equals("")) {
button[b.NUM-1-4].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
};break;

case 14:;
case 15:if (button[b.NUM-1+1].getText().equals("")) {
button[b.NUM-1+1].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
}else if (button[b.NUM-1-4].getText().equals("")) {
button[b.NUM-1-4].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
}else if (button[b.NUM-1-1].getText().equals("")) {
button[b.NUM-1-1].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
};break;

case 16:if (button[b.NUM-1-4].getText().equals("")) {
button[b.NUM-1-4].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
}else if (button[b.NUM-1-1].getText().equals("")) {
button[b.NUM-1-1].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
};break;
}
}
});
}
add(panel);
}
}
功能全实现了,应该还有很大的优化余地!
fpwang 2003-08-22
  • 打赏
  • 举报
回复
我只实现了4,8,12按钮向下交换
其他的你自己实现应该不难了吧
fpwang 2003-08-22
  • 打赏
  • 举报
回复
package sxh;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Puzzle {
public static void main(String[] args) {
PuzzleFrame frame = new PuzzleFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}

/**
A frame with a Puzzle panel.
*/

class PuzzleFrame extends JFrame {
public PuzzleFrame() {
setTitle("Puzzle");
setSize(WIDTH, HEIGHT);

Container contentPane = getContentPane();
PuzzlePanel panel = new PuzzlePanel();
contentPane.add(panel);
}
public static final int WIDTH = 220;
public static final int HEIGHT = 220;
}

/**
A panel with Puzzle buttons and a result display.
*/
class NewButton extends JButton{
public int NUM;

public NewButton(String s,int n){
super(s);
NUM=n;
}
}

class PuzzlePanel extends JPanel {
JButton[] button = { new NewButton("1",1),new NewButton("2",2),new NewButton("3",3),new NewButton("4",4),
new NewButton("5",5),new NewButton("6",6),new NewButton("7",7),new NewButton("8",8),
new NewButton("9",9),new NewButton("10",10),new NewButton("11",11),new NewButton("12",12),
new NewButton("13",13),new NewButton("14",14),new NewButton("15",15),new NewButton("",16)};
private int i;
private JPanel panel;

public PuzzlePanel() {
setLayout(new BorderLayout());

// add the buttons in a 4 x 4 grid
panel = new JPanel();
panel.setLayout(new GridLayout(4,4,1,1));

for(int i=0;i<button.length;i++){
panel.add(button[i]);
button[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
NewButton b=(NewButton)e.getSource();
try{
if (button[b.NUM-1+4].getText().equals("")) {
button[b.NUM-1+4].setText(button[b.NUM-1].getText());
button[b.NUM-1].setText("");
} //up
/*
else if (button[i-4].getText().equals("")) {
button[i-4].setText(button[i].getText());
button[i].setText("");
} //down
else if (button[i-1].getText().equals("")) {
button[i-1].setText(button[i].getText());
button[i].setText("");
} //left
else if (button[i+1].getText().equals("")) {
button[i+1].setText(button[i].getText());
button[i].setText("");
} //right
*/
}catch(ArrayIndexOutOfBoundsException ex){
}
}
});
}
add(panel);
}
}

我添加了一个NewButton类,因为要添加一个属性用来标记按钮的位置(该属性是不变的),Text属性只能用来表示按钮的内容,因为他常改变所以不能用来表示按钮的位置。
你没有把button[i].addActionListener()放在循环中,循环中多余一个语句一定要加{};
我建议你用switch(),因为你的button数组的index有可能越界,所以对于不同按钮要有稍微不同的操作
wfeng007 2003-08-22
  • 打赏
  • 举报
回复
原来是小游戏。。。。嘿嘿
作完了 上来交流交流啊。。。。
wfeng007 2003-08-22
  • 打赏
  • 举报
回复
本人java刚刚学完基础内容
button[i+4].getActionCommand().equals()
。。。。。。。。。

是不是
应该用
event.getActionCommand().equals()
比较好。。。。。。。。
sxhv998 2003-08-22
  • 打赏
  • 举报
回复
我想实现的功能在这张图片里!
http://sxhv998.y365.com/java.jpg
fpwang 2003-08-22
  • 打赏
  • 举报
回复
你想实现什么功能呢?
大连民族大学 计算机科学与工程学院 《Java语言》课程实验报告 实验题目: 计算的设计与实现 课程名称: Java语言 实验类型: 演示性 验证性 操作性 设计性 综合性 专业:网络工程 班级:**** 学生姓名*** 学号:***** 实验日期:2018年 4月23日 地点:计算机学院综合试验中心(I-303) 实验学时:4 实验成绩: 指导教师签字: 2018年 5月21日 1. 问题需求描述:Problem description 利用Java Swing设计计算图形化界面,并实现事件的监听,以及计算基本的加、减、乘、除、 清空、输出运算结果的操作,学习使用各种图形化界面的控件,容,布局等,学习对 按钮事件的处理等。以及对非法输入的处理。 2. 设计说明:Design notes 本计算,界面方面总体采用BorderLayout布局,显示输入输入的文本框和清除按钮 采用FlowLayout布局,容放在BorderLayout的North;0- 9和各种运算符号还有小数点采用GridLayout布局,容放在BorderLayou的Center;事 件监听和处理通过实现addActioListener监视接口和ItemEvent事件接口,从而对每一 个按钮实现事件的监听和处理;计算方面,调用ScriptEngineManager和ScriptEngine两 个类,直接通过eval函数直接把输入文本当作JS代码执行,输出执行结果,这样报错也 会直接实现,另把文本框设置不允许直接从键盘输入以防止出现安全事件。 最后通过转化成JS代码运算得到启发,使用类似方法,我还实现了调用VB代码实现计算 实时读出键盘输入,发出声音。 3. 系统实现:system implementation 1.程序界面展示 4. 总结体会: summary and experience 实验达到了预期的目标。通过此次的编程,我学会了用Java语言编写简单的软件,增强 了我对学习Java的兴趣。编程过程中,总体设计主要是窗口与组件的应用,具体执行则 是利用Java语言设计算法,而难点也在算法的设计上。虽然程序大体上符合要求,但由 于第一次编写这么复杂的程序,程序仍然存在一- 些漏洞,譬如由于未进行异常处理,当连续输入运算符是程序会出错,还有若一直按小 数点的话会得到一连串的小数点。由于最近忙着考试没有时间修改,考试结束后一定认 真修改这些问题。我觉得在编程时应该注意排版对齐,这样不论是自己检查程序还是别 人阅读程序都会更加方便。如果能添加备注的话以后阅读程序会更容易些。在以后的编 程中我会吸取经验,养成认真、严谨的编程习惯。 :程序清单 1. import javax.swing.JFrame; public class Calculator { public static void main(String[] paramArrayOfString) { CalculatorFrame localCalculatorFrame = new CalculatorFrame(); localCalculatorFrame.setSize(800, 800); localCalculatorFrame.setVisible(true); } } 2 import java.awt.Container; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; class CalculatorFrame extends JFrame { public CalculatorFrame() { setTitle("Calculator"); setSize(200, 200); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent paramAnonymousWindowEvent) { System.exit(0); } }); Container localContainer = getContentPane(); localContainer.add(new CalculatorPanel()); } } 3. import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Font; import java.awt.GridLayout; import java.awt.eve

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧