Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与JFrame组件交互_Java_Swing_Gridview_Jframe_Components - Fatal编程技术网

Java 与JFrame组件交互

Java 与JFrame组件交互,java,swing,gridview,jframe,components,Java,Swing,Gridview,Jframe,Components,我正在尝试使用Swing构建一个非常简单的connect 4游戏。 主游戏按预期工作,但当我在更大的GUI中使用它作为组件时,我无法再与它交互 这是主要的GUI代码: import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridLayout; import javax.swing.JButton; im

我正在尝试使用Swing构建一个非常简单的connect 4游戏。
主游戏按预期工作,但当我在更大的GUI中使用它作为组件时,我无法再与它交互

这是主要的GUI代码:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MainLayout extends JFrame {

    public MainLayout(){

        // TOP PANEL, series of button using FlowLayout
        JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 30, 10));
        topPanel.setBackground(Color.BLUE);

        JButton newGameBtn = new JButton("New Game");
        topPanel.add(newGameBtn);

        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setLayout(new BorderLayout(5,5));
        this.getContentPane().setBackground(Color.cyan);
        this.setTitle("Connect 4");

        JPanel grid = new JPanel(new GridLayout(6,7,3,3));
        grid.setBackground(Color.blue);

        board comp = new board(new Dimension(7,6), new Dimension(60, 60));
        comp.setFocusable(true);
        comp.setEnabled(true);
        this.getContentPane().add(topPanel, BorderLayout.NORTH);
        this.getContentPane().add(comp, BorderLayout.CENTER);
        this.setSize(420,430);
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MainLayout mainWindow = new MainLayout();
        mainWindow.setVisible(true);
    }
}

电路板组件使用键盘输入来移动正方形。

“电路板组件使用键盘输入来移动正方形”-让我“猜猜”,您使用的是键盘监听器是,keyListener可以单独为电路板工作,但当我尝试将其用作网格布局中的组件时,它会停止工作。这是因为KeyEvents只被分派到具有焦点的组件。当帧上有其他组件时,组件会失去焦点,因此它永远不会接收KeyEvent。不要使用KeyListener。相反,您应该使用
键绑定
。有关比较KeyListener和键绑定的更多信息和示例,请参阅。