Java 与JFrame组件交互
我正在尝试使用Swing构建一个非常简单的connect 4游戏。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
主游戏按预期工作,但当我在更大的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和键绑定的更多信息和示例,请参阅。