java-day39-GUI
文章目录
GUI案例
计算器
package com.zzb.day39;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class MyFirstGUI extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
private JPanel northPanel,centerPanel;
private JTextField f1,f2,f3;
private JLabel label1,label2;
private JButton btn;
private JScrollPane scrollPane;
private JTextArea textArea;
// 当前f1中的值
private int v1;
// 当前f2中的值
private int v2;
public MyFirstGUI() {
setTitle("my-first-GUI");
setBounds(300, 300, 500, 500);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.initComponent();
setVisible(true);
}
private void initComponent() {
northPanel = new JPanel();
centerPanel = new JPanel();
f1 = new JTextField(5);
f2 = new JTextField(5);
f3 = new JTextField(5);
f1.setEnabled(false);
f2.setEnabled(false);
v1 = getNum();
v2 = getNum();
f1.setText(v1+"");
f2.setText(v2+"");
label1 = new JLabel("+");
label2 = new JLabel("=");
btn = new JButton("查看结果");
textArea = new JTextArea();
scrollPane = new JScrollPane(textArea);
textArea.setEnabled(false);
// 设置需要的布局管理器
centerPanel.setLayout(new BorderLayout());
// 依次把组件添加到相应的容器中
northPanel.add(f1);
northPanel.add(label1);
northPanel.add(f2);
northPanel.add(label2);
northPanel.add(f3);
northPanel.add(btn);
centerPanel.add(scrollPane);
super.add(northPanel,BorderLayout.NORTH);
super.add(centerPanel);
//给组件添加事件监听器
btn.addActionListener(this);
}
private int getNum(int max) {
int num = (int)(Math.random()*max)+1;
return num;
}
private int getNum() {
return this.getNum(100);
}
@Override
public void actionPerformed(ActionEvent e) {
int v3 = 0;
try {
v3 = Integer.parseInt(f3.getText());
} catch (NumberFormatException e1) {
//System.out.println("输入的结果必须是数字!!");
textArea.append("输入的结果必须是数字!!\n");
f3.setText("");
f3.requestFocus();
return;
}
String str = null;
if((v1+v2)==v3) {
//答案正确
str = "回答正确! "+v1+"+"+v2+"="+v3+"\n";
v1 = getNum();
v2 = getNum();
f1.setText(v1+"");
f2.setText(v2+"");
}else {
//答案错误
str = "回答错误! "+v1+"+"+v2+"="+v3+", 正确答案为 "+v1+"+"+v2+"="+(v1+v2)+"\n";
}
textArea.append(str);
f3.setText("");
f3.requestFocus();
}
public static void main(String[] args) {
new MyFirstGUI();
}
}
文本框和密码
package com.zzb.day39;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
/**
* 文本框 密码框
*/
public class JTextFieldTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 组件
JTextField field = new JTextField(10);
JPasswordField passwordField = new JPasswordField(10);
// 设置容器基本属性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
java
// 把组件依次放到容器中
panel.add(field);
panel.add(passwordField);
frame.add(panel);
// 设置主容器的可见性
frame.setVisible(true);
}
}
文本域 滚动面板
package com.zzb.day39;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
/**
* 文本域 滚动面板
*/
public class JScrollPaneTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 组件
JTextArea area = new JTextArea();
area.setSize(100, 100);
JScrollPane scrollPane = new JScrollPane(area);
// 设置容器基本属性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把组件依次放到容器中
panel.setLayout(new BorderLayout());//改变panel中的布局管理器
panel.add(scrollPane);
frame.add(panel);
// 设置主容器的可见性
frame.setVisible(true);
}
}
菜单栏 菜单 菜单项
package com.zzb.day39;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
/**
* 菜单栏 菜单 菜单项
*/
public class JScrollBarTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 组件
JMenuBar bar = new JMenuBar();
JMenu menu1 = new JMenu("系统");
JMenu menu2 = new JMenu("工具");
JMenuItem item1,item2,item3;
item1 = new JMenuItem("启动");
item2 = new JMenuItem("暂停");
item3 = new JMenuItem("关闭");
menu1.add(item1);
menu1.addSeparator();
menu1.add(item2);
menu1.addSeparator();
menu1.add(item3);
JMenuItem item4,item5,item6;
item4 = new JMenuItem("截图");
item5 = new JMenuItem("刷新");
item6 = new JMenuItem("复制");
menu2.add(item4);
menu2.addSeparator();
menu2.add(item5);
menu2.addSeparator();
menu2.add(item6);
bar.add(menu1);
bar.add(menu2);
// 设置容器基本属性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把组件依次放到容器中
panel.add(bar);
frame.add(panel);
// 设置主容器的可见性
frame.setVisible(true);
}
}
进度条
package com.zzb.day39;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
/**
* 进度条
*/
public class JProgressBarTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 组件
JProgressBar bar = new JProgressBar();
bar.setMinimum(0);
bar.setMaximum(100);
//设置进度条的初始值
bar.setValue(20);
//显示当前进度条的状态
bar.setStringPainted(true);
JButton btn = new JButton("下载");
// 设置容器基本属性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把组件依次放到容器中
panel.add(bar);
panel.add(btn);
frame.add(panel);
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int value = bar.getValue();
if(value == 100) {
System.out.println("已经下载完毕!!");
return;
}
value = value + (int)(Math.random()*10);
value = value >= 100? 100:value;
bar.setValue(value);
}
});
// 设置主容器的可见性
frame.setVisible(true);
}
}
数据列表JList,可以单选也可以多选
package com.zzb.day39;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
/**
* 数据列表JList,可以单选也可以多选
*/
public class JListTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 组件
String[] arr = {"列表1","列表2","列表3","列表4","列表5"};
JList<String> list = new JList<>(arr);
// 设置容器基本属性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把组件依次放到容器中
panel.add(list);
frame.add(panel);
// 设置主容器的可见性
frame.setVisible(true);
}
}
对话框
package com.zzb.day39;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 对话框
*/
public class JDialogTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 组件
JButton btn = new JButton("OK");
//参数1 对话框属于哪个窗口
//参数2 对话框的标题
//参数3 对话框的模式
JDialog dialog = new JDialog(frame,"对话框",true);
dialog.setBounds(400, 400, 300, 300);
dialog.setLayout(new FlowLayout());//设置对话框的布局管理器
dialog.add(btn);//把按钮放到对话框中
// dialog.setVisible(true);
// 设置容器基本属性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把组件依次放到容器中
JButton show = new JButton("显示对话框");
panel.add(show);
frame.add(panel);
// show.addActionListener(new ActionListener() {
// @Override
// javapublic void actionPerformed(ActionEvent e) {
// dialog.setVisible(true);
// }
// });
//给按钮show添加事件处理,用户一点击按钮,就调指定代码
show.addActionListener( e -> dialog.setVisible(true) );
// 设置主容器的可见性
frame.setVisible(true);
}
}
画布
package com.zzb.day39;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 画布
*/
public class CanvasTest {
private static int x1;//记录上一次拖拽时候的座标
private static int y1;//记录上一次拖拽时候的座标
private static int x2;//记录本次 拖拽时候的座标
private static int y2;//记录本次 拖拽时候的座标
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 组件
Canvas canvas = new Canvas() {
private static final long serialVersionUID = 1L;
@Override
public void paint(Graphics g) {
g.drawLine(0, 0, panel.getWidth(), panel.getHeight());
}
};
// 设置容器基本属性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把组件依次放到容器中
panel.setLayout(new BorderLayout());//设置panel的布局管理器
panel.add(canvas);
frame.add(panel);
// 给画布添加事件监听器,监听鼠标在画布中拖拽的操作
// 鼠标一旦除非这个拖拽操作,监听器就会捕获这个事件对象e
// 并且调用指定方法,进行事件处理
// MouseMotionListener只能监听鼠标拖拽和移动
canvas.addMouseMotionListener(new MouseAdapter() {
private Graphics g;
@Override
public void mouseDragged(MouseEvent e) {
// 获取鼠标当前触发事件的时候所在位置的座标
// x1 y1 保存上一次的座标
x1 = x2;
y1 = y2;
//x2 y2 一直都是当前的最新座标
x2 = e.getX();
y2 = e.getY();
//System.out.println("当前鼠标拖拽时的座标:("+x+","+y+")");
if(g == null) {
g = canvas.getGraphics();
}
g.setColor(Color.RED);
//g.fillOval(x, y, 10, 10);
g.drawLine(x1, y1, x2, y2);
}
});
// MouseListener可以监听鼠标的按下去事件
canvas.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
//鼠标按下之后,获取当前的初始座标,默认初始座标(x1,y1) 和 (x2,y2) 相同
x1 = x2 = e.getX();
y1 = y2 = e.getY();
}
});
// 设置主容器的可见性
frame.setVisible(true);
}
}
网格布局管理器
package com.zzb.day39;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 网格布局管理器
*/
public class GridLayoutTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 组件
JButton[] btns = new JButton[9];
for(int i=1;i<=9;i++) {
btns[i-1] = new JButton(""+i);
}
// 设置容器基本属性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把组件依次放到容器中
// 注意,JPanel默认就是流式布局管理器
panel.setLayout(new GridLayout(3,3));//设置panel的布局管理器
for(JButton btn : btns) {
panel.add(btn);
}
// 注意,JFrame默认就是边际布局管理器
frame.add(panel);
// 设置主容器的可见性
frame.setVisible(true);
}
}
流式布局管理器
package com.zzb.day39;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 流式布局管理器
*/
public class FlowLayoutTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 组件
JButton[] btns = new JButton[50];
for(int i=1;i<=50;i++) {
String str = i<10? "0"+i : ""+i;
btns[i-1] = new JButton(str);
}
// 设置容器基本属性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把组件依次放到容器中
// 注意,JPanel默认就是流式布局管理器
//panel.setLayout(new FlowLayout());//设置panel的布局管理器
for(JButton btn : btns) {
panel.add(btn);
}
// 注意,JFrame默认就是边际布局管理器
frame.add(panel);
// 设置主容器的可见性
frame.setVisible(true);
}
}
卡片布局管理器
package com.zzb.day39;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 卡片布局管理器
*/
public class CardLayoutTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JPanel northPanel = new JPanel();
// 组件
JPanel[] panels = new JPanel[4];
panels[0] = new JPanel();
panels[0].setBackground(Color.RED);
panels[1] = new JPanel();
panels[1].setBackground(Color.BLACK);
panels[2] = new JPanel();
panels[2].setBackground(Color.BLUE);
panels[3] = new JPanel();
panels[3].setBackground(Color.GREEN);
JButton btn1,btn2,btn3,btn4;
btn1 = new JButton("RED");
btn2 = new JButton("BLACK");
btn3 = new JButton("BLUE");
btn4 = new JButton("GREEN");
JButton[] btns = new JButton[4];
btns[0] = btn1;
btns[1] = btn2;
btns[2] = btn3;
btns[3] = btn4;
// 设置容器基本属性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把组件依次放到容器中
// 注意,JPanel默认就是流式布局管理器
northPanel.add(btn1);
northPanel.add(btn2);
northPanel.add(btn3);
northPanel.add(btn4);
final CardLayout layout = new CardLayout();
panel.setLayout(layout);//设置panel的布局管理器
panel.add("RED",panels[0]);
panel.add("BLACK",panels[1]);
panel.add("BLUE",panels[2]);
panel.add("GREEN",panels[3]);
// 注意,JFrame默认就是边际布局管理器
frame.add(northPanel,BorderLayout.NORTH);
frame.add(panel);
panel.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
layout.next(panel);
// layout.show(panel, "a4");
}
});
for(JButton btn : btns) {
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String value = btn.getText();
layout.show(panel, value);
}
});
}
// 设置主容器的可见性
frame.setVisible(true);
}
}
边际布局管理器
package com.zzb.day39;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 边际布局管理器
*/
public class BorderLayoutTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 组件
JButton northBtn,southBtn,westBtn,eastBtn,centerBtn;
northBtn = new JButton("north");
southBtn = new JButton("south");
westBtn = new JButton("west");
eastBtn = new JButton("east");
centerBtn = new JButton("center");
// 设置容器基本属性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把组件依次放到容器中
panel.setLayout(new BorderLayout());//设置panel的布局管理器
panel.add(northBtn,BorderLayout.NORTH);java
panel.add(southBtn,BorderLayout.SOUTH);
panel.add(westBtn ,BorderLayout.WEST);
panel.add(eastBtn ,BorderLayout.EAST);
//注意,不指定位置,默认就是存放到center中间的空间
//panel.add(centerBtn);
panel.add(centerBtn,BorderLayout.CENTER);
frame.add(panel);
// 设置主容器的可见性
frame.setVisible(true);
}
}
自定义布局管理器
package com.zzb.day39;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
*
*/
public class MyLayoutTest {
public static void main(String[] args) {
// 容器
JFrame frame = new JFrame();
JPanel panel = new JPanel();
// 组件
JButton btn = new JButton("hello");
btn.setBounds(0, 0, 100, 30);
// 设置容器基本属性
frame.setBounds(300, 300, 500, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 把组件依次放到容器中
panel.setLayout(null);//把panel中的布局管理器设置为null
panel.add(btn);
frame.add(panel);
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int x = (int)(Math.random()*400);
int y = (int)(Math.random()*400);
btn.setLocation(x, y);
}
});
// 设置主容器的可见性
frame.setVisible(true);
}
}
事件监听1
package com.zzb.day39;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MyJFrameTest1 {
//声明用到的容器
private JFrame frame;
private JPanel panel;
//声明用到的组件
private JButton button;
//初始化主容器并且设置基本的属性
public MyJFrameTest1() {
frame = new JFrame("我的GUI");
frame.setBounds(300, 300, 500, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.initComponent();
frame.setVisible(true);
}
//初始化其他组件
private void initComponent() {
//1 创建容器和组件对象
panel = new JPanel();
button = new JButton("OK");
//2 设置容器的布局管理器,如果使用容器默认的布局管理器,则可以不写这一步
//3 把组件依次存放到对应容器中
panel.add(button);
frame.add(panel);
//4 给组件添加事件监听器(可选)
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("OK");
}
});
}
//创建当前类对象
public static void main(String[] args) {
new MyJFrameTest1();
}
}
事件监听2
package com.zzb.day39;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MyJFrameTest2 extends JFrame{
private static final long serialVersionUID = 1L;
//声明用到的容器
private JPanel panel;
//声明用到的组件
private JButton button;
//初始化主容器并且设置基本的属性
public MyJFrameTest2() {
super("我的GUI");
super.setBounds(300, 300, 500, 500);
super.setResizable(false);
super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.initComponent();
super.setVisible(true);
}
//初始化其他组件
private void initComponent() {
//1 创建容器和组件对象
panel = new JPanel();
button = new JButton("OK");
//2 设置容器的布局管理器,如果使用容器默认的布局管理器,则可以不写这一步
//3 把组件依次存放到对应容器中
panel.add(button);
super.add(panel);
//4 给组件添加事件监听器(可选)
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("OK");
}
});
}
//创建当前类对象
public static void main(String[] args) {
new MyJFrameTest2();
}
}
事件监听3
package com.zzb.day39;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
// MyJFrameTest3继承了JFrame,那么这个MyJFrameTest3就可以当做前一个窗口来使用
// MyJFrameTest3同时有实现了监听器接口,那么MyJFrameTest3就可以当做一个监听器来使用
public class MyJFrameTest3 extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
//声明用到的容器
private JPanel panel;
//声明用到的组件
private JButton button;
//初始化主容器并且设置基本的属性
public MyJFrameTest3() {
super("我的GUI");
super.setBounds(300, 300, 500, 500);
super.setResizable(false);
super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.initComponent();
super.setVisible(true);
}
//初始化其他组件
private void initComponent() {
//1 创建容器和组件对象
panel = new JPanel();
button = new JButton("OK");
//2 设置容器的布局管理器,如果使用容器默认的布局管理器,则可以不写这一步
//3 把组件依次存放到对应容器中
panel.add(button);
super.add(panel);
//4 给组件添加事件监听器(可选)
button.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("OK");
}
//创建当前类对象
public static void main(String[] args) {
new MyJFrameTest3();
}
}