java - 如何将我的旧 JFrame 转换为 JPanel,以及如何使其像我使用 JFrame 时一样实际工作

标签 java swing jframe jpanel

我对 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/

相关文章:

java - 为什么我的共享首选项即使在全新安装后仍包含我的 key ?

java - 在自定义 java 类中反序列化 MapWritable

JAVA - 图形不更新

java - 如何在默认表模型上添加行

java - graphics.setColor(颜色);不工作

java - org.apache.commons.lang3.StringUtils 与 org.apache.logging.log4j.util.Strings

java - 半秒后更新 JLabel 中包含的图片

java - 将多个actionListener添加到多个JButton

java - 如何在 Swing 中使用 pack() 设置边距?

java - JFrame 留在后台而不是关闭