Java基本功练习十七GUI(图形用户界面基础【基本概念及其使用、三种布局管理器实现同样的框架练习】)

原创 2014年12月30日 19:52:47

为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结尾。如果一个其他格式的位图文件或图像文件,可以使用图像处理工具将它们转为GIFJPEGPNG格式,以便于在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 Swing中动态删除组件

一直以来都不喜欢Java的GUI程序,界面丑陋,而且感觉功能也不强大,但是为了跨平台也没办法!     今天在完成一个JDialog,界面中有删除按钮,用户点击后删除特定的组件。其实,自己Java ...

Java之GUI编程(二)——布局管理器

在上篇博客Java之GUI编程(一)中我已经对GUI编程的组件和事件做了简单介绍了,现在来看看另外一部分关于组件在各个平台是如何做到仍能保持自己合理的位置大小以及外观的。 已经说了Ja...

JAVA图形界面(GUI)之布局管理器

一个友好的读者界面是一款软件成功的关键因素之一。布局管理器就是用来管理读者的界面。摆放的效果直接影响到界面是否美观。布局管理器通过布局管理类来对各种读者组件进行管理。 使用布局管理器,不仅可以有序的...

java GUI设计和布局

GUI(Graphical User Interfaces):由各种图形对象组成的用户界面,在这种用户界面下,用户的命令和对程序的控制是通过“选择”各种图形对象来实现的。 抽象窗口工具包: ...

Java复杂GUI布局举例与源码

【举例要求】要求完成下图中要求的布局,形式要求一致,并且要求美观。这里使用的布局较多,比较复杂,编写好的源码与大家分享一下。 package ComPlexPanel; import java...

Java图形开发--GUI

Java图形开发--GUI 1、图形用户界面(gui)介绍 图形用户界面(Graphics User Interface,GUI)是用户与程序交互的窗口,比命令行的界面更加直观并且更好操作。 aw...

JavaGUI

概念: GUI(Graphical User Interface):图形用户接口。 GLI()

销售管理系统 JavaGUI Swing框架实现版

销售管理系统 JavaGUI Swing框架实现版

java图形界面可视化开发3大GUI插件

上大学那会儿比较主流的Java图形开发插件是:Visual Editor 和 SWT Designer, 不久又出了个Jigloo, 但去官网看了下发现这个东西也很久没有更新了,不过据说短小精悍,五脏...

swing——combobox如何获取数据库数据并显示

今天正在做系统的用户模块,其中yixiang
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java基本功练习十七GUI(图形用户界面基础【基本概念及其使用、三种布局管理器实现同样的框架练习】)
举报原因:
原因补充:

(最多只允许输入30个字)