5-1-1:JInternalFrame的使用

类层次结构图:

java.lang.Object

--java.awt.Component
    --java.awt.Container

--javax.swing.JComponent

--javax.swing.JInternalFrame

JinternalFrame的使用跟JFrame几乎一样,可以最大化、最小化、关闭窗口、加入菜单等功能;唯一不同的是JinternalFrame是

lightweight component ,也就是说JInternalFrame不能单独出现,必须依附在最上层组件上。由于这个特色,JInternalFrame能

够利用java提供的Look and Feel功能作出完全不同于原有操作系统所提供的窗口外型,也比JFrame更具有弹性。

一般我们会将Internal Fram加入Desktop Pane方便管理,Desktop Pane是一种特殊的Layered pane,用来建立虚拟桌面(Vitual

Desktop).它可以显示并管理众多Internal Frame之间的层次关系。以下是JDesktopPane的类层次结构图;

类层次结构图:

java.lang.Object

--java.awt.Component

--java.awt.Container

--javax.swing.JComponent

--javax.swing.JLayeredPane

--javax.swing.JDesktop

我们先来看看如何构造JInternalFrame与JDesktopPane,再来看它跟Desktop Pane之间的关系。下面分别是JInternalFram与

JDesktopPane的构造函数:

JInternalFrame构造函数:

JInternalFrame():建立一个不能更改大小、不可关闭、不可最大最小化、也没有标题的Internal Frame。

JInternalFrame(String title):建立一个不能更改大小、不可关闭、不可最大最小化、但具有标题的Internal Frame。

JInternalFrame(String title,boolean resizable):建立一个不可关闭、不可最大最小化、但可变更大小且具有标题的

Internal Frame。

JInternalFrame(String title,boolean resizable,boolean closable):建立一个可关闭、可更改大小、且具有标题,但不可

最大化最小化的Internal Frame.

JInternalFrame(String title,boolean resizable,boolean closable,boolean maximizable):建立一个可关闭、可更改大小、

具有标题、可最大化,但不可最小化的Internal Frame.

JInternalFrame(String title,boolean resizable,boolean closable,boolean maximizable,boolean iconifiable):

建立一个可关闭、可更改大小、具有标题、可最大化与最小化的Internal Frame.

JDesktopPane构造函数:

JDesktopPane():建立JDesktopPane组件。

如何利用JDesktoPane来管理JInternalFrame:

JInternalFrame1.java

import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

public class JInternalFrame1 extends JFrame implements ActionListener{

JDesktopPane desktopPane;

int count = 1;

public JInternalFrame1() {

super("JInternalFrame1");

Container contentPane = this.getContentPane();

contentPane.setLayout(new BorderLayout());

JButton b = new JButton("Create New Internal Frames");

b.addActionListener(this);//当用户按下按钮时,将运行actionPerformed()中的程序

contentPane.add(b, BorderLayout.SOUTH);

/*建立一个新的JDesktopPane并加入于contentPane中

*/

desktopPane = new JDesktopPane();

contentPane.add(desktopPane);

setSize(350, 350);

show();

addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

}

/*产生一个可关闭、可改变大小、具有标题、可最大化与最小化的Internal Frame.

*/

public void actionPerformed(ActionEvent e)

{

JInternalFrame internalFrame = new JInternalFrame(

"Internal Frame "+(count++), true, true, true, true);

internalFrame.setLocation( 20,20);

internalFrame.setSize(200,200);

internalFrame.setVisible(true);

//取得JInternalFrame的Content Pane,用以加入新的组件。

Container icontentPane = internalFrame.getContentPane();

JTextArea textArea = new JTextArea();

JButton b = new JButton("Internal Frame Button");

/*将JTextArea与JButton对象加入JInternalFrame中。由此呆知,JInteranlFrame加入组件

*的方式与JFrame是一模一样。

*/

icontentPane.add(textArea,"Center");

icontentPane.add(b,"South");

//将JInternalFrame加入JDesktopPane中,如此一来,即使产生很多JInternalFrame,JDesktopPane也

//能将它们之间的关系管理得相当良好。

desktopPane.add(internalFrame);

try {

internalFrame.setSelected(true);

} catch (java.beans.PropertyVetoException ex) {

System.out.println("Exception while selecting");

}

}

public static void main(String[] args) {

new JInternalFrame1();

}

}

5-1-2:JPanel的使用:

类层次结构图:

java.lang.Object

--java.awt.Component

--java.awt.Container

--javax.swing.JComponent

--javax.swing.JPanel

Panel民是java中时常用到的容器之一,Panel除了可以让组件加入外,有效的利用Panel可以使版面管理更为容易。Swing的

JPanel支持double buffering的功能,使得JPanel在处理动画上更为流畅,较不会有画面闪烁的情况发生。下面为它的构造函

数:

JPanel构造函数:

JPanel():建立一个具有double buffering功能的JPanel,默认的版面管理是Flow Layout.

JPanel(boolean isDoubleBuffered):选择建立是否具有double buffering功能的JPanel,默认的版面管理是Flow Layout.

