我对 swing lib 真的很陌生,大概 5 天前我开始使用它...所以我有很多问题...首先,我在 JFrame 上制作了一个 Tic Tac Toe 游戏,离开会很酷就像这样,但后来我想到了制作一个小菜单来访问多个小游戏(到目前为止只是为了好玩/练习)。所以我实际上成功了,然后它发生了......我在 JFrames 中制作了所有游戏,所以,制作一个菜单也是另一个 JFrame,所以我有这么多窗口......一直!
我做了一些研究,人们通常为这类东西制作 Jpanels.. 但我不知道如何将我的游戏(井字棋)转移到 JPanel 并使其完全按照原来的方式工作...这是我的JFrame 中 Tic Tac Toe 的代码...IDE 是 netbeans。
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.*;
public class Gato extends javax.swing.JFrame implements ActionListener {
Boton MAPA[][];
public static boolean turno=true;
public Gato(){
initComponents();
MAPA= new Boton[3][3];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
MAPA [i][j]=new Boton();
MAPA[i][j].u.setBounds((i*230)+10,(j*230)+10,230,230);
MAPA[i][j].u.addActionListener(this);
this.add(MAPA[i][j].u);
}
}
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel o=new JLabel("Hola");
o.setBounds(60, 60, 100, 100);
this.add(o);
}
最佳答案
如何在 JFrame
中构建 JPanels
是一个架构问题,超出了本网站的范围。
帮助您了解这两种容器之间的区别:
更改公共(public)类 Gato 扩展 javax.swing.JFrame 实现 ActionListener {
到公共(public)类Gato扩展javax.swing.JPanel实现ActionListener {
然后,创建一个新的“驱动程序”类,执行如下操作:
public static void main(String[] args){
JFrame frame = new JFrame();
Gato gato = new Gato();
frame.setContentPane(gato);
frame.setVisible(true);
}
JFrame 和 JPanel 之间的唯一区别是 JFrame 是顶级容器 - 它作为自己的窗口存在 - 而 JPanel 是必须加载到顶级容器内的东西。 Here关于它们在概念上的差异进行了精彩的讨论。
在实践中,一旦你创建了框架并将面板嵌入到其中(这个过程有一些怪癖,我承认当我第一次接触 Swing 时,它们让我绊倒了好几次 -请务必仔细阅读 documentation,特别注意 JFrame.pack()
和 JPanel.validate()
),您可以像您一样对待该面板如果它是一个框架,就会。
事实上,我经常通过将 JPanel 元素更改为 JFrame 来测试它们,以便独立于任何容器进行测试。
关于java - 如何将我的旧 JFrame 转换为 JPanel,以及如何使其像我使用 JFrame 时一样实际工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23355447/