JAVA图形化界面(入门笔记)
创建Window
import java.awt.*;
public class WindowDemo {
public static void main(String[] args) {
//创建一个窗口对象
Frame frame=new Frame("通讯录管理系统");
//指定窗口的位置与大小
frame.setLocation(1001,100);
frame.setSize(500,300);
//设置窗口对象可见
frame.setVisible(true);
}
}
操作后的结果
创建Panel
import java.awt.*;
public class PanelDemo {
public static void main(String[] args) {
//创建一个window对象
Frame frame=new Frame("通讯录管理系统");
//创建一个panel对象
Panel p=new Panel();
//创建一个文本框和一个按钮,并且把它们放在Panle容器中
p.add(new TextField("这里是一个测试文本"));
p.add(new Button("这里是一个测试按钮"));
//把panel放在window中
frame.add(p);
//设置window的大小,位置
frame.setBounds(100,100,500,300);
//设置window可见
frame.setVisible(true);
}
}
运行结果
创建ScrollPane
import java.awt.*;
public class ScrollPaneDemo {
public static void main(String[] args) {
Frame frame=new Frame("通讯录管理系统");
//创建一个ScrollPane对象
ScrollPane sp=new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
//往ScrollPane中添加内容
sp.add(new TextField("这是一个测试文本"));
sp.add(new Button("这是一个测试按钮"));
//把ScrollPane添加到Frame中
frame.add(sp);
frame.setBounds(100,100,500,300);
frame.setVisible(true);
}
}
FlowLayout
import java.awt.*;
public class FlowLayoutDemo {
public static void main(String[] args) {
Frame frame=new Frame("通讯录管理系统");
//通过setLayout方法设置容器的布局管理器
frame.setLayout(new FlowLayout(FlowLayout.LEFT,20,20));//当遇到障碍物时,会从下一行的左边从头开始
//添加多个按钮到frame中
for(int i=1;i<=100;i++){
frame.add(new Button("按钮"+i));
}
//设置最佳大小,用pack方法
frame.pack();
frame.setVisible(true);
}
}
运行结果
BorderLayout
import java.awt.*;
public class BoderLayoutDemo {
public static void main(String[] args) {
Frame frame=new Frame("通讯录管理系统");
//给frame设置BoderLayout布局管理器
frame.setLayout(new BorderLayout(30,10));
//给frame区域添加组件
frame.add(new Button("北侧按钮"),BorderLayout.NORTH);
frame.add(new Button("南侧按钮"),BorderLayout.SOUTH);
frame.add(new Button("东侧按钮"),BorderLayout.EAST);
frame.add(new Button("西侧按钮"),BorderLayout.WEST);
frame.add(new Button("西侧按钮"),BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
}
运行结果
GridLayout布局管理器
import java.awt.*;
public class GridLayoutDemo {
public static void main(String[] args) {
Frame frame=new Frame("计算器");
//创建一个Panel对象,里面存放一个TextField组件
Panel p1=new Panel();
p1.add(new TextField(30));
//将该Panel添加到frame中去
frame.add(p1,BorderLayout.NORTH);
//创建一个Panel对象,里面存放布局管理器GridLayout
Panel p2=new Panel();
p2.setLayout(new GridLayout(3,5,4,4));
for(int i=0;i<10;i++){
p2.add(new Button(i+""));
}
p2.add(new Button("+"));
p2.add(new Button("-"));
p2.add(new Button("*"));
p2.add(new Button("/"));
p2.add(new Button("="));
//将该布局管理器添加到frame中去'
frame.add(p2);
frame.pack();
frame.setVisible(true);
}
}
运行结果
CardLayout
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CardLayoutDemo {
public static void main(String[] args) {
Frame frame=new Frame("通讯录管理系统");
//创建一个Panel,用来存储多张卡片
Panel p1=new Panel();
//创建CardLayout对象,并且将该对象设置给之前创建的对象
CardLayout cardlayout=new CardLayout();
p1.setLayout(cardlayout);
//往Panel中存储多个组件
String[] names={"第一张","第二张","第三张","第四张","第五张"};
for(int i=0;i<5;i++){
p1.add(names[i],new Button(names[i]));
}
//把Panel 放在frame的中间区域
frame.add(p1);
//创建另一个Panel p2,用来存储多个按钮组件
Panel p2=new Panel();
//创建5个按钮组件
Button b1=new Button("上一张");
Button b2=new Button("下一张");
Button b3=new Button("第一张");
Button b4=new Button("最后一张");
Button b5=new Button("第三张");
//创建一个事件监听器,监听按钮的点击动作
ActionListener listener=new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String actionCommand=e.getActionCommand();
switch(actionCommand){
case "上一张":
cardlayout.previous(p1);
break;
case "下一张":
cardlayout.next(p1);
break;
case "第一张":
cardlayout.first(p1);
break;
case"最后一张":
cardlayout.last(p1);
break;
case "第三张":
cardlayout.show(p1,"第三张");
break;
}
}
};
//把该事件监听器与按钮捆绑在一起
b1.addActionListener(listener);
b2.addActionListener(listener);
b3.addActionListener(listener);
b4.addActionListener(listener);
b5.addActionListener(listener);
//把按钮添加到容器Panel中去
p2.add(b1);
p2.add(b2);
p2.add(b3);
p2.add(b4);
p2.add(b5);
//把p2放在frame的南边区域
frame.add(p2,BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
}
运行解雇
BoxLayout布局管理器1
import javax.swing.*;
import java.awt.*;
public class BoxLayoutDemo {
public static void main(String[] args) {
Frame frame=new Frame("通讯录管理系统");
//基于frame容器,创建一个BoxLayout对象,并且,该对象存放组件是垂直存放
BoxLayout boxlayout=new BoxLayout(frame,BoxLayout.Y_AXIS);
//把BoxLayout对象设置给frame
frame.setLayout(boxlayout);
//往frame中添加两个按钮组件
frame.add(new Button("按钮1"));
frame.add(new Button("按钮2"));
frame.pack();
frame.setVisible(true);
}
}
BoxLayout布局管理器2
import javax.swing.*;
import java.awt.*;
public class BoxLayoutDemo2 {
public static void main(String[] args) {
Frame frame=new Frame("通讯录管理系统");
//创建一个水平排列的组件的Box容器
Box hBox= Box.createHorizontalBox();
//往当前容器中添加两个按钮
hBox.add(new Button("左按钮"));
hBox.add(new Button("右按钮"));
//创建一个水平排列的组件的Box容器
Box hBox2= Box.createVerticalBox();
//往当前容器中添加两个按钮
hBox2.add(new Button("上按钮"));
hBox2.add(new Button("下按钮"));
//把两个Box容器添加到Frame中
frame.add(hBox,BorderLayout.NORTH);
frame.add(hBox2);
frame.pack();
frame.setVisible(true);
}
}
BoxLayout布局管理器3
import javax.swing.*;
import java.awt.*;
public class BoxLayoutDemo3 {
public static void main(String[] args) {
Frame frame=new Frame("通讯录管理系统");
//创建水平排列的Box容器hBox
Box hBox= Box.createHorizontalBox();
//往hBox容器中添加按钮,还需要在多个按钮之间添加分割
hBox.add(new Button("左按钮"));
hBox.add(Box.createHorizontalGlue());
hBox.add(new Button("右按钮"));
hBox.add(Box.createHorizontalStrut(30));
hBox.add(new Button("中间按钮"));
//创建垂直排列的Box容器vBox
Box vBox=Box.createVerticalBox();
//往vBox容器中添加按钮,还需要在多个按钮之间添加分割
vBox.add(new Button("上按钮"));
vBox.add(Box.createVerticalGlue());
vBox.add(new Button("中间按钮"));
vBox.add(Box.createVerticalStrut(30));
vBox.add(new Button("下按钮"));
//把Box容器添加到frame中
frame.add(hBox,BorderLayout.NORTH);
frame.add(vBox);
frame.pack();
frame.setVisible(true);
}
}
按钮之间添加了分割
awt常用基本组件测试
import javax.swing.*;
import java.awt.*;
public class BasicComponentDemo {
Frame frame=new Frame("这是一个简单的测试");
TextArea ta=new TextArea(5,20); //对应顶部的文本域,括号中的参数用来设置大小
Choice colorChooser=new Choice(); //对应颜色的选择按钮
CheckboxGroup chg=new CheckboxGroup();//CheckboxGroup对象用于形成一组复选框,其中只有一个复选框可以处于打开状态,而所有其他复选框必须处于关闭状态。
Checkbox male=new Checkbox("男",chg,true);
Checkbox female=new Checkbox("女",chg,true);
Checkbox isMarried=new Checkbox("是否已婚?");
TextField tf=new TextField(20); //对应底部的文本框,并且长度设置为20
Button ok=new Button("确认"); //底部的确定按钮
List colorList=new List(6,true); //对应顶部右边的颜色列表
public void init(){
//组装底部
Box bBox= Box.createHorizontalBox();
bBox.add(tf);
bBox.add(ok);
//组装选择部分
colorChooser.add("红色");
colorChooser.add("蓝色");
colorChooser.add("绿色");
Box cBox=Box.createHorizontalBox();
cBox.add(colorChooser);
cBox.add(male);
cBox.add(female);
cBox.add(isMarried);
//组装文本域与选择部分
Box topLeft=Box.createVerticalBox();
topLeft.add(ta);
topLeft.add(cBox);
//组装顶部左边与列表框
colorList.add("红色");
colorList.add("绿色");
colorList.add("蓝色");
Box top=Box.createHorizontalBox();
top.add(topLeft);
top.add(colorList);
//组装界面
frame.add(bBox,BorderLayout.SOUTH);
frame.add(top);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
new BasicComponentDemo().init();
}
}
测试结果
Dialog
Dialog是Window的子类,是一个容器类,属于特殊的组件。对话框是可以独立存在的顶级窗口,因此用法与普通窗口的用法几乎完全一致,但是使用对话框需要注意一下两点:
1.对话框通常依赖于其他窗口,就是通常需要有一个父窗口
2.对话框有非模式和模式两种,当某个模式的对话框被打开后,该模式对话框总是位于它的父窗口之上,在模式对话框被关闭之前,父窗口无法获得焦点。
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class DialogDemo {
public static void main(String[] args) {
Frame frame=new Frame("通讯录管理系统");
//创建两个对话框Dialog,一个是模式的,一个是非模式的
Dialog d1=new Dialog(frame,"模式对话框",true);
Dialog d2=new Dialog(frame,"非模式对话框",false);
//通过setBounds方法设置Dialog的位置与大小
d1.setBounds(20,30,500,300);
d2.setBounds(20,30,500,300);
//创建两个按钮
Button b1=new Button("打开模式对话框");
Button b2=new Button("打开非模式对话框");
//给这两个按钮添加点击后的行为
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
d1.setVisible(true);
}
});
b2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
d2.setVisible(true);
}
});
//把按钮添加到frame中去
frame.add(b1,BorderLayout.NORTH);
frame.add(b2);
frame.pack();
frame.setVisible(true);
}
}
在Dialog对话框中添加内容
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class DialogDemo {
public static void main(String[] args) {
Frame frame=new Frame("通讯录管理系统");
//创建一个对话框Dialog,一个是模式的,一个是非模式的
Dialog d1=new Dialog(frame,"模式对话框",true);
//通过setBounds方法设置Dialog的位置与大小
d1.setBounds(20,30,500,300);
//创建一个Box,用来存放一个文本区域与一个按钮
Box vBox=Box.createVerticalBox();
vBox.add(new TextField());
vBox.add(new Button("确定"));
//将常见的文本框放在对话框Dialog中
d1.add(vBox);
//创建已个按钮
Button b1=new Button("打开模式对话框");
//给这一个按钮添加点击后的行为
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
d1.setVisible(true);
}
});
//把按钮添加到frame中去
frame.add(b1,BorderLayout.NORTH);
frame.pack();
frame.setVisible(true);
}
}
FileDiolg
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class FileDialogTest {
public static void main(String[] args) {
Frame frame=new Frame("通讯录管理系统");
//创建两个FileDialog对象
FileDialog f1=new FileDialog(frame,"选择要打开的文件",FileDialog.LOAD);
FileDialog f2=new FileDialog(frame,"选择要保存的文件",FileDialog.SAVE);
//创建两个按钮
Button b1=new Button("打开文件");
Button b2=new Button("保存文件");
//给这两个按钮设置点击后的行为,获取打开或者保存的路径名
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
f1.setVisible(true);
String director=f1.getDirectory();
String file=f1.getFile();
System.out.println("打开的文件路径为:"+director);
System.out.println("打开的文件名称为:"+file);
}
});
b2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
f2.setVisible(true);
String director=f2.getDirectory();
String file=f2.getFile();
System.out.println("保存的文件路径为:"+director);
System.out.println("保存的文件名称为:"+file);
}
});
//把按钮添加到Frame中、
frame.add(b1,BorderLayout.NORTH);
frame.add(b2);
frame.pack();
frame.setVisible(true);
}
}
消息机制的举例应用
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class EventDemo {
public static void main(String[] args) {
new EventDemo().init();
}
public void init(){
Frame frame=new Frame("事件处理机制测试");
TextField tf=new TextField(20);
Button b=new Button("确定");
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("ok按钮被点击了");
tf.setText("HelloWorld");
}
});
frame.add(tf,BorderLayout.NORTH);
frame.add(b);
frame.pack();
frame.setVisible(true);
}
}
时间处理机制
import javax.swing.*;
import javax.swing.text.TextAction;
import java.awt.*;
import java.awt.event.*;
public class ListenerDemo {
public static void main(String[] args) {
Frame frame=new Frame("测试监听器");
TextField tf=new TextField(30);
Choice names=new Choice();
names.add("小红");
names.add("小明");
names.add("小强");
//给文本添加TextListener,监听内容的变化
tf.addTextListener(new TextListener() {
@Override
public void textValueChanged(TextEvent e) {
String text=tf.getText();
System.out.println("当前文本框中的内容为:"+text);
}
});
//给下拉选择框添加ItemListener,监听条目选向的变化
names.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
Object item=e.getItem();
System.out.println("当前选选择的条目为:"+item);
}
});
//给frame注册ContainerListener监听器,监听容器中组件的变化
frame.addContainerListener(new ContainerListener() {
@Override
public void componentAdded(ContainerEvent e) {
Component child=e.getChild();
System.out.println("frame中添加了:"+child);
}
@Override
public void componentRemoved(ContainerEvent e) {
}
});
Box hBox= Box.createHorizontalBox();
hBox.add(names);
hBox.add(tf);
frame.add(hBox);
frame.pack();
frame.setVisible(true);
}
}
时间处理机制
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class ListenerDemo2 {
public static void main(String[] args) {
Frame frame=new Frame("这里是测试WindowListener");
frame.setBounds(200,200,500,500);
//设置WindowListener,监听用户点击X的动作,如果点击X,则关闭窗口
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
//停止当前程序
System.exit(0);
}
});
// frame.pack();
frame.setVisible(true);
}
}
点击x按钮后,该界面就会取消
菜单组件基本使用
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
public class SimpleMenu {
//创建窗口
private Frame frame=new Frame("这里是测试菜单相关组件");
//创建菜单条
MenuBar menubar=new MenuBar();
//创建菜单组件
Menu fileMenu=new Menu("文件");
Menu editMenu=new Menu("编辑");
Menu formatMenu=new Menu("格式");
//创建菜单项组件
MenuItem auto=new MenuItem("自动换行");
MenuItem copy=new MenuItem("复制");
MenuItem paste=new MenuItem("粘贴");
MenuItem comment=new MenuItem("注释 Ctrl+Shift+Q",new MenuShortcut(KeyEvent.VK_Q,true));
MenuItem cancelComment=new MenuItem("取消注释");
TextArea ta=new TextArea(6,40);
public void init(){
//组装视图
comment.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ta.append(e.getActionCommand());
}
});
formatMenu.add(comment);
formatMenu.add(cancelComment);
editMenu.add(auto);
editMenu.add(copy);
editMenu.add(paste);
editMenu.add(formatMenu);
//组装菜单条
menubar.add(fileMenu);
menubar.add(editMenu);
//把菜单条放入到frame中
frame.setMenuBar(menubar);
frame.add(ta);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
new SimpleMenu().init();
}
}