2

JFrame在 Netbeans 中创建了类并使用生成器添加了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 - object MyPanel 的地方设置

4

7 回答 7

1

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

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

就像是:

JFrame f  = new JFrame();
MyPanel jPanel1  = new MyPanel();
f.getContentPane().add(jPanel1  );
f.pack();
f.setVisible(true);
于 2012-05-16T17:55:28.890 回答
1

以上答案是正确的 - 您需要将其实际添加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);
        }
    });
于 2012-05-16T18:03:28.860 回答
0

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

转到视频教程

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

视频教程的完整列表

于 2013-08-09T19:20:30.623 回答
0

JFrame jframe = new JFrame();

JPanel jpanel = 新 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
              }


   }
于 2012-05-16T18:07:51.690 回答
0

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

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);
    }
于 2012-05-16T17:53:15.597 回答
0

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

您也可以尝试设置布局

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

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


编辑:

如果您使用的是 Netbeans 编辑器

右键单击组件的调色板

转到调色板管理器

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

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

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

于 2012-05-16T18:50:51.153 回答
0

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

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

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

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

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

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

于 2020-11-18T18:49:02.620 回答