`
vakin.jiang
  • 浏览: 147209 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java Swing实现JPanel面板的继承

    博客分类:
  • J2EE
阅读更多
  最近在公司在老大的引领下实验着用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);
            }
        });
    }
}


下面直接new 一个JPanel Form面板,手动修改继承父类DemoTemplate,然后就可以在下方区域添加需要的组件了,你会发现顶部公共部分是不允许添加的。。。。(如图)

  • 大小: 11.2 KB
0
1
分享到:
评论

相关推荐

    Java继承JPanel实现自适应布局的面板

    在Java Swing库中,`JPanel`是一个非常基础且重要的组件,它被广泛用于构建用户界面。本示例中,我们讨论的是一个自定义的`JPanel`子类,名为`AutojustChildPanel`,该子类实现了自适应布局的能力。这种能力使得组件...

    java swing 浮动面板

    在描述中提到的浮动面板,可能是通过继承JPanel并添加到JFrame中来实现的。开发者可能使用了绝对布局或者自定义布局管理器,以便让面板能够自由移动。 为了实现浮动功能,开发者可能使用了鼠标监听器...

    Java swing画随机圆

    Java Swing 是Java图形用户界面(GUI)工具包的一部分,它允许开发者创建丰富的桌面应用程序。在“Java Swing画随机圆”这个题目中,学生被要求利用Java Swing库来创建一个程序,该程序能够在屏幕上动态地绘制出大小...

    用java JFrame,JPanel写的大鱼吃小鱼小游戏

    总的来说,这个“大鱼吃小鱼”游戏通过Java的Swing库,利用JFrame和JPanel组件,结合AWT的特性,构建了一个具有交互性的桌面游戏。开发者通过编程实现了游戏的逻辑、界面展示和用户交互,展现了Java在GUI开发上的...

    java swing漂亮界面 超酷 javaswing教程

    Swing组件包括按钮(JButton)、文本框(JTextField)、面板(JPanel)、滚动窗格(JScrollPane)、菜单(JMenu)以及对话框(JOptionPane)等。 在创建漂亮的Java Swing界面时,有几个关键知识点需要掌握: 1. **...

    javaswing组件大全.pdf

    JPanel 是 Java Swing 中的一个面板组件,继承自 javax.swing.JComponent 类。JPanel 提供了一个基本的面板,可以用来创建复杂的界面。在上面的代码中,我们可以看到多个 JPanel 的使用,创建了不同的面板。 ...

    QQ面板javaSwing

    【QQ面板javaSwing】是Java编程中使用Swing库创建的一个特定类型的用户界面组件,主要目的是实现自动分页的功能。在Swing中,我们通常使用JPanel来构建自定义的用户界面,这个QQ面板就是一个由多个JPanel组成的复合...

    Java Swing实现一个计算器.docx

    "Java Swing实现一个计算器" 本资源使用Java Swing实现了一个计算器,能够进行整数、浮点数、正负数的运算,计算器的实现中还利用了中缀式求值。下面是对该资源中涉及的知识点的详细解释: Java Swing的介绍 Java...

    Java Swing JPanel面板的使用方法

    `JPanel` 是 `javax.swing` 包中的一个类,它是 `JComponent` 的子类,因此继承了所有组件的基本特性。默认情况下,`JPanel` 使用 `FlowLayout` 布局管理器,该布局管理器将组件按照从左到右,从上到下的顺序排列。...

    坦克大战JavaSwing 实现_java

    `GamePanel` 类继承自 `JPanel`,并将包含游戏的所有逻辑和绘图。我们需要重写 `paintComponent()` 方法来进行游戏画面的绘制,使用 `Graphics2D` API 来实现细节的渲染,比如坦克、子弹、障碍物等。 ```java ...

    JavaSwing界面设计(所有控件及示例)

    - `JPanel` 是最基础的面板,可以用来组织和展示组件。 - `JScrollPane` 提供了滚动条功能,当组件内容超出可视区域时,允许用户滚动查看。 - `JSplitPane` 用于分割窗口为两个或多个可调整大小的部分。 - `...

    用JavaSwing实现桌面五子棋

    让我们来看看如何利用Java Swing实现这个经典游戏。 首先,我们需要创建棋盘。在Java Swing中,我们可以使用`JPanel`作为棋盘的基础,并覆盖其`paintComponent`方法来绘制棋盘格。棋盘通常由15x15的网格组成,因此...

    Java Swing实现的生命游戏.zip

    1. `GameOfLifePanel`:这是主面板类,继承自JPanel,负责绘制游戏状态。它可能会有一个`repaint()`方法来更新画面,以及一个`updateGame()`方法来执行生命游戏的规则。 2. `Cell`:表示单个细胞的类,可能包含位置...

    java swing小程序

    Java Swing 提供了一系列丰富的组件,如按钮(JButton)、文本框(JTextField)、标签(JLabel)、面板(JPanel)、滚动窗格(JScrollPane)、菜单(JMenu)、对话框(JOptionPane)等,这些组件可以组合起来创建...

    Java Swing 拼图 简单的 实例

    Swing 提供了诸如JFrame、JPanel、 JButton、JLabel等一系列组件,用于创建窗口、面板、按钮和标签等用户界面元素。这些组件都是轻量级的,意味着它们完全由Java代码实现,而非依赖操作系统提供的底层图形服务。 在...

    Java Swing实现仿Chrome浏览器跳跳龙小游戏.zip

    在Java Swing中,你可以创建丰富的、交互式的窗口应用程序,包括各种组件,如按钮、文本框、滚动面板等。这个“Java Swing实现仿Chrome浏览器跳跳龙小游戏”是一个基于Swing开发的桌面游戏,其灵感来源于流行浏览器...

    java连连看源码 java swing版

    2. **Swing组件**:包括JFrame(窗口)、JPanel(面板)、JButton(按钮)、JLabel(标签)、ImageIcon(图像图标)等,这些是构建连连看游戏界面的基本元素。 3. **事件监听**:Swing使用事件监听机制来处理用户...

    Java swing 知识总结学习笔记

    Swing 组件继承自 AWT 的 `Component` 类,但大多数情况下,Swing 提供了自己的替代组件,例如 `JButton` 代替了 `Button`。 - **Swynth** 支持更丰富的外观和感觉,以及更好的可定制性。 ##### 2. 使用 Eclipse ...

    java swing 工具箱

    Java Swing 是Java GUI(图形用户界面)开发的一个重要工具包,它是Java Foundation Classes (JFC) 的一部分。在Swing中,你可以创建丰富的、交互式的桌面应用。本篇将深入探讨Java Swing工具箱中的关键概念和技术。...

Global site tag (gtag.js) - Google Analytics