我想做一个象棋游戏,算法已经写好了,现在想知道象棋的棋子是用什么做的(可能表述有些问题),比如按钮?

解决方案 »

  1.   

    自己定义一个ImageButton继承Button,定义一个Sring类型的model,就是点击状态,鼠标移入状态等,重写里面的pain(),根据model来画不同的图,监听类也直接写在ImageButton类里,调用setModel()设置model。
      

  2.   

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JLabel;
    public class ImageButton extends JButton implements MouseListener { /**
     * 
     */
    private String name;
    private JLabel image;
    private JLabel textPanel;
    private Boolean pressed = false;
    private Boolean entered = false;
    private Boolean enabled = true;
    private String modal = "";
    //只有图片的按钮
    public ImageButton(String name) {
    this.name = name;
    this.image = new JLabel();
    textPanel = new JLabel();
    add(image);
    setLayout(null);
    setBorder(null);
    setOpaque(false);
    addMouseListener(this);
    }
    //图文混合按钮
    public ImageButton(String btnname, String text) {
    this(btnname);
    textPanel.setText(text);
    textPanel.setVerticalAlignment(JLabel.CENTER);
    textPanel.setHorizontalAlignment(JLabel.CENTER);
    textPanel.setForeground(Color.LIGHT_GRAY);
    textPanel.setFont(ConfigDao.instance().getConfig().getFont());
    add(textPanel);
    }
    //图文混合按钮,并设置字体大小
    public ImageButton(String btnname, String text, int size) {
    this(btnname, text);
    textPanel.setFont(new Font(ConfigDao.instance().getConfig().getFont()
    .getFontName(), Font.PLAIN, size));
    }
    //各种鼠标事件处理函数
    public void mouseClicked(MouseEvent e) {
    } public void mouseEntered(MouseEvent e) {
    if (!enabled)
    return;
    entered = true;
    if (pressed) {
    setModal("pressed");
    } else {
    setModal("entered");
    }
    } public void mouseExited(MouseEvent e) {
    if (!enabled)
    return;
    entered = false;
    setModal("");
    } public void mousePressed(MouseEvent e) {
    if (!enabled)
    return;
    pressed = true;
    setModal("pressed");
    } public void mouseReleased(MouseEvent e) {
    if (!enabled)
    return;
    pressed = false;
    if (entered) {
    setModal("entered");
    } else {
    setModal("");
    }
    }
    //判断并设置模态,鼠标在图标上为entered
    public void setModal() {
    if (entered) {
    setModal("entered");
    } else {
    setModal("");
    }
    } public void setModal(String modal) {
    this.modal = modal;
    repaint();
    } public void setIBEnabled(Boolean isenabled) {
    enabled = isenabled;
    if (enabled) {
    setModal();
    } else {
    setModal("");
    }
    } public void setText(String text) {
    this.textPanel.setText(text);
    }
    //重写
    @Override
    public void setForeground(Color fg) {
    super.setForeground(fg);
    if (textPanel != null)
    textPanel.setForeground(fg);
    } @Override
    public void setSize(int width, int height) {
    super.setSize(width, height);
    image.setSize(width, height);
    textPanel.setSize(width, height);
    } @Override
    public void setFont(Font font) {
    super.setFont(font);
    if (textPanel != null) {
    textPanel.setFont(font);
    textPanel.setSize(textPanel.getPreferredSize().width,
    textPanel.getHeight());
    }
    } @Override
    public void paint(Graphics g) {
    try {
    ImageIcon img = null;
    if ("".equals(modal)) {

    img = new ImageIcon(this.getClass().getResource(
    "/images/" + name + ".png"));
    } else {
    img = new ImageIcon(this.getClass().getResource(
    "/images/" + name + "_" + modal + ".png"));
    }
    if (img.getImage() != null)
    g.drawImage(img.getImage(),
    (getWidth() - img.getIconWidth()) / 2,
    (getHeight() - img.getIconHeight()) / 2, image);
    } catch (NullPointerException e) {
    // super.paint(g);
    }
    if (textPanel != null) {
    g.setColor(Color.BLACK);
    g.setFont(textPanel.getFont());
    g.drawString(textPanel.getText(), (int) (getWidth() - textPanel
    .getPreferredSize().getWidth()) / 2 + 1,
    getHeight() / 2 + 7);
    textPanel.paint(g);
    }
    }
    }
      

  3.   

    厉害,原来那些棋子实际上就是JButton派生类对象