当前位置: 首页 > 知识库问答 >
问题:

基于JLabel单击更新Jframe

拓拔嘉颖
2023-03-14

我目前正在用Java制作一个“超级Tic-Tac-Toe”应用程序。以下是我的目标描述。http://mathwithbaddrawings.com/ultimate-tic-tac-toe-original-post.然而,我在点击更新Jframe时遇到了问题。我的应用程序由单独的单元(JLabel)组成,它们构成了Tic-Tac趾板(JPanel),该趾板将驻留在JFrame中。

我的问题是,在MouseClick上使用getSource只会让我像我的JPanel一样渗透,而且我无法访问tic-tac-toe网格的哪个单元格被按下。有没有办法检查一下,我目前组织这个项目的方法到底是哪一个?

以下是我查看包含侦听器的TictaToe板的代码:

public class TicTacToeView extends JPanel {
    public CellView[][] cv;
    public TicTacToe ttt;
    public TicTacToeView(TicTacToe t) {
        int rows = 3;
        int columns = 3;
        cv = new CellView[3][3];
        ttt = t;

        setSize(3 * 64, 3 * 64);
        setBackground(Color.white);
        setLayout(new GridLayout(rows, columns));
        setVisible(true);
        setFocusable(true);
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j ++) {
                System.out.println(ttt.getCellAt(i, j).toString());
                cv[i][j] = new CellView(ttt.getCellAt(i, j));
                cv[i][j].addMouseListener(new yourListener());
                add(cv[i][j]);
            }
        }

        setVisible(true);
    }

    public String toString() {
        return ttt.toString();
    }

    public class yourListener extends MouseAdapter{ 
        public void mouseClicked(MouseEvent e){

            CellView labelReference=(CellView)e.getSource();
            Cell cellClicked = labelReference.getCell();

            System.out.println(cellClicked.getCol() +"," + cellClicked.getRow());
            cellClicked.setState(CellState.O);
            ttt.setCellAt(cellClicked.getCol(), cellClicked.getRow(), CellState.O);
            System.out.println(ttt.toString());

       }
    }
}

现在当我打开系统的时候。输出时,它会按预期将正确的单元格更改为O。但我不知道如何从这里更新框架,因为游戏框架就是由这个组成的。

共有2个答案

漆雕奇逸
2023-03-14

我的问题是告诉帧更新该单元格。对不起,我的解释不清楚。

虽然可以通过CellView找到框架,但它不是必需的,相反,当调用CellView#setState时,它应该调用revalidaterepaint

毛德华
2023-03-14

首先,停止为鼠标侦听器使用单独的类,这是问题的根源。直接将鼠标侦听器添加到cv[i][j]。您将能够更新框架,因为现在鼠标侦听器也在同一个类中。

干杯。

 类似资料:
  • 问题内容: 我正在使用此处找到的自定义表格模型。我已经使用该帖子中提供的建议更新了我的代码,并遇到了一个新问题。我对我的代码所做的改变是一个注入到我,以避免与线程的问题。完成此操作后,通过按按钮更新我的表的代码已停止工作。 用于初始化的代码如下: 我用来更新的代码如下: 我也尝试过使用,但这也不起作用。截至目前,更新的唯一方法是关闭并重新打开程序。具有我正在使用的,随着用户添加更多玩家,尺寸会增加

  • 问题内容: 我想用setText()方法更新jlabel和jtextfield,但是它不起作用。但是,其余代码仍在工作。代码如下; 在这里,islemSureci是JLabel,而textFiled是JTextField。设置它们后,它不起作用。代码中的所有工作完成后,它们就会出现。请问原因是什么? 问题答案: 我认为您的意思是 “所有工作完成之后” 是从文件(您注释的行)中加载文本。我认为这段代

  • 我正在尝试使用JAVA(android Studio)创建一个简单的android应用程序。我愿意实现的是,应用程序的背景颜色将根据TextView的内容进行更改(在“打开”和“关闭”两个值之间不断更新)。我知道必须使用onChanged(),但我真的不知道如何实现TextView的侦听器。 我试着这样写:基于我在网上找到的内容,但无法真正了解下一步是什么。我完全是个新手,所以请善待我。 顺致敬意

  • 我正在使用JavaFX开发一款扫雷游戏: 我的是由组成的,我试图找到一种方法来计算在上单击的图像的列和行索引。我目前有这个代码: 但是,方法和返回。我做错了什么?

  • 我正在做一个计数计时器使用按钮开始和停止。 我需要帮助解决这个...当我按下“Start”按钮时,它可以工作(使用)但是不会为我更新。 但是,如果将放在而不是在settext会更新...但我没有按“开始”键。如何使setText在“开始”按钮被按下后更新?

  • 所以我的代码是: 我希望能够增加仅单击项目的