【问题标题】:Inheritting from custom JPanel using NetBeans GUI Builder使用 NetBeans GUI Builder 从自定义 JPanel 继承
【发布时间】:2012-08-14 20:29:09
【问题描述】:

ContainerPanel 是使用BorderLayout 的自定义JPanel 类。 SOUTH 包含一个带有按钮的JPanel。我希望CENTER 成为另一个自定义JPanel 的实例,比如AbstractPanel,它提供了一个抽象方法,当单击按钮时将调用该方法。我还想以编程方式(在运行时)设置这个JPanel。到目前为止,我可以完成所有这些,正如您在以下代码中看到的那样(其中一些是由 NetBeans GUI Builder 生成的):

package jpaneldemo;

import java.awt.BorderLayout;

public class ContainerPanel extends javax.swing.JPanel {

    public ContainerPanel() {
        initComponents();
    }

    public ContainerPanel(AbstractPanel abPanel) {
        initComponents();

        this.abPanel = abPanel;
        this.add(this.abPanel, BorderLayout.SOUTH);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    private void initComponents() {

        buttonPanel = new javax.swing.JPanel();
        okButton = new javax.swing.JButton();

        setLayout(new java.awt.BorderLayout());

        okButton.setText("OK");
        okButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                okButtonActionPerformed(evt);
            }
        });
        buttonPanel.add(okButton);

        add(buttonPanel, java.awt.BorderLayout.PAGE_END);
    }

    private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {
        this.abPanel.abstractMethod();
    }

    // Variables declaration - do not modify
    private javax.swing.JPanel buttonPanel;
    private javax.swing.JButton okButton;
    // End of variables declaration

    private AbstractPanel abPanel = null;

}

我还创建了AbstractPanel 类:

package jpaneldemo;

public abstract class AbstractPanel extends javax.swing.JPanel {

    public AbstractPanel() {
        initComponents();
    }

    protected abstract void abstractMethod();

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    private void initComponents() {

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );
    }
    // Variables declaration - do not modify
    // End of variables declaration
}

现在我想创建这个 AbstractPanel 类的子类,我可以在 NetBeans GUI 中对其进行编辑。通常,我在“项目”窗口中右键单击包名称,然后导航到“新建 -> JPanel ...”以创建自定义JPanel。如何让AbstractPanel 出现在“新建”菜单中,以便我可以使用 NetBeansGUI Builder 编辑新类?还是有其他方法可以完成同样的事情?

【问题讨论】:

  • +1 到这个问题,虽然我还没有尝试过 NETBEANS,只是知道一些事情,从来没有做过任何编程,虽然这个问题听起来有点有趣:-)

标签: java swing user-interface netbeans


【解决方案1】:

如果您打算提供一个“模板”组件,然后可以将其添加到调色板并包含在其他容器中,那么您可以。

阅读FaqFormCustomContainerBean

基本理念(除了创建BeanDescriptor 之外,您还需要提供某种“内容”面板,以便在设计时添加其他内容。

现在,如果您有兴趣提供自定义模板,那是我以前没有做过的事情。

您可以尝试阅读http://netbeans.org/competition/win-with-netbeans/customize-java-template.html。它可能有点过时,但可能会帮助您朝着正确的方向前进

【讨论】:

  • 感谢您的链接。我会看看。我的部分问题是我没有正式的设计。我只是在脑海中创造这一切。在大多数情况下,它有效;不过,有时我会遇到一些障碍。
  • 在对我的项目的设计进行了更多思考之后,我修改了我的问题。希望我想做的事情更清楚一点。
  • 鉴于您的更新,我不认为它可以完成,因为表单编辑器会想要实例化组件,它不能因为它是抽象的
  • 嗯...听起来我必须手动创建子类。那没问题。我开始在文本编辑器中编写 Java Swing。
  • 我很想看看是否有人有更多建议,因为我很想能够做到这一点。如果答案是有用的,那么投票就可以了,但如果它没有完全回答问题,那么我不希望接受;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-20
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 2011-05-29
  • 1970-01-01
相关资源
最近更新 更多