java Swing实现JPanel面板的继承

最近在公司在老大的引领下实验着用Swing设计一套GUI应用开发的快速开发模式,具体说就是开发一套常用的组件库,让任何一个非编程人员在适当培训下都可以通过拖曳的方式以及一些傻瓜化的属性设置就可以完成一套业务流程。譬如要在终端机开发手机话费充值流程,包括输入手机号码(包括合法性校验等)-->选择充值类型金额-->信息确认-->插入银行卡-->卡密校验等等一系列流程,设计人员就可以快速完成整套流程,然后交付编程人员补充业务逻辑完成真实交易。
组件化,快速开发等最大要求就是要最大的重用。在我们要应用的业务流程中,每一个关联的界面往往都是大部分是相同的,如左侧导航,顶部banner都是相同的,而变化的只有一小部分,也就是真正的流程变换。这样最好的方式就是有一个公有的模板,而以后每一个流程继承这个模板类实现自己那一小部分就OK了。然而Swing的JPanel不支持直接的继承。为了解决这个问题,老大重写了javax.swing.JPanel,下面越厨代庖分享一下。

RootPaneContainerBase.java,也就是他代替我的JPanel了

package com.hotye.terminal.components.base;

import java.awt.Component;
import java.awt.Container;
import java.awt.LayoutManager;
import javax.swing.JLayeredPane;
import javax.swing.JRootPane;
import javax.swing.RootPaneContainer;

public abstract class RootPaneContainerBase extends javax.swing.JPanel implements RootPaneContainer {


@Override
public void setLayout(LayoutManager mgr) {
if(getRootPane() != null)
getContentPane().setLayout(mgr);
else
super.setLayout(mgr);
}

@Override
public Component add(Component comp) {
if(getRootPane() != null)
return getContentPane().add(comp);
else
return super.add(comp);
}

@Override
public void add(Component comp, Object constraints) {
if(getRootPane() != null)
getContentPane().add(comp, constraints);
else
super.add(comp, constraints);
}

@Override
public Component add(String name, Component comp) {
if(getRootPane() != null)
return getContentPane().add(name, comp);
else
return super.add(name, comp);
}

@Override
public Component add(Component comp, int index) {
if(getRootPane() != null)
return getContentPane().add(comp, index);
else
return super.add(comp, index);
}

@Override
public void add(Component comp, Object constraints, int index) {
if(getRootPane() != null)
getContentPane().add(comp, constraints, index);
else
super.add(comp, constraints, index);
}

@Override
public void remove(Component comp) {
if(getRootPane() != null)
getContentPane().remove(comp);
else
super.remove(comp);
}

@Override
public void remove(int index) {
if(getRootPane() != null)
getContentPane().remove(index);
else
super.remove(index);
}

@Override
public void removeAll() {
if(getRootPane() != null)
getContentPane().removeAll();
else
super.removeAll();
}

public void setContentPane(Container contentPane) {
getRootPane().setContentPane(contentPane);
}

public void setLayeredPane(JLayeredPane layeredPane) {
getRootPane().setLayeredPane(layeredPane);
}

public JLayeredPane getLayeredPane() {
return getRootPane().getLayeredPane();
}

public void setGlassPane(Component glassPane) {
getRootPane().setGlassPane(glassPane);
}

public Component getGlassPane() {
return getRootPane().getGlassPane();
}

public Container getContentPane() {
return getRootPane().getContentPane();
}

/**
* return the RootPane of this component, must be override in child class
*/
@Override
public abstract JRootPane getRootPane();

}



DemoTemplate.java(公共模板父类DEMO)

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JRootPane;

/**
*重写父类的getRootPane()方法以及在构造函数中初始化是必须的
* @author Chiang
*/
public class DemoTemplate extends RootPaneContainerBase {

private JRootPane rootPane;

public DemoTemplate() {
initComponents();

rootPane = new JRootPane();
rootPane.setOpaque(true);

mainContainerPane.setLayout(new BorderLayout());
mainContainerPane.add(rootPane);
}


private void initComponents() {

//设计器生成的代码。。。省略掉

}

@Override
public JRootPane getRootPane() {
return rootPane;
}

private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel mainContainerPane;


public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame main = new JFrame();
main.setSize(400, 300);
main.setResizable(false);
main.getContentPane().setLayout(new BorderLayout());
main.getContentPane().add( new DemoTemplate() );

main.setVisible(true);
}
});
}
}


[color=red][b]下面直接new 一个JPanel Form面板,手动修改继承父类DemoTemplate,然后就可以在下方区域添加需要的组件了,你会发现顶部公共部分是不允许添加的。。。。(如图)[/b][/color]
[img]http://dl.iteye.com/upload/attachment/135675/c8d5e359-74f8-3c1e-83ac-d160f0431054.jpg[/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值