`

JavaSE13—窗体程序开发(中)

阅读更多
JavaSE13—窗体程序开发(中)

1、 布局方式
1) 绝对布局
硬性指定组件在容器中的位置和大小。窗体,面板等容器都可以采用绝对布局的方式。
步骤:
使用Container.setLayout(null)方式取消布局管理器。
使用Component.setBounds()方法来设置每个组件的大小与位置

注意:绝对布局在不同的平台上可能会出现组件重叠的问题。

实例1:使用绝对布局,创建一个登录窗口
package qijia.si;

import java.awt.EventQueue;
import java.awt.Font;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class EntryFrame extends JFrame {
		private JTextField passWordTextField;
		private JTextField nameTextField;
		public static void main(String[] args){
			EventQueue.invokeLater(new Runnable(){
					public void run(){
						try{
							EntryFrame frame = new EntryFrame();
							frame.setVisible(true);
						}catch(Exception e){
							e.printStackTrace();
						}
					}
			});
		}
		public EntryFrame(){
			super();
			getContentPane().setLayout(null);  //设置为绝对布局
			setBounds(100,100,321,188);
			setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			final JPanel panel = new JPanel();
			panel.setLayout(null);
			panel.setBounds(0,0,316,154);
			getContentPane().add(panel);
			final JLabel name = new JLabel();
			name.setFont(new Font("微软雅黑",Font.PLAIN,12));
			name.setText("用户名:");
			name.setBounds(62,27,52,26);
			panel.add(name);
			nameTextField = new JTextField();
			nameTextField.setBounds(120,30,129,22);
			panel.add(nameTextField);
			final JLabel passWord = new JLabel();
			passWord.setFont(new Font("微软雅黑",Font.PLAIN,12));
			passWord.setText("密码:");

			passWord.setBounds(65,55,44,18);
			panel.add(passWord);
			passWordTextField = new JTextField();
			passWordTextField.setBounds(120,58,129,22);
			panel.add(passWordTextField);
			final JButton entry = new JButton();
			entry.setText("登录");
			entry.setBounds(84,104,64,28);
			panel.add(entry);
			final JButton cancel = new JButton();
			cancel.setText("取消");
			cancel.setBounds(170,104,64,28);
			panel.add(cancel);
		}
}
2) 窗口默认的边界布局
该布局管理器将组件布局排列在东,西,南,北,中5个区域,每个区域可以放置一个组件,也可以在指定区域中放置包含其他组件的容器。
定义边界布局管理器
BorderLayout实现的是边界布局管理器。通过容器的setLayout()方法设置布局管理器,setLayout方法有一个参数,就是布局管理器实例对象,因此使用此边界布局管理器必须先创建它的实例对象。
BorderLayout() 该构造方法用于创建默认的边界布局管理器,这个布局管理器在各个区域的水平和垂直方向没有设置组件间距。
BorderLayout(hgap,vgap) 接收两个整数类型,用以设置管理器的水平和垂直方向的间距。

应用边界布局
应用边界布局管理器,首先必须调用容器的setLayout()方法设置该容器使用边界布局管理器,然后调用容器Container类的add()方法添加组件时可以设置此组件的布局区域。
实例:使用边界布局,实现在窗体中添加东西南北四个按钮。

			package qijia.si;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.Font;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class BorderTest extends JFrame{
	public BorderTest(){
		setTitle("边界布局管理器测试");
		setBounds(100,100,300,200);
		JButton northButton =  new JButton("北");
		JButton southButton =  new JButton("南");
		JButton westButton = new JButton("西");
		JButton eastButton = new JButton("东");
		JButton centerButton = new JButton("中");
		
		Container panel = getContentPane();
		panel.add(northButton,BorderLayout.NORTH);
		panel.add(southButton,BorderLayout.SOUTH);
		panel.add(westButton, BorderLayout.WEST);
		panel.add(eastButton,BorderLayout.EAST);
		panel.add(centerButton,BorderLayout.CENTER);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		
	}
	public static void main(String[] args){
		BorderTest test =  new BorderTest();
		test.setVisible(true);
	}
}

3) 网格布局
网格布局管理器可以将组件以网格的形式排列起来,使用网格布局,容器被分成大小相等的矩形,每个矩形区域中可以放置一个组件,就像表格中的单元格一样整齐的排列。
创建网格布局管理器
GridLayout类表示网格布局管理器,容器通过setLayout()方法,将GridLayout作为对象,可将容器设置为网络布局的形式。
实例:使用网络布局,将窗体容器使用3*3的网络布局管理器,并在窗体中添加按钮

package qijia.si;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class GridLayoutTest extends JFrame{
	public GridLayoutTest(){
		setTitle("边界布局管理器实例");
		setBounds(100,100,300,200);
		JButton[] buttons = new JButton[9];
		Container panel = getContentPane();
		panel.setLayout(new GridLayout(3,3));
		for(int i = 0;i<9;i++){
			buttons[i] = new JButton("按钮"+(i+1));
			panel.add(buttons[i]);
		}
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	public static void main(String[] args){
		GridLayoutTest gridLayout = new GridLayoutTest();
		gridLayout.setVisible(true);
	}
}
4) 流式布局
流式布局是最基本得布局管理器,使用流式布局的容器按指定方向摆放组件。
实例:创建窗体,采用流式布局的形式排放控件,采用居中对齐的方式。
package qijia.si;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class FlowTest extends JFrame{
	public FlowTest(){
		setTitle("本窗口使用流布局管理器");
		Container c = getContentPane();
		getContentPane().setLayout(
			new FlowLayout(FlowLayout.CENTER,10,10)	
		);
		for(int i=0;i<10;i++){
			c.add(new JButton("按钮"+i));
		}
		setSize(300,200);
		setVisible(true);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	public static void main(String[] args){
		FlowTest flowTest = new FlowTest();
	}
}
2.基本控件

1) 标签控件
标签控件用于显示文本或提示信息,支持文本字符串和图标。
JLabel的构造方法:
JLabel() 创建一个既无内容又无图像的标签
JLabel(String text) 创建一个有文本内容的标签
JLabel(String textr, int horizontalAlignment) 创建一个具有文本内容且水平显示的标签
JLabel(Icon icon)创建一个具有图像内容的标签
。。。
2) 普通按钮控件
在Swing中JButton表示按钮控件。常用构造方法:
JButton(String text) 创建一个带有文本标识的按钮
JButton(Icon icon) 创建一个带有图像标识的按钮
JButton(String text,Icon icon) 创建一个既有文本又有图像的按钮

实例:创建窗体,实现在窗体中添加“查看”与“帮助”两个按钮,在按钮上还添加图片
package qijia.si;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class JbuttonDemo extends JFrame{
	public static void main(String[] args){
		JbuttonDemo frame = new JbuttonDemo();
		frame.setVisible(true);
	}
	public JbuttonDemo(){
		super();
		setTitle("按钮实例");
		
		ImageIcon editIcon = new ImageIcon(getClass().getResource("watch.png"));
		ImageIcon delIcon = new ImageIcon(getClass().getResource("help.png"));
		
		getContentPane().setLayout(new FlowLayout());
		setBounds(100,100,215,74);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JButton okButton = new JButton("查看",editIcon);
		JButton delButton = new JButton();
		getContentPane().add(okButton);
		delButton.setIcon(delIcon);
		delButton.setText("帮助");
		getContentPane().add(delButton);	
		}
}
3) 单选按钮控件
JRadioButton组件实现了一个单选按钮。JRadioButton可以单独使用,也可以与ButtonGroup类联合使用。
实例:创建框体,在窗体中创建3个单选按钮,并将这3个按钮添加到同一个按钮组中,设置第一个单选按钮初试为选中状态。
package qijia.si;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class JRadioMemo extends JFrame{
	public JRadioMemo(){
		super();
		setTitle("单选按钮示意");
		ButtonGroup group =new ButtonGroup();
		getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER));
		setBounds(100,100,230,87);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		final JRadioButton rb = new JRadioButton();
		group.add(rb);
		rb.setText("优秀");
		getContentPane().add(rb);
		JRadioButton rb_1 = new JRadioButton("良好",true);
		group.add(rb_1);
		getContentPane().add(rb_1);
		JRadioButton rb_2 = new JRadioButton("及格");
		group.add(rb_2);
		getContentPane().add(rb_2);
	}
	public static void main(String[] args){
		JRadioMemo JRM = new JRadioMemo();
		JRM.setVisible(true);
	}
}

4) 复选框控件
JCheckBox类实现了一个复选框。
实例:创建窗体,在窗体中定义复选框组件,用户可以选择多个。
package qijia.si;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class CheckBoxDemo extends JFrame{
	public CheckBoxDemo(){
		super();
		getContentPane().setLayout(null);
		setBounds(100,100,310,103);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JCheckBox cb0 = new JCheckBox();
		cb0.setBounds(10,34,64,26);
		cb0.setText("上网");
		getContentPane().add(cb0);
		JCheckBox cb1 =new JCheckBox("旅游");
		cb1.setBounds(84,35,64,26);
		getContentPane().add(cb1);
		JCheckBox cb2 = new JCheckBox("看书");
		cb2.setBounds(158,34,64,26);
		getContentPane().add(cb2);
		JCheckBox cb3 = new JCheckBox("听歌");
		cb3.setBounds(232,34,64,26);
		getContentPane().add(cb3);
		final JLabel label = new JLabel();
		label.setText("你的爱好是: ");
		label.setBounds(10, 10, 91, 18);
		getContentPane().add(label);
	}
	public static void main(String[] args){
		CheckBoxDemo Demo1 = new CheckBoxDemo();
		Demo1.setVisible(true);
	}
}



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics