package Demo1;
import java.awt.*;
public class Demo1 {
public static void main(String[] args) {
//创建一个窗口对象
Frame frame = new Frame("这里测试windows窗口");
//指定窗口位置,大小
frame.setLocation(100,100);
frame.setSize(500,300);
//色值窗口可见
frame.setVisible(true);
}
}
package Demo1;
import java.awt.*;
public class Demo2 {
public static void main(String[] args) {
//1.创建一个wimdows对象,因为panel及其其他容器都不能独立存在,必须依附于Windows对象存在
Frame frame = new Frame("这里panel");
//2.创建一个panel对象
Panel p = new Panel();
//3.创建一个文本框和一个按钮,把他们放入到panel容器中
p.add(new TextField("这里是一个测试文本" ));
p.add(new Button("这里是一个测试按钮"));
//4.把panel放入到window中
frame.add(p);
//5.设置窗口位置和大小
frame.setBounds(100,100,500,300);
//设置window可见
frame.setVisible(true);
}
}
package Demo1;
import java.awt.*;
public class Demo2 {
public static void main(String[] args) {
Frame frame = new Frame("这里样式ScrollPane");
ScrollPane sp = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
sp.add(new TextField("this is test text"));
sp.add(new Button("this is test button"));
frame.add(sp);
frame.setBounds(100,100,300,500);
frame.setVisible(true);
}
}
Flowlayout
在flowlayout布局管理器中,组建就像流水一样向着某方向流动,遇到障碍便捷就会折回,从头开始排列,在默认情况写,flowlayout布局管理器从左现有排列所有组建,遇到边界就会折回下一行重新排列
构造方法 | |
---|---|
flowLayout() | 使用默认和对齐方式及默认的垂直间距,水平间距创建flowlayout布局管理器 |
flowlayout(int align) | 使用指定的对齐方式及其默认的垂直间距,水平间距创建flowlayout布局管理器 |
flowlayout(int align,inthgap,int vgap) | 使用指定的对齐方式及指定的垂直间距,水平间距创建flowlayout布局管理器 |
package Demo1;
import java.awt.*;
public class Demo2 {
public static void main(String[] args) {
Frame frame = new Frame("这里测试flowlayout");
//1.通过setlayout方法设置容器的布局管理器
frame.setLayout(new FlowLayout(FlowLayout.LEFT,20,20));
//2.添加多个按钮到frame中
for (int i = 1; i <=100;i++) {
frame.add(new Button("button"+i));
}
//设置最佳大小,pack方法
frame.pack();
frame.setVisible(true);
}
}
BorderLayout
BorderLayout将容器分为east,south,west,north,center五个区域,普通组建可以被放置在这个5个区域中的任意一个
当改变使用borderlayout的容器大小时,north,south和center区域水平调整,east,west和center区域垂直调整,使用borderlayout布局有如下两个注意点
- 当使用borderlayout布局管理器的容器添加组件时,需要指定要添加到哪一个区域红,如果没有指定添加到哪一个区域中,则默认添加到中间区域
- 如果向同一个区域总添加多个组件时,后放入的组件会覆盖先放的组件
构造方法 | |
---|---|
borderlayout() | 使用默认的水平间距,垂直间距 |
borderlayout(int hgap,int vgap) | 指定 |
package Demo1;
import java.awt.*;
public class Demo2 {
public static void main(String[] args) {
Frame frame = new Frame("这里测试Boderlayout");
//1.给frame设置boderlayout管理器
frame.setLayout(new BorderLayout(30,30));
//2.往frame的之间区域添加组件
frame.add(new Button("north"),BorderLayout.NORTH);
frame.add(new Button("south"),BorderLayout.SOUTH);
frame.add(new Button("east"),BorderLayout.EAST);
frame.add(new Button("west"),BorderLayout.WEST);
frame.add(new Button("center"),BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
}
- 注意
如果不往某个区域中放入组件,那么该区域不会被空白出来,而是会被其他区域占用(center)
package Demo1;
import java.awt.*;
public class Demo2 {
public static void main(String[] args) {
Frame frame = new Frame("这里测试Boderlayout");
//1.给frame设置boderlayout管理器
frame.setLayout(new BorderLayout(30,30));
//2.往frame的之间区域添加组件
frame.add(new Button("north"),BorderLayout.NORTH);
frame.add(new Button("south"),BorderLayout.SOUTH);
// frame.add(new Button("east"),BorderLayout.EAST);
// frame.add(new Button("west"),BorderLayout.WEST);
frame.add(new Button("center"),BorderLayout.CENTER);
Panel p = new Panel();
p.add(new Button("center Button"));
p.add(new TextField("test text"));
frame.add(p);
frame.pack();
frame.setVisible(true);
}
}
GridLayout
GridLayout布局管理器将容器分割成纵横线分隔的网格,每个网格所占用的区域大小相同,当向使用gridlayout布局管理器中添加组件时,默认从左向右,从上往下依次添加到每个网格中,与FlowLayout不同的是,放置在gridlayout布局管理器中的个组件的大小由组件所处的区域决定(每个组件将自动占满整个区域)
构造方法 | 方法功能 |
---|---|
GridLayout(int rows,int cols) | 采用指定的行数,列数,以及默认的间距 |
GridLayout(int rows ,int cols,int hgap,int vgap) | 指定行数数,列数,纵横间距 |
package Demo1;
import java.awt.*;
public class Demo2 {
public static void main(String[] args) {
Frame frame = new Frame("计算器");
//1.创建一个panel对象,里面存放一个textFiled组件
Panel p = new Panel();
p.add(new TextField(30));
//2.把当前panel添加到frame的北边区域
frame.add(p,BorderLayout.NORTH);
//3.创建一个panel对象,并且设置他的布局管理为Gridlayout
Panel p2 = new Panel();
p2.setLayout(new GridLayout(3,3,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("/"));
//5.把当前panel添加到frame中
frame.add(p2);
frame.pack();
frame.setVisible(true);
}
}
CardLayout
CardLayout布局管理器以时间而非空间来管理它里面的组件,他可以将容器里面所有组件看成一叠卡片(每个卡片其实就是一个组件),每次只有最上面的那个component才可见,就好像一副扑克牌,他们叠在一起,每次只有最上面的一副扑克牌才可见
方法名称 | 方法功能 |
---|---|
CardLayout() | 创建默认CardLyout布局管理器 |
CardLayout(int hgap,int vgap) | 通过指定卡片与容器左右边的间距(hgap),上下边距 (vgap)的间距来创建cardlayout布局管理器 |
first(Container target) | 显示target容器中第一张卡片 |
last(Container target) | 显示target容器中最后一张卡片 |
previous(Container target) | 显示target容器中前一张卡片 |
next(Container target) | 显示target容器中后一张卡片 |
show(Container tagrget ,String name) | 显示target容器中指定名字卡片 |
package Demo1;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.nio.charset.UnmappableCharacterException;
public class Demo3 {
public static void main(String[] args) {
Frame frame = new Frame("这里测试cardlayout");
//1.创建一个panel,用来存储多个卡片
Panel p1 = new Panel();
//2.创建Cardlayout对象,并且把该对象设置给之前创建的容器
CardLayout cardLayout = new CardLayout();
p1.setLayout(cardLayout);
//3.往panel中存储多个组件
String[] names ={"A","B","C","D","E"};
for (int i = 0; i <names.length; i++) {
p1.add(names[i],new Button(names[i]));
}
//4.把panel放到frame的中间区域
frame.add(p1);
//5. 创建另外一个panel,p2,用来存储多个按钮组件
Panel p2 = new Panel();
//6.创建5个按钮组件
Button b1 = new Button("privious");
Button b2 = new Button("next");
Button b3 = new Button("first");
Button b4 = new Button("last");
Button b5 = new Button("third");
//7.创建一个事件监听器,监听按钮的点击动作
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String actionCommand = e.getActionCommand();//这个字符就是按钮上的文字
switch (actionCommand){
case"privious":
cardLayout.previous(p1);
break;
case"next":
cardLayout.next(p1);
break;
case"first":
cardLayout.first(p1);
break;
case"last":
cardLayout.last(p1);
break;
case "third":
cardLayout.show(p1,"C");
break;
}
}
};
//8.把当前这个事件监听器和多个按钮绑定到一起
b1.addActionListener(listener);
b2.addActionListener(listener);
b3.addActionListener(listener);
b4.addActionListener(listener);
b5.addActionListener(listener);
//9.把按钮添加到容器p2中
p2.add(b1);
p2.add(b2);
p2.add(b3);
p2.add(b4);
p2.add(b5);
//10。把p2放在frame的南边区域
frame.add(p2,BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
}
Boxlayout
为了简化开发,Swing引入了一个新的布局管理器,Boxlayout,BoxLayout可以在垂直和水平两个方向上摆放Gui组件,Boxlayout提供了如下一个简单的构造器
方法名 | 功能 |
---|---|
Boxlayout(Container target,int axis) | 指定创建基于target容器的Boxlayout布局管理器,该布局管理器匿名的组件按照axis方向排列,其中axis有Boxlayout.x_AXIS(横向)和Boxlayout.y_AXIS(纵向)两个方向 |
package Demo1;
import javax.swing.*;
import java.awt.*;
public class Demo4 {
public static void main(String[] args){
Frame frame = new Frame();
//1.基于frame,创建一个boxlayout对象,并且垂直放置
BoxLayout boxlayout = new BoxLayout(frame,BoxLayout.X_AXIS);
//2.把Boxlayout设置给Frame
frame.setLayout(boxlayout);
//3.往frame中添加两个组件
frame.add(new Button("button1"));
frame.add(new Button("button2"));
frame.pack();
frame.setVisible(true);
}
}
- 在java.swing中,提供了一个新的容器Box,该容器的默认布局管理器就是Boxlayout,大多数情况下,使用box容器去容纳多个gui组件,然后再把box容器作为一个组件,添加到其他容器中,从而形成整体窗口布局
名称 | 功能 |
---|---|
static Box createHorizontallBox() | 创建一个水平排列的Box容器 |
static Box creatVertivalBox() | 创建一个锤子排列的Box容器 |
package Demo1;
import javax.swing.*;
import java.awt.*;
public class Demo5 {
public static void main(String[] args) {
Frame frame = new Frame("test");
//1.创建一个水平排列的box容器
Box b1 = Box.createHorizontalBox();
//2.往容器里面添加两个按钮
b1.add(new Button("button1"));
b1.add(new Button("button2"));
//3.创建一个垂直排列的容器
Box b2 = Box.createVerticalBox();
//4.往容器里面添加两个按钮
b2.add(new Button("buttonA"));
b2.add(new Button("buttonB"));
//5.吧Box放入frame中
frame.add(b1,BorderLayout.SOUTH);
frame.add(b2,BorderLayout.NORTH);
frame.pack();
frame.setVisible(true);
}
}
AWT中常用组件
https://blog.csdn.net/ruan_luqingnian/article/details/113512657
awt事件处理机制
定义:
在当某个组件上发生某个操作时,会自动的触发执行一些代码
- 事件源
- 事件
- 事件监听器
- 注册监听
package Demo1;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Demo7 {
Frame frame =new Frame("test");
TextField tf = new TextField("30");
Button ok = new Button("ok");
public void init(){
//组装视图
//监听视图
// MyLister myLister = new MyLister();
//注册监听
ok.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
tf.setText("hello pofen");
}
});
//把tf和ok放入frame
frame.add(tf,BorderLayout.NORTH);
frame.add(ok,BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
// private class MyLister implements ActionListener{
//
// @Override
// public void actionPerformed(ActionEvent e) {
// tf.setText("hello pofen");
// }
// }
public static void main(String[] args) {
new Demo7().init();
}
}
#GUI中常见的事件和事件监听器
https://blog.csdn.net/ruan_luqingnian/article/details/113555872?ops_request版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ruan_luqingnian/article/details/113555872
Swing
Swing是由100%java实现的,不在依赖本地平台的GUI