提问者:小点点

如何使我的旧JFrame到JPanel,以及如何使它在我使用JFrame时实际工作


我对摇摆库真的很陌生,就像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);

}

共3个答案

匿名用户

您应该如何在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内置示例。