Java Gui GridLayout-访问对象

时间:2015-11-09 00:42:44

标签: java user-interface

我正在尝试连接四个gui。

我有一个类Gui,它创建一个board(一个array [] [] ints)和一个方法move-接受player(int)和column(int) - 以及一个检查是否有胜利者的方法。

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

我在循环中创建了按钮:

  1. A)如何访问每个按钮 - 它们没有唯一的名称。
  2. B)如何访问每个JLabel-它们也是在循环中创建的
  3. C)我想在哪里实例化我的董事会成员?
  4. D)当我在gui中添加每个新对象时 this.add(JLabel的) -
  5. 如何将所有内容放入新面板中,以便在网格顶部设置标题栏?

    我的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 个答案:

答案 0 :(得分:0)

尝试为每列创建单独的数组(请参阅下面的代码)。还要使您的数组成为JLabel数组,而不是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);
}
}
  • 您将使用变量而不是我用作示例的数字

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