gpt4 book ai didi

java - SWT 按钮网格

转载 作者:行者123 更新时间:2023-11-30 04:46:16 26 4
gpt4 key购买 nike

这个问题已经困扰我三天了。我必须重写一个小井字棋(n x n 的五子棋)游戏的 UI。问题是,当我创建 swing GUI 时,我创建了一个继承 JButton 属性的新类,并添加了一个 int 行和一个 int 列。我无法使用 SWT(无继承)做到这一点。有没有办法让我将 i 和 j 的值添加到按钮。

这是 Swing 中的示例:

for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
final MyJButton button = new MyJButton(i, j);
button.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
MoveResult move = game.move(button.getRow(), button.getCol());
switch (move) {
case ValidMove:
button.setBackground(game.getCurrentPlayer().getColor());
game.changePlayer();
break;
}
}
}
}
}
}

我为游戏类提供 i 和 j,将其提供给表类来检查移动。

if (table.getElement(x, y) != PieceType.NONE) return MoveResult.InvalidMove;
private PieceType[][] table;

有没有办法在 SWT 中做同样的事情,欢迎任何指示。

这就是我做的

buttonpanel = new Composite(shell, SWT.NONE);
buttonpanel.setLayout(new org.eclipse.swt.layout.GridLayout(cols, true));
buttonTable = new Button[rows][cols];

for (int i = 0; i < rows; ++i){
for (int j = 0; j < cols; ++j) {
gridData.heightHint = 45;
gridData.widthHint = 45;

Button button = new Button(buttonpanel, SWT.PUSH);
button.setLayoutData(gridData);
buttonTable[i][j] = button;
buttonTable[i][j].addSelectionListener(new buttSelectionListener());
// buttonpanel.pack();
}
}

最佳答案

我看到两种解决方案:

  • 使用 Button 的 setData 方法(在 Widget 父类(super class)中定义)关联包含 x 和 y 的对象(您将在提供给监听器的事件对象中找到这些数据)
  • 为每个按钮使用不同的监听器

就您而言,第一个解决方案似乎是最自然的。这意味着创建一个包含 x 和 y 的类(我们称之为 Cell),并执行

button.setData(new Cell(i, j));

在你的监听器中使用

game.move(e.data.x, e.data.y);

关于java - SWT 按钮网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10882890/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com