我正在尝试使用java swing在人类象棋程序上创建人类。我有64 jPanels
背对背(在灰色和白色背景颜色之间交替),每个内部都有一个jLabel
,我用它来显示碎片的图标。
现在我正在尝试制作它,以便您可以通过单击面板中的一个面板将一个面板移动到另一个面板。我还使用一个名为“board”的图标数组来存储所有部分的位置。
到目前为止,该程序将第一次单击jPanel
的图标复制到第二个(并对板阵列进行相应的更改)。但是,我无法从首次点击的jPanel
中删除图标,以便该部分实际上“移动”,而不是仅仅重复。
我知道我需要在某种变量中存储最初选择哪个面板,然后在点击第二个面板时使用该变量将原始jPanel
的图标设置为null
。但是,如果没有为所选面板(1-64)使用整数,然后使用非常长的切换语句(switch (int), case 1: jPanel1.setIcon(null), case 2: jPanel2.setIcon(null))
等),我不知道要使用哪种变量。
有没有更简单的方法(仅仅使用switch语句)?像某种对象变量,我可以在里面存储一个swing对象,然后用它来命令存储在里面的任何对象?任何人都知道如何做我正在谈论的事情?非常感谢帮助。
我处理鼠标点击事件的代码:
private void jPanel1MouseClicked(java.awt.event.MouseEvent evt) {
if (pieceSelected == false)
{
pieceSelection = board[0][0];
pieceSelected = true;
} else //if a piece was selected when this panel was clicked
{
//change this panel's icon to the icon of the first panel
jLabel1.setIcon(pieceSelection);
board[0][0] = pieceSelection;
//change the icon of the first square clicked to null
//the following part is the part i'm having trouble with
//board[last x coordinate][last y coordinate] = null;
//lastjPanel.setIcon(null)
pieceSelected = false;
}
}
答案 0 :(得分:0)
你应该制作一个大小为[8] [8]的jPanels的二维数组,例如
JPanel[8][8] chessBoard = ...
而不是
JPanel jPanel1...
JPanel jPanel2...
JPanel jPanel3...
JPanel jPanel4...
...
然后,您可以通过编程方式以相同的方式访问所有JPanel,而无需将任何代码写入64次。你可以迭代,搜索等等。