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

时间:2014-04-29 04:25:05

标签: java swing jframe jpanel

我真的很喜欢摇摆lib,就像5天前我开始使用它...所以我有很多问题...首先,我在JFrame上做了一个Tic Tac Toe游戏,离开会很酷就像那样,但后来我想出了一个小菜单来访问多个小游戏(目前为止只是为了娱乐/练习)。所以我真的成功了,然后就发生了...我在JFrames制作了所有的游戏,所以,制作一个菜单也是另一个JFrame,所以我有这么多窗口......所有的时间!

我做了一些研究,人们通常会为这种东西制作Jpanels ..但我不知道如何将我的游戏(Tic Tac Toe)转移到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);

}

3 个答案:

答案 0 :(得分:1)

如何在JPanels内构建JFrame是一个超出本网站范围的架构问题。

帮助您了解这两种容器之间的区别:

更改public class Gato extends javax.swing.JFrame implements ActionListener {

public class Gato extends javax.swing.JPanel implements 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来测试它们,以便独立于任何容器来测试它们。

答案 1 :(得分:0)

不是将组件添加到JFrame,而是将其添加到JPanel,然后将JPanel添加到JFrame

答案 2 :(得分:0)

对于您的问题,您只需要一个JDesktopPane,并且您的所有JFrame都需要JIternalFrame并在JDesktopPane中调用所有InternalFrame。

Go to this link and check out examples

您不需要将它们转换为面板和所有。 或者您也可以尝试使用netbeans内置的JDesktopPane示例。