【问题标题】:How to attach an object of any type to a JButton in java?java - 如何将任何类型的对象附加到Java中的JButton?
【发布时间】:2018-04-23 15:27:23
【问题描述】:

我目前正在为国际象棋游戏创建 GUI。这是大学作业。目前,我们已经完成了引擎。 因此,对于电路板,我使用以下代码创建了一个二维 JButton 数组。

public class GUI extends JFrame implements ActionListener {

    private JPanel gameBoard;
    private JButton[][] board = new JButton[4][4];
    gameBoard = new JPanel();
    add(board);
    gameBoard.setLayout(new GridLayout(7, 6));
    gameBoard.setBounds(400, 30, 700, 700);
    board = new JButton[4][4] 
    for(int i = 0;i<4;i++) {
      for(int j = 0;j < 4;j++) {
         board[i][j] = new JButton();
         gameBoard.add(board[i][j]);
      }
    }
}  

我是一个初学者,所以如果这段代码给你带来了一场噩梦,我深表歉意哈哈,但如果有人照原样接受我的实现并告诉我如何从引擎中添加一个实际的部分,我会很高兴。引擎自行组装零件并创建自己的板。我还在我的 GUI 中初始化了一个新游戏,所以我可以使用我的引擎方法而不是 getsPieces 等。我的问题是,如何将 Piece 类型的对象附加到 JButton?谢谢!我也愿意提供有关如何改进我的问题的提示,谢谢。

【问题讨论】:

  • 让您的 Piece 扩展 JButton 类,然后让您的电路板成为 Piece 的集合而不是 JButtons
  • @RAZ_Muh_Taz 不能那样做,Milestone 说我不能碰引擎,但要创造别的东西。引擎包含一块棋子板,但我需要将这些棋子连接到按钮板上,以便实现运动。

标签: java user-interface chess


【解决方案1】:

我看到了几个解决方案:

使用地图绑定

您可以考虑做相反的事情:创建一个映射以将按钮绑定到胸件(类似于一种 SQL 连接表)。你可以实现类似的东西:

final Map<Piece, JButton> piecePositions = new HashMap<>();

// When game starts, fill the map
void start() {
    piecePositions.put(whiteTower1, btnx0y0);
    ...
}

// When you move a piece, all you have to do is changing the assignment
void move (Piece toMove, JButton destination) {
    piecePositions.put(toMove, destination);
}

使用自定义图标

另一个答案是创建一个 Icon 的子类,它有一个 Piece 作为属性。这样,您可以通过图标直接将棋子与 JButton 关联,并且作为奖励,您的按钮将立即显示棋子图标。

class PieceIcon extends ImageIcon {
    final Piece piece;

    PieceIcon(URL pieceImage, Piece piece) {
        super(pieceImage);
        this.piece = piece;
    }

    // When you move, you change your buttons
    public void move(JButton from, JButton to) {
        to.setIcon(from.getIcon());
        from.setIcon(null);
    }
}

最后一句话

但是,我必须承认,以前的两个答案都是一种黑客行为。为了正确管理游戏板,我将通过创建一个“网格”类来添加一个间接级别,该类的作用是管理板分配。这样,您可以测试多种解决方案,比我建议的要先进得多。

祝你的项目好运。

【讨论】:

  • 谢谢哥们,这给了我一些想法!
猜你喜欢
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2021-06-20
  • 2023-02-02
  • 2023-03-21
相关资源
最近更新 更多