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

基于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开发一款扫雷游戏: 我的是由组成的,我试图找到一种方法来计算在上单击的图像的列和行索引。我目前有这个代码: 但是,方法和返回。我做错了什么?

  • 问题内容: 亲爱的大家,我遇到了挥杆相关的问题。由于违反公司政策,我无法共享代码,因此我将尽力解释该问题。 简而言之,我创建了一个扩展包含JLabel的JWindow的类。JLabel的文本是通过计时器对象随机更新的,该计时器对象使用scheduleAtFixedRate方法每50毫秒实例化一个TimerTask。JLabel中的值是通过在一个单独的线程(称为传输线程)中调用一个方法来检索的,该线

  • 问题内容: 我有一个简单的Java程序,该程序读取一个文本文件,将其分隔为“”(空格),显示第一个单词,等待2秒,显示下一个…等等…我想在Spring或其他一些GUI。 关于如何使用spring轻松更新单词的任何建议?遍历我的列表并以某种方式使用setText(); 我没有运气。我正在使用此方法在consol中打印我的单词,并向其中添加JFrame …在consol中效果很好,但是却发出了无尽的j