Java基本功练习十七GUI(图形用户界面基础【基本概念及其使用、三种布局管理器实现同样的框架练习】)
2014-12-30 19:52
1021 查看
为Java GUI程序设计而设计的API是应用面向对象原理的绝佳范例。
本博文主要讲解
第一,介绍Java GUI程序设计的基础知识。
第二,它使用GUI演示面向对象程序设计。
尤其是将介绍Java GUI API的框架结构,讨论GUI组件及组件之间的相互关系、容器和布局管理器、颜色、字体、边界、图像图标以及工具提示。
1)Swing和AWT
将图形用户界面相关的类捆绑在一起,放在一个称为抽象类窗口工具箱(Abstract Window Toolkit,AWT)的库中。AWT适合开发简单的图形用户界面,但不适合开发复杂的GUI项目。除此之外,AWT更容易发生与特定平台相关的故障。AWT的用户界面组件就被一种更稳定、更通用和更灵活的库取代,这种库称为Swing组件(Swing
component)库。大多数Swing组件都是直接用Java代码在画布上绘图的,而java.awt.Window或java.awt.Panel的子类的组件例外,它们必须使用特定平台上自己的GUI来绘图。Swing组件更少地依赖于目标平台并且更少地使用自己的GUI资源。因此,不依赖于自己的GUI的Swing组件称为轻量级组件,而AWT称为重量级组件。
为了区别新的Swing组件类和与它对应的AWT组件类,Swing GUI组件类都以字母J为前缀来命名。尽管在Java中仍然支持AWT组件,但最好学习如何使用Swing组件编程,因为AWT用户界面组件终究是要退出历史舞台的。以下只有Swing GUI组件的用法介绍。
2)Java GUI API
GUI API包含的类分成三个组:组件类(componentclass)、容器类(container class)和辅助类(helper class)。它们的层次结构如下所示:
组件类是用来创建用户界面的,如JButton、JLabel和JTextField。
容器类是用来包含其他组件的,如JFrame、JPanel和JApplet。
辅助类是用来支持GUI组件的,如Graphics、Color、Font、FontMetrics和Dimension。
注意:JFrame、JApplet、JDialog和JComponent类及其子类一起放置在javax.swing包中。而上图的其他类放在java.awt。
3)框架
创建一个用户界面需要创建一个框架或一个applet(本博文只讲框架)来存放用户界面组件。可以创建一个框架,并向其中添加各种组件,以实现满足需求的用户界面。
4)布局管理器
在许多窗口系统中,用户界面组件都是通过硬编码(hard-code)的像素度量管理的。例如,将一个按钮放在窗口的(10,10)位置处。使用硬编码的像素度量,这个用户界面可能在一个系统中看上去很好,但在另一个系统中就不正常了。
Java的布局管理器提供了一种层面的抽象,自动将用户界面映射到所有的窗口系统。
Java的GUI组件都放置在容器中,它们的位置是由容器的布局管理器管理的。如上述的程序,并没有指定OK按钮放置在框架的什么位置,但是,Java知道应该把它放在哪里,因为在后台工作的布局管理器能够将组件放到正确的位置。
布局管理器是使用布局管理器类创建的。使用setLayout(aLayoutManager)方法在容器中设置布局管理器。
主要用到的有三种布局管理器:FLowLayout、GridLayout、BorderLayout。
5)使用面板作为子容器
假设要在框架中放置是个按钮和一个文本域。按钮以网格形式放置,文本域独占一行。如果将所有这些组件放在一个单独的容器中,很难达到要求的视觉效果。使用Java图形用户界面进行程序设计,可以将一个窗口分成几个面板。面板的作用就是分组放置用户界面组件的子容器。可以将这些按钮添加到一个面板中,然后再将这个面板添加到框架中。
面板的Swing版本是JPanel。可以使用newJPanel()创建一个带默认FlowLayout管理器的面板,也可以使用new JPanel(LayoutManager)创建一个带特定布局管理器的面板。使用add(Component)方法可以向面板添加一个组件。如:JPanel p=new JPanel();p.add(new JButton(“OK”));创建一个面板并且给它添加一个按钮。
面板可以放到一个框架中或者放到另一个面板中。
6)Color类和Font类
可以使用java.awt.Color类GUI组件设置颜色。颜色是有红、绿、蓝这三原色构成的,每种原色都用一个int值表示它的深度,取值范围从0(最暗度)到255(最亮度)。这就是通常所说的RGB模式。
可以使用java.awt.Font类创建一种字体,然后使用Component类中的setFont方法设置组件的字体。Font的构造方法是:publicFont(String name,int style,int size);
可以从SansSerif、Serif、Monospaced、Dialog或DialogInput中选择一种字体名,可以从Font.PLAIN(0),Font.BOLD(1),Font.ITALIC(2)和Font.BOLD+Font.ITALIC(3)中选择风格,然后指定正整数的字体大小。
7)Swing GUI 组件的公共特性
上述已经讲解了一些GUI组件,如JFrame、Container、JPanel、JButton、JLabel和JTextField等。
还将讲解更多的GUI组件,理解这些SwingGUI组件的一般特性是很重要的。
Component类是所有GUI组件和容器的根。所有GUI(除了JFrame、JApplet和JDialog)组件都是JComponent的子类,列出了Component、Container和JComponent中对象字体、颜色、大小、工具提示文本及其边界这样的属性和常用操作方法。
工具提示是将鼠标移动到组件上时,这个组件上显示的文本。经常用它来描述一个组件的功能。
可以给JComponent类的任何对象设置边界。Swing具有各种类型的边界。为了创建一个带标题的边界,使用newTitleBorder(String title)。为了创建一个线边界,使用newLineBorder(Color color,int width),这里的width表示线的粗细。
8)图像图标
图标是一个大小固定的图片;通常情况下,它都比较小,用来装饰组件。图像通常存储在图像文件中。Java目前支持三种图像格式:GIF(图像交换格式)、JPEG(联合图像专家组)、PNG(便携网络图片)。这些类型的图像文件分别以.gif、.jpg和.png结尾。如果一个其他格式的位图文件或图像文件,可以使用图像处理工具将它们转为GIF、JPEG或PNG格式,以便于在Java中使用。
为显示一个图像图标,使用new java.swing.ImageIcon(filename)创建一个ImageIcon对象。
讲解完GUI设计的基本概念和重点知识点后,就以范例的形式练习其使用。
范例一:基本概念基本方法使用练习。
源代码如下所示:
范例二:框架的建立练习、三种布局管理器的使用、辅助类的使用、三个相同图片显示的范例。
运行效果如下所示:
实现的源代码如下所示:
范例三:同一界面用三种不同的布局器和一种JPanel构造类实现。主要考察对布局管理器的使用熟练程度,以及能否用其他不同的方法实现指定格式的界面显示。
运行效果如图所示:
实现的源代码如下所示:
总结:到目前为止,还未讲解与组件相关联的操作方法的实现,只是对最基本的用户界面的设计。后续会讲解组件关联方法的实现。
本博文主要讲解
第一,介绍Java GUI程序设计的基础知识。
第二,它使用GUI演示面向对象程序设计。
尤其是将介绍Java GUI API的框架结构,讨论GUI组件及组件之间的相互关系、容器和布局管理器、颜色、字体、边界、图像图标以及工具提示。
1)Swing和AWT
将图形用户界面相关的类捆绑在一起,放在一个称为抽象类窗口工具箱(Abstract Window Toolkit,AWT)的库中。AWT适合开发简单的图形用户界面,但不适合开发复杂的GUI项目。除此之外,AWT更容易发生与特定平台相关的故障。AWT的用户界面组件就被一种更稳定、更通用和更灵活的库取代,这种库称为Swing组件(Swing
component)库。大多数Swing组件都是直接用Java代码在画布上绘图的,而java.awt.Window或java.awt.Panel的子类的组件例外,它们必须使用特定平台上自己的GUI来绘图。Swing组件更少地依赖于目标平台并且更少地使用自己的GUI资源。因此,不依赖于自己的GUI的Swing组件称为轻量级组件,而AWT称为重量级组件。
为了区别新的Swing组件类和与它对应的AWT组件类,Swing GUI组件类都以字母J为前缀来命名。尽管在Java中仍然支持AWT组件,但最好学习如何使用Swing组件编程,因为AWT用户界面组件终究是要退出历史舞台的。以下只有Swing GUI组件的用法介绍。
2)Java GUI API
GUI API包含的类分成三个组:组件类(componentclass)、容器类(container class)和辅助类(helper class)。它们的层次结构如下所示:
组件类是用来创建用户界面的,如JButton、JLabel和JTextField。
容器类是用来包含其他组件的,如JFrame、JPanel和JApplet。
辅助类是用来支持GUI组件的,如Graphics、Color、Font、FontMetrics和Dimension。
注意:JFrame、JApplet、JDialog和JComponent类及其子类一起放置在javax.swing包中。而上图的其他类放在java.awt。
3)框架
创建一个用户界面需要创建一个框架或一个applet(本博文只讲框架)来存放用户界面组件。可以创建一个框架,并向其中添加各种组件,以实现满足需求的用户界面。
4)布局管理器
在许多窗口系统中,用户界面组件都是通过硬编码(hard-code)的像素度量管理的。例如,将一个按钮放在窗口的(10,10)位置处。使用硬编码的像素度量,这个用户界面可能在一个系统中看上去很好,但在另一个系统中就不正常了。
Java的布局管理器提供了一种层面的抽象,自动将用户界面映射到所有的窗口系统。
Java的GUI组件都放置在容器中,它们的位置是由容器的布局管理器管理的。如上述的程序,并没有指定OK按钮放置在框架的什么位置,但是,Java知道应该把它放在哪里,因为在后台工作的布局管理器能够将组件放到正确的位置。
布局管理器是使用布局管理器类创建的。使用setLayout(aLayoutManager)方法在容器中设置布局管理器。
主要用到的有三种布局管理器:FLowLayout、GridLayout、BorderLayout。
5)使用面板作为子容器
假设要在框架中放置是个按钮和一个文本域。按钮以网格形式放置,文本域独占一行。如果将所有这些组件放在一个单独的容器中,很难达到要求的视觉效果。使用Java图形用户界面进行程序设计,可以将一个窗口分成几个面板。面板的作用就是分组放置用户界面组件的子容器。可以将这些按钮添加到一个面板中,然后再将这个面板添加到框架中。
面板的Swing版本是JPanel。可以使用newJPanel()创建一个带默认FlowLayout管理器的面板,也可以使用new JPanel(LayoutManager)创建一个带特定布局管理器的面板。使用add(Component)方法可以向面板添加一个组件。如:JPanel p=new JPanel();p.add(new JButton(“OK”));创建一个面板并且给它添加一个按钮。
面板可以放到一个框架中或者放到另一个面板中。
6)Color类和Font类
可以使用java.awt.Color类GUI组件设置颜色。颜色是有红、绿、蓝这三原色构成的,每种原色都用一个int值表示它的深度,取值范围从0(最暗度)到255(最亮度)。这就是通常所说的RGB模式。
可以使用java.awt.Font类创建一种字体,然后使用Component类中的setFont方法设置组件的字体。Font的构造方法是:publicFont(String name,int style,int size);
可以从SansSerif、Serif、Monospaced、Dialog或DialogInput中选择一种字体名,可以从Font.PLAIN(0),Font.BOLD(1),Font.ITALIC(2)和Font.BOLD+Font.ITALIC(3)中选择风格,然后指定正整数的字体大小。
7)Swing GUI 组件的公共特性
上述已经讲解了一些GUI组件,如JFrame、Container、JPanel、JButton、JLabel和JTextField等。
还将讲解更多的GUI组件,理解这些SwingGUI组件的一般特性是很重要的。
Component类是所有GUI组件和容器的根。所有GUI(除了JFrame、JApplet和JDialog)组件都是JComponent的子类,列出了Component、Container和JComponent中对象字体、颜色、大小、工具提示文本及其边界这样的属性和常用操作方法。
工具提示是将鼠标移动到组件上时,这个组件上显示的文本。经常用它来描述一个组件的功能。
可以给JComponent类的任何对象设置边界。Swing具有各种类型的边界。为了创建一个带标题的边界,使用newTitleBorder(String title)。为了创建一个线边界,使用newLineBorder(Color color,int width),这里的width表示线的粗细。
8)图像图标
图标是一个大小固定的图片;通常情况下,它都比较小,用来装饰组件。图像通常存储在图像文件中。Java目前支持三种图像格式:GIF(图像交换格式)、JPEG(联合图像专家组)、PNG(便携网络图片)。这些类型的图像文件分别以.gif、.jpg和.png结尾。如果一个其他格式的位图文件或图像文件,可以使用图像处理工具将它们转为GIF、JPEG或PNG格式,以便于在Java中使用。
为显示一个图像图标,使用new java.swing.ImageIcon(filename)创建一个ImageIcon对象。
讲解完GUI设计的基本概念和重点知识点后,就以范例的形式练习其使用。
范例一:基本概念基本方法使用练习。
源代码如下所示:
package GUI; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.JFrame; import javax.swing.JButton; import java.awt.FlowLayout;//FlowLayout布局管理器范例 import java.awt.GraphicsEnvironment; import java.awt.GridLayout;//GridLayout布局管理器范例 import java.awt.BorderLayout;//BorderLayout布局管理器范例 import javax.swing.JPanel;//JPanel面板范例 import java.awt.Color;//组件颜色 import java.awt.Font;//字体风格 import java.awt.GraphicsEnvironment;//找出系统字体名字 import javax.swing.border.*;//标题边界的使用 import javax.swing.ImageIcon; public class GUI12 extends JFrame{ public static void main(String[]args){ /* ShowFlowLayout sfl = new ShowFlowLayout();//FlowLayout布局管理器范例 sfl.main(args); ShowGridLayout sgl = new ShowGridLayout();//GridLayout布局管理器范例 sgl.main(args); ShowBorderLayout sbl = new ShowBorderLayout();//BorderLayout布局管理器范例 sbl.main(args); TestPanels tp = new TestPanels();//JPanel面板范例 tp.main(args); */ TestAssist ta = new TestAssist();//辅助类范例 ta.main(args); TestSwingCommonFeatures tscf = new TestSwingCommonFeatures();//Swing组件公共属性 tscf.main(args); TestImageIcon tii = new TestImageIcon();//图像图标 tii.main(args); //显示系统可用字体的名字 GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment(); String[] fontnames = e.getAvailableFontFamilyNames(); for(int i = 0;i < fontnames.length;i++) System.out.println(fontnames[i]); } } //图像图标 class TestImageIcon extends JFrame{ private ImageIcon xiaoerIcon = new ImageIcon("C:\\Users\\HarryKate\\Desktop\\肖洋.PNG"); private ImageIcon xiajiangIcon = new ImageIcon("C:\\Users\\HarryKate\\Desktop\\夏蒋.PNG"); private ImageIcon liuchangIcon = new ImageIcon("C:\\Users\\HarryKate\\Desktop\\刘常.PNG"); private ImageIcon dajiaIcon = new ImageIcon("C:\\Users\\HarryKate\\Desktop\\大家.PNG"); public TestImageIcon(){ Border lineBorder = new LineBorder(Color.ORANGE,2); JPanel p1 = new JPanel(); p1.setBorder(new TitledBorder("肖二灿烂的笑")); p1.add(new JLabel(xiaoerIcon)); // p1.setBorder(lineBorder); JPanel p2 = new JPanel(); p2.setBorder(new TitledBorder("夕阳下的拥抱")); p2.add(new JLabel(xiajiangIcon)); // p2.setBorder(lineBorder); JPanel p3 = new JPanel(); p3.setBorder(new TitledBorder("刘妈坑超超")); p3.add(new JLabel(liuchangIcon)); // p3.setBorder(lineBorder); JPanel p4 = new JPanel(); p4.setBorder(new TitledBorder("夕阳下的大家")); p4.add(new JLabel(dajiaIcon)); // p4.setBorder(lineBorder); setLayout(new GridLayout(2,2,5,5)); add(p1); add(p2); add(p3); add(p4); } public static void main(String[]args){ TestImageIcon frame = new TestImageIcon(); frame.setTitle("TestImageIcon"); frame.setSize(800,800); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } //Swing组件公共属性 class TestSwingCommonFeatures extends JFrame{ public TestSwingCommonFeatures(){ JPanel p1 = new JPanel(new FlowLayout(FlowLayout.LEFT,2,2)); JButton jbtLeft = new JButton("Left"); JButton jbtCenter = new JButton("Center"); JButton jbtRight = new JButton("Right"); jbtLeft.setBackground(Color.WHITE); jbtCenter.setForeground(Color.GREEN); jbtRight.setToolTipText("This is the Right button"); p1.add(jbtLeft); p1.add(jbtCenter); p1.add(jbtRight); p1.setBorder(new TitledBorder("Three Buttons")); Font largeFont = new Font("TimesRoman",Font.BOLD,20); Border lineBorder = new LineBorder(Color.BLACK,2); JPanel p2 = new JPanel(new GridLayout(1,2,5,5)); JLabel jlblRed = new JLabel("Red"); JLabel jlblOrange = new JLabel("Orange"); jlblRed.setForeground(Color.RED); jlblRed.setFont(largeFont); jlblRed.setBorder(lineBorder); jlblOrange.setForeground(Color.ORANGE); jlblOrange.setFont(largeFont); jlblOrange.setBorder(lineBorder); p2.add(jlblRed); p2.add(jlblOrange); p2.setBorder(new TitledBorder("Two Lables")); // jbtLeft.setVisible(false); // jlblRed.setVisible(false); setLayout(new GridLayout(2,1,5,5)); add(p1); add(p2); } public static void main(String[]args){ JFrame frame = new TestSwingCommonFeatures(); frame.setTitle("TestSwingCommonFeatures"); frame.setSize(300,150); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } //辅助类范例 class TestAssist extends JFrame{ public TestAssist(){ Color color = new Color(128,100,100); JButton jbtOK = new JButton("OK"); jbtOK.setBackground(Color.DARK_GRAY); jbtOK.setForeground(Color.ORANGE); JButton jbtOK1 = new JButton("YES"); JButton jbtOK2 = new JButton("NO"); JButton jbtOK3 = new JButton("你好"); Font font1 = new Font("SansSerif",Font.BOLD,16); Font font2 = new Font("Serif",Font.BOLD+Font.ITALIC,12); Font font3 = new Font("华文行楷",Font.BOLD+Font.ITALIC,12); jbtOK1.setFont(font1); jbtOK2.setFont(font2); jbtOK3.setFont(font3); JTextField jtf = new JTextField("辅助类的范例"); Font jtfOfFont = new Font("幼圆",Font.CENTER_BASELINE,14); jtf.setFont(jtfOfFont); JPanel p1 = new JPanel(); p1.setLayout(new GridLayout(4,3)); p1.add(jbtOK); p1.add(jbtOK1); p1.add(jbtOK2); p1.add(jbtOK3); add(jtf,BorderLayout.NORTH); add(p1,BorderLayout.CENTER); } public static void main(String[]args){ TestAssist frame = new TestAssist(); frame.setTitle("Color"); frame.setSize(400,250); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } //JPanel面板范例 class TestPanels extends JFrame{ public TestPanels(){ JPanel p1 = new JPanel(); p1.setLayout(new GridLayout(4,3)); for(int i = 1;i <= 9;i++) p1.add(new JButton(""+i)); p1.add(new JButton(""+0)); p1.add(new JButton("Start")); p1.add(new JButton("Stop")); JPanel p2 = new JPanel(new BorderLayout()); p2.add(new JTextField("Time to be displayed here "), BorderLayout.NORTH); p2.add(p1, BorderLayout.CENTER); add(p2,BorderLayout.EAST); add(new JButton("Food to be displayed here "),BorderLayout.CENTER); } public static void main(String[]args){ TestPanels frame = new TestPanels(); frame.setTitle("The Front View of a Microwave Oven"); frame.setSize(400,250); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } //BorderLayout布局管理器范例 class ShowBorderLayout extends JFrame{ public ShowBorderLayout(){ setLayout(new BorderLayout(5,10)); add(new JButton("East"),BorderLayout.EAST); add(new JButton("South"),BorderLayout.SOUTH); add(new JButton("West"),BorderLayout.WEST); add(new JButton("North"),BorderLayout.NORTH); add(new JButton("Center"),BorderLayout.CENTER); } public static void main(String[]args){ ShowBorderLayout frame = new ShowBorderLayout(); frame.setTitle("ShowBorderLayout"); frame.setSize(300,200); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } //GridLayout布局管理器范例 class ShowGridLayout extends JFrame{ public ShowGridLayout(){ setLayout(new GridLayout(3,2,5,5)); // setLayout(new GridLayout(2,2,5,5)); add(new JLabel("First Name")); add(new JTextField(8)); add(new JLabel("MI")); add(new JTextField(1)); add(new JLabel("Last Name")); add(new JTextField(8)); } public static void main(String[]args){ ShowGridLayout frame = new ShowGridLayout(); frame.setTitle("ShowGridLayout"); frame.setSize(200, 125); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } //FlowLayout布局管理器范例 class ShowFlowLayout extends JFrame{ public ShowFlowLayout(){ setLayout(new FlowLayout(FlowLayout.LEFT,10,20)); add(new JLabel("First Name")); add(new JTextField(8)); add(new JLabel("MI")); add(new JTextField(1)); add(new JLabel("Last Name")); add(new JTextField(8)); } public static void main(String[]args){ ShowFlowLayout frame = new ShowFlowLayout(); frame.setTitle("ShowFlowLayout"); frame.setSize(200,200); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } /* import javax.swing.JFrame; import javax.swing.JButton; //简单框架程序 public static void main(String[] args) { JFrame frame = new JFrame("MyFrame"); JButton jbtOK = new JButton("OK"); frame.add(jbtOK); frame.setSize(400, 300); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } */
范例二:框架的建立练习、三种布局管理器的使用、辅助类的使用、三个相同图片显示的范例。
运行效果如下所示:
实现的源代码如下所示:
package Blog; import javax.swing.*; public class blogTryProject{ public static void main(String[] args) { //三个相同图片显示的范例 ThreeImageIcon ta = new ThreeImageIcon(); ta.main(args); //辅助组件使用 Assist at = new Assist(); at.main(args); //FlowLayout,BorderLayout,GridLayout管理器使用范例 TestLayout tl = new TestLayout(); tl.main(args); //框架的建立练习 TestJFrame tjf = new TestJFrame(); tjf.main(args); } } //三个相同图片显示的范例 class ThreeImageIcon extends JFrame{ public void main(String[]args){ JFrame frame = new ThreeImageIcon(); frame.setTitle("三个相同图片显示的范例"); frame.setSize(400,200); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } public ThreeImageIcon(){ javax.swing.ImageIcon xiao = new javax.swing.ImageIcon("C:\\Users\\HarryKate\\Desktop\\111.PNG"); JButton jb1 = new JButton(xiao); JButton jb2 = new JButton(xiao); JButton jb3 = new JButton(xiao); JPanel p1 = new JPanel(); p1.add(jb1); JPanel p2 = new JPanel(); p2.add(jb2); JPanel p3 = new JPanel(); p3.add(jb3); add(p1,java.awt.BorderLayout.NORTH); add(p2,java.awt.BorderLayout.SOUTH); add(p3,java.awt.BorderLayout.WEST); } } //图片图像应用 class ImageIcon extends JFrame{ private javax.swing.ImageIcon xiao = new javax.swing.ImageIcon("C:\\Users\\HarryKate\\Desktop\\兴义到仁怀.PNG"); public ImageIcon(){ JPanel p = new JPanel(); p.setBorder(new javax.swing.border.TitledBorder("兴义到仁怀路线图")); p.add(new JButton(xiao)); add(p); } public static void main(String[]args){ ImageIcon image = new ImageIcon(); image.setTitle("ImageIcon"); image.setSize(400,200); image.setLocationRelativeTo(null); image.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); image.setVisible(true); // image.pack(); } } //辅助组件使用 class Assist extends JFrame{ public Assist(){ java.awt.Color color = new java.awt.Color(100,50,50); JButton jb = new JButton("你好!"); jb.setBackground(color); jb.setForeground(new java.awt.Color(200,0,0)); java.awt.Font font = new java.awt.Font("华文行楷",java.awt.Font.ITALIC,20); jb.setFont(font); jb.setToolTipText("这是一个问候按钮!"); add(jb); } public static void main(String[]args){ Assist as = new Assist(); as.setTitle("辅助组件使用"); as.setSize(400,200); as.setLocationRelativeTo(null); as.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); as.setVisible(true); //显示系统可用字体的名字 java.awt.GraphicsEnvironment e = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(); String[] fontnames = e.getAvailableFontFamilyNames(); for(int i = 0;i < fontnames.length;i++) System.out.println(fontnames[i]); } } //FlowLayout,BorderLayout,GridLayout管理器使用范例 class TestLayout extends JFrame{ public TestLayout(){ setLayout(new java.awt.GridLayout(2,1,10,10)); JPanel p = new JPanel(); p.setLayout(new java.awt.BorderLayout()); p.add(new javax.swing.JButton("确定"),java.awt.BorderLayout.NORTH); p.add(new javax.swing.JButton("取消"),java.awt.BorderLayout.SOUTH); p.add(new javax.swing.JLabel("你好吗?"),java.awt.BorderLayout.WEST); p.add(new javax.swing.JTextField("谢谢,很好!"),java.awt.BorderLayout.EAST); p.add(new javax.swing.JTextField("练习"),java.awt.BorderLayout.CENTER); add(p); } public static void main(String[]args){ TestLayout tfl = new TestLayout(); JPanel p = new JPanel(); p.setLayout(new java.awt.BorderLayout(10,10)); p.add(new JTextField("面板的使用1"),java.awt.BorderLayout.NORTH); p.add(new JTextField("面板的使用2"),java.awt.BorderLayout.SOUTH); p.add(new JTextField("面板的使用3"),java.awt.BorderLayout.WEST); p.add(new JTextField("面板的使用4"),java.awt.BorderLayout.EAST); p.add(new JTextField("面板的使用5"),java.awt.BorderLayout.CENTER); tfl.add(p); tfl.setTitle("FlowLayout,BorderLayout,GridLayout管理器使用范例"); tfl.setSize(400,200); tfl.setLocationRelativeTo(null); tfl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); tfl.setVisible(true); } } //框架的建立练习 class TestJFrame extends JFrame{ public TestJFrame(){ JButton button = new JButton("OK"); add(button); } public static void main(String[]args){ TestJFrame tjf = new TestJFrame(); tjf.setVisible(true); tjf.setTitle("框架的建立练习"); tjf.setLocationRelativeTo(null); tjf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); tjf.setSize(400, 200); System.out.println("框架的大小为:"+tjf.getSize()); System.out.println("框架的形状为:"+tjf.getShape()); System.out.println("框架所属的类为:"+tjf.getClass()); } }
范例三:同一界面用三种不同的布局器和一种JPanel构造类实现。主要考察对布局管理器的使用熟练程度,以及能否用其他不同的方法实现指定格式的界面显示。
运行效果如图所示:
实现的源代码如下所示:
package Blog; import javax.swing.*; public class blogTryProject{ public static void main(String[] args) { TestJPanel tjp = new TestJPanel(); tjp.main(args); LayoutGrid lg = new LayoutGrid(); lg.main(args); LayoutBorder lb = new LayoutBorder(); lb.main(args); LayoutFlow lf = new LayoutFlow(); lf.main(args); } } //同一界面用三种不同的布局器和一种JPanel构造类实现 class TestJPanel extends JPanel{ public TestJPanel(){ } public TestJPanel(JButton jb1,JButton jb2,JButton jb3){ add(jb1); add(jb2); add(jb3); } public static void main(String[]args){ TestJPanel p1 = new TestJPanel(new JButton("Button1"), new JButton("Button2"), new JButton("Button3")); TestJPanel p2 = new TestJPanel(new JButton("Button4"), new JButton("Button5"), new JButton("Button6")); JFrame frame = new JFrame(); // frame.add(p1,java.awt.BorderLayout.SOUTH); // frame.add(p2,java.awt.BorderLayout.CENTER); frame.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT,5,5)); frame.add(p1); frame.add(p2); frame.setTitle("TestJPanel"); frame.setSize(540,80); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } class LayoutGrid extends JFrame{ public LayoutGrid(){ setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT,5,5)); JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); p1.setLayout(new java.awt.GridLayout(1,3,5,5)); p2.setLayout(new java.awt.GridLayout(1,3,5,5)); JButton jb1 = new JButton("Button1"); JButton jb2 = new JButton("Button2"); JButton jb3 = new JButton("Button3"); JButton jb4 = new JButton("Button4"); JButton jb5 = new JButton("Button5"); JButton jb6 = new JButton("Button6"); p1.add(jb1); p1.add(jb2); p1.add(jb3); p2.add(jb4); p2.add(jb5); p2.add(jb6); add(p1); add(p2); } public static void main(String[]args){ JFrame frame = new LayoutGrid(); frame.setTitle("LayoutGrid"); frame.setSize(540,80); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } class LayoutBorder extends JFrame{ public LayoutBorder(){ JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); JButton jb1 = new JButton("Button1"); JButton jb2 = new JButton("Button2"); JButton jb3 = new JButton("Button3"); JButton jb4 = new JButton("Button4"); JButton jb5 = new JButton("Button5"); JButton jb6 = new JButton("Button6"); p1.add(jb1); p1.add(jb2); p1.add(jb3); p2.add(jb4); p2.add(jb5); p2.add(jb6); add(p1,java.awt.BorderLayout.SOUTH); add(p2,java.awt.BorderLayout.CENTER); } public static void main(String[]args){ JFrame frame = new LayoutFlow(); frame.setTitle("LayoutBorder"); frame.setSize(540,80); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } class LayoutFlow extends JFrame{ public LayoutFlow(){ setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT,5,5)); JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); JButton jb1 = new JButton("Button1"); JButton jb2 = new JButton("Button2"); JButton jb3 = new JButton("Button3"); JButton jb4 = new JButton("Button4"); JButton jb5 = new JButton("Button5"); JButton jb6 = new JButton("Button6"); p1.add(jb1); p1.add(jb2); p1.add(jb3); p2.add(jb4); p2.add(jb5); p2.add(jb6); add(p1); add(p2); } public static void main(String[]args){ JFrame frame = new LayoutFlow(); frame.setTitle("LayoutFlow"); frame.setSize(540,80); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }
总结:到目前为止,还未讲解与组件相关联的操作方法的实现,只是对最基本的用户界面的设计。后续会讲解组件关联方法的实现。
相关文章推荐
- 【JAVA语言程序设计基础篇】--图形用户界面基础--三种基本的布局管理器
- Java基本功练习十三(字符串和文本IO【相关概念、基本方法使用】)
- 基础框架平台——基础管理框架——GUI抽象设计(布局管理器)
- java中实现退出按钮功能的实现已经布局管理器的使用
- Java基础 GUI图形用户界面 布局 事件 简易记事本 双击运行jar
- Java基础之创建窗口——使用网格布局管理器(TryGridLayout)
- Java基础知识强化之集合框架笔记31:集合之泛型类的概述和基本使用
- Java线程基础(2)-实现线程的三种基本方法
- Java继承的基本概念及其限制(基础语法二)
- Java基础之装箱和拆箱的基本概念及使用
- Python面向对象和图形用户界面(二)---- GUI的基本框架 & 常用组件 & 布局管理
- Java基础之创建窗口——使用卡片布局管理器(TryCardLayout)
- Java基础知识强化之集合框架笔记29:使用LinkedList实现栈数据结构的集合代码(面试题)
- 一个GUI的简单练习-------- Java记事本 简单实现 陆续完善中……
- Android的布局管理器与java中的实现方式不同
- Java图形用户界面布局控制Layout练习
- WebKit网页布局实现之基本概念及标准篇
- Java基础:初学入门需掌握的30个基本概念
- 基本排序算法的实现(我的练习 快速排序有三种实现方式,值得关注)
- Java基础:需掌握的30个基本概念