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

Java Gui GridLayout-访问对象

松雅昶
2023-03-14

我正在尝试创建一个连接四的GUI。

我有一个类Gui,它创建了一个板(一个数组[][]ints)和一个html" target="_blank">方法move,它接受player(int)和column(int)以及一个检查是否有赢家的方法。

我用gridLayout创建了一个gui,我有一行按钮和7个JLabel数组(这是一个空槽的ImageIcon)。如果玩家选择了一个特定数组的最下面的JLabel列,我现在需要访问该列。

我在一个循环中创建了按钮:

  1. a)如何访问每个按钮-它们没有唯一的名称。
  2. b)如何访问每个JLabel--它们也是在循环中创建的
  3. c)我应该在哪里实例化我的Board类?
  4. d)当我在gui中添加每个新对象时,我有这个。add(JLabel)--

我如何把所有这些放入一个新的面板,这样我就可以在我的网格顶部有一个标题栏?

我的gui代码

import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

public class ConnectFourGui extends JFrame {

private JLabel title;
private JButton button;
ImageIcon[] emptySlot;
ImageIcon arrow;

public ConnectFourGui() {
    this.setTitle("Connect Four");
    this.setSize(800, 800);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //JPanel panel = new JPanel();

    //Container container = this.getContentPane();
    this.setLayout(new GridLayout(7, 7));

    this.title = new JLabel("Connect Four");
    title.setForeground(Color.RED);
    title.setFont(new Font("Sans-Serif", Font.BOLD, 50));
    title.setHorizontalAlignment(SwingConstants.CENTER);


    for (int i = 0; i < 7; i++){
        arrow = new ImageIcon("arrowButton.png");
        this.button = new JButton(arrow);
        this.add(button);
    }
    for (int i = 0; i < 7; i++){
        emptySlot = new ImageIcon[6];
        for (int j = 0; j<6;j++){
            emptySlot[j] = new ImageIcon("emptySlot.png");
            this.add(new JLabel(emptySlot[j]));
        }
    }   

共有1个答案

松智勇
2023-03-14

尝试为每列创建独立的数组,如下所示(参见下面的代码)。还要使数组成为JLabels数组,而不是ImageIcons数组。并使用唯一的名称创建每个按钮。

column1 = new JLabel[6];
    column2 = new JLabel[6];
    column3 = new JLabel[6];
    column4 = new JLabel[6];
    column5 = new JLabel[6];
    column6 = new JLabel[6];
    column7 = new JLabel[6];

    for (int j = 0; j < 6; j++) {
        column1[j] = new JLabel(emptySlot);
        column2[j] = new JLabel(emptySlot);
        column3[j] = new JLabel(emptySlot);
        column4[j] = new JLabel(emptySlot);
        column5[j] = new JLabel(emptySlot);
        column6[j] = new JLabel(emptySlot);
        column7[j] = new JLabel(emptySlot);
        this.add(column1[j]);
        this.add(column2[j]);
        this.add(column3[j]);
        this.add(column4[j]);
        this.add(column5[j]);
        this.add(column6[j]);
        this.add(column7[j]);
    }

若要根据顶部的按钮在数组中获取元素,请执行如下操作

buttonName.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent a) {
            column1[3].setIcon(newIcon);
}
}
  • 您将使用一个变量,而不是作为示例使用的数字3

在构造函数中实例化board类。

 类似资料:
  • class RelatedManager "关联管理器"是在一对多或者多对多的关联上下文中使用的管理器。它存在于下面两种情况: ForeignKey关系的“另一边”。像这样: from django.db import models class Reporter(models.Model): # ... pass class Article(models.Model):

  • 问题内容: 我目前正在使用Node-webkit开发桌面应用程序。在此过程中,我需要从本地MySQL数据库获取一些数据。 查询工作正常,但我不知道如何访问结果。我将它们全部存储在一个数组中,然后将其传递给函数。在控制台中,它们如下所示: 这是查询结构: 如何在函数中检索此内容?值更重要,但是如果我也能得到键,那将是很好的。 问题答案: 原来它们是普通对象,您可以通过访问它们。 RowDataPac

  • 根据我的理解,在没有给出访问权限的情况下,任何IAM用户都不能访问S3桶/对象。但是在我的用例中,我能够访问它。 我误解了S3的安全策略吗?这是我的用例我有根帐户在AWS,说根用户。这个用户创建了两个IAM用户,比如管理员和测试用户。并且root用户对两个IAM用户都给予了S3FullAccess权限。 现在我以管理员身份登录并创建了一个Bucket(比如Test)。并启用“阻止所有公共访问”。

  • 问题内容: 首先看下面的JavaScript对象 我想将值设置为与相同,因此我将对象值放在前面,但它对我不起作用,我也使用过,但仍然失败。我的问题是如何访问对象内对象的属性。 一些用户沉迷于问“您想做什么或发送脚本等”,对于那些人来说,答案很简单:“我想访问对象内的对象属性”,上面提到了脚本。 任何帮助将不胜感激 :) 问题答案: 使用 对象文字 语法时,不能在初始化期间引用对象。创建对象后,需要

  • 问题内容: 我最近拾起Java并遇到了问题。我有几个具有不同类的文件,但是我无法弄清楚如何访问文件中声明了其他类之外的其他类的对象。例如: 我不确定如何从其他文件和类本身有效访问其他类的这些对象?我知道我可以使对象静态化,然后通过它们所在的类将它们作为变量进行访问,但这似乎有点违反直觉?我来自面向对象较少的编程背景,因此我仍在尝试了解Java的编程风格。 问题答案: 您可能只想要这样的东西: 希望

  • 问题内容: 问题答案: 你不能 JavaScript中没有向上关系。 举个例子: 现在,单个数组对象具有两个“父级”。 您可以做的是: