************************关于事件监听器,附实例,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);
}
}

可以编译,但为什么运行后点击按钮没用!
帮忙改一下!
谢了!
...全文
89 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
  • 打赏
  • 举报
回复
你想实现什么功能呢?

62,614

社区成员

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

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