JPanel(LayoutManager layout):建立一个具有double buffering功能JPanel,可自定义版面管理器.

JPanel(LayoutManager layout,boolean isDoubleBuffered):选择建立是否具有double buffering功能的JPanel,并自定义版面管

理器.

下面这个例子我们用JPanel来排列5个JLabel对象,你将可以发现利用JPanel搭配版面管理,可以做出更复杂的排列效果。

JPanel1.java

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class JPanel1

{

public JPanel1()

{

JFrame f = new JFrame("JPanelDemo");

Container contentPane = f.getContentPane();

contentPane.setLayout(new GridLayout(2,1));

JLabel[] label = new JLabel[5];

for(int i=0; i<label.length ; i++)

{

label[i] = new JLabel("Label "+(i+1),JLabel.CENTER);

label[i].setBackground(Color.lightGray);

label[i].setBorder(BorderFactory.createEtchedBorder());

label[i].setOpaque(true);//setOpaqueIture)方法的目的是让组件变成不透明,这样我们在JLabel上所设置的颜色

// 才能显示出来。

}

JPanel panel1 = new JPanel(new GridLayout(1,1));

panel1.add(label[0]);

JPanel panel2 = new JPanel(new GridLayout(1,2));

JPanel panel3 = new JPanel(new GridLayout(1,2));

panel3.add(label[1]);

panel3.add(label[2]);

JPanel panel4 = new JPanel(new GridLayout(2,1));

panel4.add(label[3]);

panel4.add(label[4]);

panel2.add(panel3);

panel2.add(panel4);

contentPane.add(panel1);

contentPane.add(panel2);

f.pack();

f.show();

f.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

}

public static void main(String[] arg)

{

new JPanel1();

}

}

由上例可知,利用JPanel可以使版面的排列方式更生动,若没有JPanel的帮助,想直接由contentPane排列成如上例所示,便必须

借助复杂的GridBagLayout版面管理器了。

5-1-3:JSplitPane的使用:

java.lang.Object

--java.awt.Component

--java.awt.Container

--javax.swing.JComponent

--javax.swing.JSplitPane

Split Pane(分割面版)一次可将两个组件同时显示在两个显示区中,若你想要同时在多个显示区显示组件,你便必须同时使

用多个Split Pane。JSplitPane提供两个常数让你设置到底是要水平分割还是垂直分割。这两个常数分别是:HORIZONTAL_SPIT,

VERTICAL_SPLIT.除了这两个重要的常数外,JSplitPane还提供许多类常数让你使用,我们会在下面的例子中介绍比较常用的类常数

,其余信息请参年java API.

JsplitPane构造函数:

JSplitPane():建立一个新的JSplitPane,里面含有两个默认按钮,并以水平方向排列,介没有Continuous Layout功能。

JSplitPane(int newOrientation):建立一个指定水平或垂直方向切割JSplitPane,但没有Continuous Layout功能。

JSplitPnae(int newOrientation,boolean newContinuousLayout):建立一个指定水平或垂直方向切割的JSplitPane,且指定是否具

有Continuous Layout功能。

JSplitPane(int newOrientation,boolean newContinuousLayout,Component newLeftComponent,Component newRightComponent):

建立一个指定水平或垂直方向切割的JSplitPane,且指定显示区所要显示的组件,并设置是否Continuous

Layout功能。

JSplitPane(int newOrientation,COmponent newLeftComponent,COmponent newRightComponent):

建立一个指定水平或垂直方向切割的JSplitPane,且指定显示区所要显示的组件,但没有Continuous Layout功能

上面所说的Continuous Layout意思是指当你拖曳切割面版的分隔线时,窗口内的组件是否会随着分隔线的拖曳而动态改变大小

。newContinuousLayout是一个boolean值,若设为true,则组件大小会随着分隔线的拖曳而一起改动;

若设为false,则组件大小在分隔线停止改动时才确定。你也可以使用JSplitPane中的setContinuousLayout()方法来设置此项目。

JSplitPane的例子:JSplitPane1.java

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class JSplitPane1{

public JSplitPane1(){

JFrame f=new JFrame("JSplitPaneDemo");

Container contentPane=f.getContentPane();

JLabel label1=new JLabel("Label 1",JLabel.CENTER);

label1.setBackground(Color.green);

label1.setOpaque(true);//setOpaqueIture)方法的目的是让组件变成不透明,这样我们在JLabel上所设置的颜色

// 才能显示出来。

JLabel label2=new JLabel("Label 2",JLabel.CENTER);

label2.setBackground(Color.pink);

label2.setOpaque(true);

JLabel label3=new JLabel("Label 3",JLabel.CENTER);

label3.setBackground(Color.yellow);

label3.setOpaque(true);

/*加入label1,label2到splitPane1中,并设置此splitPane1为水平分割且具有Continuous Layout的

*功能。

*/

JSplitPane splitPane1=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,false,label1,label2);

/*设置splitPane1的分隔线位置,0.3是相对于splitPane1的大小而定,因此这个值的范围在0.0~1.0

*中。若你使用整数值来设置splitPane的分隔线位置,如第34行所示,则所定义的值以pixel为计算单位

*/

splitPane1.setDividerLocation(0.3);

/*设置JSplitPane是否可以展开或收起(如同文件总管一般),设为true表示打开此功能。

*/

splitPane1.setOneTouchExpandable(true);

splitPane1.setDividerSize(10);//设置分隔线宽度的大小,以pixel为计算单位。

JSplitPane splitPane2=new JSplitPane(JSplitPane.VERTICAL_SPLIT,false,splitPane1,label3);

splitPane2.setDividerLocation(35);

//设置JSplitPane是否可以展开或收起(如同文件总管一般),设为true表示打开此功能.

splitPane2.setOneTouchExpandable(false);

splitPane2.setDividerSize(5);

contentPane.add(splitPane2);

f.setSize(250,200);

f.show();

f.addWindowListener(

new WindowAdapter(){

public void windowClosing(WindowEvent e){

System.exit(0);

}

}

);

}

