【问题标题】:How to make my old JFrame to JPanel, and how to make it actually work as it worked while I used JFrame如何将我的旧 JFrame 制作为 JPanel,以及如何让它在我使用 JFrame 时真正发挥作用
【发布时间】:2014-04-29 04:25:04
【问题描述】:

我真的是swing lib的新手,大概5天前我开始使用它...所以我有很多问题...首先,我在JFrame上制作了一个井字游戏,离开会很酷就像那样,但后来我想到了制作一个小菜单来访问多个小游戏(到目前为止只是为了好玩/练习)。所以我实际上成功了,然后它发生了……我在 JFrames 中制作了我所有的游戏,所以,为了让菜单也成为另一个 JFrame,所以我有这么多窗口……一直!

我做了一些研究,人们通常会为这类东西制作 Jpanels。但我不知道如何将我的游戏(井字游戏)转移到 JPanel 并使其完全按原样工作......这是我的JFrame中井字游戏的代码……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);

}

【问题讨论】:

  • 对于一个空间中的许多组件(例如游戏和菜单),请使用CardLayout(在框架中),如short example所示。
  • o.setBounds(60, 60, 100, 100); Java GUI 可能必须在多个平台、不同的屏幕分辨率和使用不同的 PLAF 上工作。因此,它们不利于组件的精确放置。要为强大的 GUI 组织组件,请改用布局管理器或 combinations of them,以及 white space 的布局填充和边框。

标签: java swing jframe jpanel


【解决方案1】:

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

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

更改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 来测试它们,以便独立于任何容器来测试它们。

【讨论】:

    【解决方案2】:

    不要将组件添加到JFrame,而是将它们添加到JPanel,然后将JPanel 添加到JFrame

    【讨论】:

    • 试过了...但它不会在 JFrame idk 上显示 JPanel 为什么
    • @AlbertoCantu 然后将代码发布在您执行此操作的位置,以便我们了解问题的真正所在。了解当您将组件添加到 JFrame 时,它实际上会将它们添加到其内容窗格中,其行为类似于 JPanel
    【解决方案3】:

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

    Go to this link and check out examples

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

    【讨论】:

    • 他为什么需要很多帧?如果您的菜单浮动在一个地方而游戏浮动在其他地方,这只会让用户感到困惑并且在游戏菜单中没有任何用处。
    猜你喜欢
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 2015-01-20
    相关资源
    最近更新 更多