我想实现的功能在这张图片里!
http://sxhv998.y365.com/java.jpg

解决方案 »

  1.   

    本人java刚刚学完基础内容
    button[i+4].getActionCommand().equals()
    是不是
    应该用
    event.getActionCommand().equals()
    比较好。。
      

  2.   

    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有可能越界,所以对于不同按钮要有稍微不同的操作
      

  3.   

    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);
    }
    }
    功能全实现了,应该还有很大的优化余地!
      

  4.   

    event.getSource()呀//得到发生时间的对象我的程序就是每个按钮的监听器一样,然后在程序中判断是哪个按钮无论用什么方法,也要给每个按钮加监听器呀
    除非你不用按钮,用Canvas类,自己绘制16个模拟按钮
      

  5.   

    我觉得用 java作界面为主的 东西不太合适。。