我对摇摆库真的很陌生,就像5天前我开始使用它一样…所以我有很多问题…首先,我在JFrame上做了一个井字游戏,这样会很酷,但是后来我有了一个想法,制作一个小菜单来访问多个小游戏(只是为了好玩/练习到目前为止)。所以我真的成功了,然后它发生了…我在JFrames中制作了我所有的游戏,所以,制作菜单也是另一个JFrame,所以我有这么多窗口…所有的时间!
但我不知道如何将我的游戏(井字游戏)转移到JPanel并使其完全按原样工作这是我在JFrame中的井字游戏代码IDE是netbean。
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
是一个超出本网站范围的架构问题。
为了帮助您了解这两种容器之间的区别:
Change公共类Gato扩展javax. swing.JFrame实现ActionListener{
to公共类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是必须加载到顶级容器中的东西。这里从概念上讨论了它们之间的区别。
实际上,一旦你创建了框架并将面板嵌入其中(这个过程有一些怪癖,我承认当我第一次绕着Swing转的时候,它们绊倒了我好几次——一定要非常仔细地阅读留档,特别注意JFrame. pack()
和JPanel.valate()
),你可以像对待框架一样对待那个面板。
事实上,我经常通过将JPanel元素更改为JFrames来测试它们,以便独立于任何容器进行测试。
不要将组件添加到JFrame
,而是将它们添加到JPanel
,然后将JPanel
添加到JFrame
。
对于您的问题,您只需要一个JDesktopPane,并且您的所有JFrame都需要JIternalFrame并调用JDesktopPane中的所有InternalFrame。
转到此链接并查看示例
您不需要将它们转换为面板等。或者您也可以尝试JDesktopPane的netbean内置示例。