最近在公司在老大的引领下实验着用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
分享到:
相关推荐
在Java Swing库中,`JPanel`是一个非常基础且重要的组件,它被广泛用于构建用户界面。本示例中,我们讨论的是一个自定义的`JPanel`子类,名为`AutojustChildPanel`,该子类实现了自适应布局的能力。这种能力使得组件...
在描述中提到的浮动面板,可能是通过继承JPanel并添加到JFrame中来实现的。开发者可能使用了绝对布局或者自定义布局管理器,以便让面板能够自由移动。 为了实现浮动功能,开发者可能使用了鼠标监听器...
Java Swing 是Java图形用户界面(GUI)工具包的一部分,它允许开发者创建丰富的桌面应用程序。在“Java Swing画随机圆”这个题目中,学生被要求利用Java Swing库来创建一个程序,该程序能够在屏幕上动态地绘制出大小...
总的来说,这个“大鱼吃小鱼”游戏通过Java的Swing库,利用JFrame和JPanel组件,结合AWT的特性,构建了一个具有交互性的桌面游戏。开发者通过编程实现了游戏的逻辑、界面展示和用户交互,展现了Java在GUI开发上的...
Swing组件包括按钮(JButton)、文本框(JTextField)、面板(JPanel)、滚动窗格(JScrollPane)、菜单(JMenu)以及对话框(JOptionPane)等。 在创建漂亮的Java Swing界面时,有几个关键知识点需要掌握: 1. **...
JPanel 是 Java Swing 中的一个面板组件,继承自 javax.swing.JComponent 类。JPanel 提供了一个基本的面板,可以用来创建复杂的界面。在上面的代码中,我们可以看到多个 JPanel 的使用,创建了不同的面板。 ...
【QQ面板javaSwing】是Java编程中使用Swing库创建的一个特定类型的用户界面组件,主要目的是实现自动分页的功能。在Swing中,我们通常使用JPanel来构建自定义的用户界面,这个QQ面板就是一个由多个JPanel组成的复合...
"Java Swing实现一个计算器" 本资源使用Java Swing实现了一个计算器,能够进行整数、浮点数、正负数的运算,计算器的实现中还利用了中缀式求值。下面是对该资源中涉及的知识点的详细解释: Java Swing的介绍 Java...
`JPanel` 是 `javax.swing` 包中的一个类,它是 `JComponent` 的子类,因此继承了所有组件的基本特性。默认情况下,`JPanel` 使用 `FlowLayout` 布局管理器,该布局管理器将组件按照从左到右,从上到下的顺序排列。...
`GamePanel` 类继承自 `JPanel`,并将包含游戏的所有逻辑和绘图。我们需要重写 `paintComponent()` 方法来进行游戏画面的绘制,使用 `Graphics2D` API 来实现细节的渲染,比如坦克、子弹、障碍物等。 ```java ...
2. **容器(Containers)**:如JFrame、JPanel等,它们用于容纳和组织组件,实现界面布局。 3. **布局管理器(Layout Managers)**:例如FlowLayout、GridLayout、BorderLayout和GridBagLayout等,它们帮助自动调整...
- `JPanel` 是最基础的面板,可以用来组织和展示组件。 - `JScrollPane` 提供了滚动条功能,当组件内容超出可视区域时,允许用户滚动查看。 - `JSplitPane` 用于分割窗口为两个或多个可调整大小的部分。 - `...
让我们来看看如何利用Java Swing实现这个经典游戏。 首先,我们需要创建棋盘。在Java Swing中,我们可以使用`JPanel`作为棋盘的基础,并覆盖其`paintComponent`方法来绘制棋盘格。棋盘通常由15x15的网格组成,因此...
1. `GameOfLifePanel`:这是主面板类,继承自JPanel,负责绘制游戏状态。它可能会有一个`repaint()`方法来更新画面,以及一个`updateGame()`方法来执行生命游戏的规则。 2. `Cell`:表示单个细胞的类,可能包含位置...
Java Swing 提供了一系列丰富的组件,如按钮(JButton)、文本框(JTextField)、标签(JLabel)、面板(JPanel)、滚动窗格(JScrollPane)、菜单(JMenu)、对话框(JOptionPane)等,这些组件可以组合起来创建...
Swing 提供了诸如JFrame、JPanel、 JButton、JLabel等一系列组件,用于创建窗口、面板、按钮和标签等用户界面元素。这些组件都是轻量级的,意味着它们完全由Java代码实现,而非依赖操作系统提供的底层图形服务。 在...
在Java Swing中,你可以创建丰富的、交互式的窗口应用程序,包括各种组件,如按钮、文本框、滚动面板等。这个“Java Swing实现仿Chrome浏览器跳跳龙小游戏”是一个基于Swing开发的桌面游戏,其灵感来源于流行浏览器...
2. **Swing组件**:包括JFrame(窗口)、JPanel(面板)、JButton(按钮)、JLabel(标签)、ImageIcon(图像图标)等,这些是构建连连看游戏界面的基本元素。 3. **事件监听**:Swing使用事件监听机制来处理用户...
Swing 组件继承自 AWT 的 `Component` 类,但大多数情况下,Swing 提供了自己的替代组件,例如 `JButton` 代替了 `Button`。 - **Swynth** 支持更丰富的外观和感觉,以及更好的可定制性。 ##### 2. 使用 Eclipse ...