【问题标题】:Adding a JPanel to a JFrame in Netbeans在 Netbeans 中将 JPanel 添加到 JFrame
【发布时间】:2012-05-24 08:01:16
【问题描述】:

我在 Netbeans 中创建了 JFrame 类,并使用生成器添加了 jPanel。我也有课,它扩展了JPanel。现在我想创建这个类的对象,并将他添加到JFrame 中我的面板所在的位置,但我找不到正确的方法,因为我尝试的所有方法都没有结果

public static void main(String args[]) {
    
    java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {
            Frame f  = new Frame();
            jPanel1  = new MyPanel();
            f.pack();
            f.setVisible(true);
        }
    });

好的,也许我会举一个更精确的例子:

第一个文件:

class MyPanel extends javax.swing.JPanel {
public MyPanel() {
        initComponents();
        
    }
}

另一个文件,带有框架:

public class Frame extends javax.swing.JFrame {
public Frame() {
        initComponents();
}
public static void main(String args[]) {
        
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                Frame f  = new Frame();
                MyPanel p = new MyPanel();
                jPanel1 = p;
            }
        });
    }
private javax.swing.JButton jButton1;
private javax.swing.JPanel jPanel1;

我想设置在 jPanel1 的地方 - 对象 MyPanel

【问题讨论】:

  • 你会想要阅读 Swing 教程,因为那里已经解释了所有内容。
  • 您的问题是指使用JFrame 并且代码显示Frame 哪个是正确的?
  • 不是因为 Swing,而是因为 Netbeans
  • 说:我创建了JFrame我的意思是我在Netbeans中构建了JFrame Form,这个类的名字是Frame

标签: java swing user-interface netbeans


【解决方案1】:

您需要将面板添加到框架中:

f.add(jPanel1)

以下独立代码适用于我:

    public static void main(String[] args)
    {

        Frame f  = new Frame();
        Panel jPanel1  = new Panel();
        jPanel1.add(new Button("Hello"));
        f.add(jPanel1  );
        f.pack();
        f.setVisible(true);
    }

【讨论】:

  • 我以前试过这个,但它不起作用。甚至我的构造函数也有 initComponents 方法
  • 为了清楚起见,您应该始终使用 f.getContentPane().add(...)
  • @ControlAltDel getContentPane() 方法是在 JFrame 中而不是在 Frame 中定义的。
  • @ControlAltDel JFrame.add() 等价于JFrame.getContentPane().add() 如所述here: Lastly, after seven years, we've made jFrame.add equivalent to jFrame.getContentPane().add().
  • 它的工作,但我谈论不同的情况。我创建了框架类,它扩展了 JFrame。使用 Netbeans Design 我在那里设置了一些 Buttons 和 jPanel1。我还有类 MyPanel,它扩展了 JPanel。我的问题是,我不能用 MyPanel 类的对象替换这个 jPanel1。当我自己编写框架和面板时,我知道该怎么做,但是使用 netbeans 我无法替换它。
【解决方案2】:

你的问题: 您的 MyPanel 实例未添加到主框架中。

解决方案: 将您的 MyPanel 实例添加到主框架的内容窗格中。

类似:

JFrame f  = new JFrame();
MyPanel jPanel1  = new MyPanel();
f.getContentPane().add(jPanel1  );
f.pack();
f.setVisible(true);

【讨论】:

  • getContentPane() 方法是在 JFrame 中而不是在 Frame 中定义的。
  • @SurajChandran 抱歉,打错了。 OP的问题是指JFrame而不是Frame
  • 它的工作,但我谈论不同的情况。我创建了框架类,它扩展了 JFrame。使用 Netbeans Design 我在那里设置了一些 Buttons 和 jPanel1。我还有类 MyPanel,它扩展了 JPanel。我的问题是,我不能用 MyPanel 类的对象替换这个 jPanel1。当我自己编写框架和面板时,我知道该怎么做,但是使用 netbeans 我无法替换它。
【解决方案3】:

以上答案是正确的 - 您需要将这个 MyPanel 实际添加到 Frame 的 contentPane 中。

此外,您可能应该使用 Swing 而不是普通的 AWT。 代码如下所示:

SwingUtilities.invokeLater(new Runnable() {

        @Override //annotation if you are using Java >= 1.5
        public void run() {
            JFrame f = new JFrame();
            MyPanel jPanel1 = new MyPanel();
            f.getContentPane().add(jPanel1);
            f.pack();
            f.setVisible(true);
        }
    });

【讨论】:

    【解决方案4】:

    JFrame jframe = new JFrame();

    JPanel jpanel = new JPanel();

    jframe.add(jpanel);

    例如:

       public Myclass extends JFrame{
    
       public Myclass(){
    
        this.setSize(300,300);
    
        this.add(new Mypanel());
    
         }
    
            class Mypanel extends JPanel{
    
                     // Add what u want to add in panel
                  }
    
    
       }
    

    【讨论】:

      【解决方案5】:

      也许问题是你有一个空的 JPanel,我的意思是,你必须使用 frame.add(MyPanel instance) 但你也必须使用(即在 MyPanel initComponents 中) add(jButton) 或类似的东西..

      你也可以尝试设置布局

      setLayout(new GridLayout(1, 1)); //也在initComponents方法中。

      你能同时显示两个 initComponents();方法?


      编辑:

      如果您使用的是 Netbeans 编辑器

      右键单击组件面板

      转到调色板管理器

      从项目(如果它是一个打开的项目)或 jar 中添加,无论你想要什么。您可以在那里浏览您的课程并查找您的 MyPanel 文件。

      然后您还将选择该组件必须出现在哪个文件夹或菜单中,

      然后你应该可以像普通的 JPanel 一样拖动它。

      【讨论】:

        【解决方案6】:

        这是一个很棒的教程,它教授有关面板的所有内容。 它教你如何创建一个包含 JPanel 的 JFrame。

        Go to the Video tutorial

        如果您想找到有趣的视频,请访问此频道

        Full list of Video tutorials

        【讨论】:

          【解决方案7】:

          你们中没有一个人能理解这个问题。该人有自己的 JPanel,以前创建的,而不是在 netbeans 小部件设计器中。他们在问您如何将您已经在其他时间构建的自定义 JPanel 添加到 JFrame 或 Frame,或者当您在设计器中创建“Frame”时 netbeans 设计器使用的任何它。

          问题是,您如何添加自己之前创建的将 JPanel 扩展至设计器环境的 JPanel。不,这根本不简单。您可以插入您自己的“自定义创建代码”并使用您自己的语句“= new MyExistingCustomJPanel();”分配其中一位设计师 JPanel并且您的 MyExistingCustomJPanel 的构造函数确实会运行,但是当您运行它时它永远不会绘制 gui,因为您的子类在分配中已被向下转换为常规的旧 JPanel。

          那么,如何将自己的 JPanel 插入到想要将其用作 Netbeans 表单设计器环境中的对象的项目中。

          没那么容易。从来没有找到一种明确的方法来使用我自己的 JPanel 来实现这一点。只是一些非常丑陋的作弊。

          此处提供的所有答案都排除了 OP 试图在它提供的 Netbeans 设计器的“框架”中使用他们自己的 JPanel。一点也不直截了当,甚至没有人理解这个问题。

          我做到了,因为我一直在为此苦苦挣扎。

          【讨论】:

            猜你喜欢
            • 2012-08-30
            • 1970-01-01
            • 1970-01-01
            • 2013-08-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多