我想实现的功能在这张图片里!
http://sxhv998.y365.com/java.jpg
http://sxhv998.y365.com/java.jpg
解决方案 »
- 在用HTMLparser解析网页数据是抛出Exception in thread "main" java.lang.IncompatibleClassChang
- 怎么样获得一个进程的线程数?
- 没分了,有好心人帮我下吗?
- 有没有完整的身份验证的代码!200分!我要交作业的!11111111
- java容器到底存放的是什么,不是引用吗???
- ◇简单问题,小妹在线等各位大哥帮助~~
- 关于一个Application 怎么样转换成 Applet 的问题!!!
- 我是一个java菜鸟,想问一下什么是构建器
- java发送邮件时候,代码中的密码如何不使用明文
- 关于一个字符串输出截取问题
- 请教最短路径算法,急!
- 如何拆分一个字符串(Eg:"E:\resin\doc\programe\upload\qqq")大家帮帮忙!!!在线等!!!
button[i+4].getActionCommand().equals()
是不是
应该用
event.getActionCommand().equals()
比较好。。
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有可能越界,所以对于不同按钮要有稍微不同的操作
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);
}
}
功能全实现了,应该还有很大的优化余地!
除非你不用按钮,用Canvas类,自己绘制16个模拟按钮