public static void main(String[] args){

new JSplitPane1();

}

}

Swing读书笔记JInternalFrame的使用(窗口与面板)相关推荐

  1. Swing学习系列 -- Swing读书笔记目录

    为了便于二次查找,学习,特列出Swing的目录如下 ++ Swing读书笔记 1-1Swing常用的package ++ Swing读书笔记 1-3版面管理器(Layout Menager) 1-3- ...

  2. (swing读书笔记)Swing Look And Feel(4)

    (swing读书笔记)Swing Look And Feel(4) By cszhao1980 八.MetalLookAndFeel的功能增强 Swing对它默认的跨平台L&F提供了功能的增强 ...

  3. (swing读书笔记)Swing Look And Feel(1)

    (swing读书笔记)Swing Look And Feel(1) By cszhao1980 Swing出现之初,就提供一种非常前卫的功能,即PLAF--可拔插的Look And Feel,我们可以 ...

  4. (swing读书笔记)Swing Look And Feel(3)

    (swing读书笔记)Swing Look And Feel(3) By cszhao1980 六.UIResource UIResource是个空接口,它的目的是为标识一种身份,即是否为UI Res ...

  5. (swing读书笔记)Swing Look And Feel(2)

    (swing读书笔记)Swing Look And Feel(2) By cszhao1980 三.      UI defaults UIDefaults内部维护了一张巨大的Hashtable, 记 ...

  6. (swing读书笔记)Undo/Redo(下)

    (swing读书笔记)Undo/Redo(下) By cszhao1980 四.更好的集成--StateEdit 现在,实现Undo功能已经比较简单了: (1)         建立一个"普 ...

  7. (swing读书笔记)JTable简介(下)

    (swing读书笔记)JTable简介(下) by cszhao1980 六.Row 最初,JTable没有提供任何"Row"相关的类来控制Row,与Row相关的大量操作直接坐落在 ...

  8. swing读书笔记转载

    (swing读书笔记)Swing Look And Feel(1) http://blog.csdn.net/cszhao1980/article/details/7343524 (swing读书笔记 ...

  9. (swing读书笔记)JTree简介(下)

    (swing读书笔记)JTree简介(下) By cszhao1980 六.TreeCellRenderer 通过JTable一样,JTree也使用一个接口定义它的单元绘制器,该接口仅有一个方法: C ...

最新文章

  1. RNN,LSTM,GRU基本原理的个人理解重点
  2. 动态代理之Rxjava/Retrofit应用实战
  3. python打开电脑摄像头_Python调用摄像头
  4. Spring Boot版微信支付教程(视频 源码笔记)
  5. linux tomcat 日志乱码,Linux下TOMCAT中日志出现中文乱码
  6. vue-router实例
  7. java Date获取 年月日时分秒
  8. 解决cocos2dx调用removeFromParent后报错问题
  9. 10分钟 在linux里创建.net core helloworld控制台程序
  10. URAL 1233 Amusing Numbers 好题
  11. android MD5 SHA1
  12. 一个简单的Java EEDocker示例
  13. 拓端tecdat|在R语言中轻松创建关联网络
  14. iOS通过CIFilter对图像进行滤镜处理
  15. docker下载和安装
  16. 法线贴图及其用法详解
  17. POSE estimation,肢体估计HPE
  18. go 注册登录 mysql_golang实现用户登录注册的方法
  19. 公众号如何向用户发送重要的服务通知?
  20. 【Docker】Registry搭建私有仓库、证书认证、用户登录认证

热门文章

  1. android 歌词解析时间,Android歌词秀设计思路(1)SafetyTimer
  2. 【HTML5】1.语法入门总结(第一部分)
  3. 给大家推荐一个个人觉得非常好的java学习网站
  4. 3-软件测试过程和管理
  5. Mac下Valet配置
  6. Second class css进阶
  7. 跳槽遇上降薪,必须这么办!
  8. matlab 五连珠,五星连珠程序,求高手帮忙画个流程图,急!!!!!!!
  9. 发软文外链技巧(你还在做无用功的软文外链吗)
  10. H264 NALU starting code 搜索优化