GUI
一、AWT
1、Frame
//声明一个窗体
Frame frame = new Frame(s);
//设置窗体可见
frame.setVisible(true);
//设置窗体大小
frame.setSize(400,300);
//设置窗体颜色
Color c = new Color(114, 114, 114);
frame.setBackground(c);
//frame.setBackground(new Color(114, 114, 114));
//设置弹窗的弹出的位置
frame.setLocation(10,10);
//设置窗口大小不可变,默认是可变的
frame.setResizable(false);
public class Test {
public static void main(String[] args) {
MyFrame frame1 = new MyFrame(100,100,200,200,Color.black);
MyFrame frame2 = new MyFrame(300,100,200,200,Color.BLUE);
MyFrame frame3 = new MyFrame(100,300,200,200,Color.CYAN);
MyFrame frame4 = new MyFrame(300,300,200,200,Color.darkGray);
}
}
class MyFrame extends Frame{
static int id = 0;
public MyFrame(int x, int y, int w, int h, Color c) {
super("Java"+(++id));
setBackground(c);
setVisible(true);
setBounds(x,y,w,h);
}
}
2、panel
将panel加入frame中,对panel进行操作,
在frame中使用panel要先设置frame布局为NULL
public class TestPanel {
public static void main(String[] args) {
Panel panel = new Panel();
Frame frame = new Frame();
//设置布局
frame.setLayout(null);
frame.setBounds(100,100,300,300);
frame.setVisible(true);
panel.setBounds(100,100,100,100);
Color c = new Color(0x2E2EC1);
panel.setBackground(c);
frame.add(panel);
//关闭窗口
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//frame.add(panel);
}
}
3、布局
-
流式布局
package com.wang.layout; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class TestFloat { public static void main(String[] args) { Frame frame = new Frame(); frame.setBounds(100,100,300,300); //流式布局,一行不够到下一行,铺 //居中 frame.setLayout(new FlowLayout(FlowLayout.CENTER)); //frame.setLayout(new FlowLayout(FlowLayout.LEFT)); //frame.setLayout(new FlowLayout(FlowLayout.RIGHT)); frame.setVisible(true); Button button1 = new Button("button1"); Button button2 = new Button("button2"); Button button3 = new Button("button3"); frame.add(button1); frame.add(button2); frame.add(button3); frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(1); } }); } }
一行放不下会转到下一行
- 东西南北中
package com.wang.layout;
import java.awt.*;
public class TestBoarderLayout {
public static void main(String[] args) {
Frame frame = new Frame("BorderLayout");
frame.setBounds(100,100,300,300);
frame.setVisible(true);
Button east = new Button("east");
Button west = new Button("west");
Button south = new Button("south");
Button north = new Button("north");
Button center = new Button("center");
frame.add(east,BorderLayout.EAST);
frame.add(west,BorderLayout.WEST);
frame.add(south,BorderLayout.SOUTH);
frame.add(north,BorderLayout.NORTH);
frame.add(center,BorderLayout.CENTER);
}
}
必须有个中间的那块,不然会留出来
-
表格布局
public class TestGridLayout { public static void main(String[] args) { Frame frame = new Frame(); frame.setBounds(100,100,300,300); frame.setVisible(true); //表格布局,3行2列 frame.setLayout(new GridLayout(3,2)); //大小自动填充 frame.pack(); Button button1 = new Button("btn1"); Button button2 = new Button("btn2"); Button button3 = new Button("btn3"); Button button4 = new Button("btn4"); Button button5 = new Button("btn5"); Button button6 = new Button("btn6"); frame.add(button1); frame.add(button2); frame.add(button3); frame.add(button4); frame.add(button5); frame.add(button6);
}
4、事件监听
package com.wang.listener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestActionListener {
public static void main(String[] args) {
Frame frame = new Frame();
frame.setBounds(100,100,100,100);
frame.setVisible(true);
Button button = new Button();
MyActionListener myActionListener = new MyActionListener();
button.addActionListener(myActionListener);
frame.add(button);
//关闭窗口的两种方法1、
// frame.addWindowListener(new WindowAdapter() {
// @Override
// public void windowClosing(WindowEvent e) {
// System.exit(1);
// }
// });
// 2、
windowClose(frame);
}
public static void windowClose(Frame frame){
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(1);
}
});
}
}
class MyActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("wwwwwww");
}
}
两个按钮一个监听事件
package com.wang.listener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestActionTwo {
public static void main(String[] args) {
Frame frame = new Frame();
frame.setBounds(100,100,100,100);
frame.setVisible(true);
frame.setLayout(new GridLayout(2,1));
Button button1 = new Button("start");
Button button2 = new Button("stop");
button1.setActionCommand("start");
button2.setActionCommand("stop");
MyActionListener1 myActionListener = new MyActionListener1();
button1.addActionListener(myActionListener);
button2.addActionListener(myActionListener);
frame.add(button1);
frame.add(button2);
windowClose(frame);
}
public static void windowClose(Frame frame){
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(1);
}
});
}
}
//两个按钮一个监听事件
class MyActionListener1 implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(e.getActionCommand());
}
}
5、文本框
package com.wang.listener;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class TestText {
public static void main(String[] args) {
MyFrame myFrame = new MyFrame();
windowClose(myFrame);
}
public static void windowClose(MyFrame frame){
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(1);
}
});
}
}
class MyFrame extends Frame{
public MyFrame() throws HeadlessException {
TextField textField = new TextField();
add(textField);
//监听文本框输入的字符
MyActionListener3 myActionListener3 = new MyActionListener3();
//按enter键会触发
textField.addActionListener(myActionListener3);
textField.setEchoChar('*');
setVisible(true);
pack();
}
}
class MyActionListener3 implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
//获得资源,返回一个对象
TextField textField = (TextField) e.getSource();
System.out.println(textField.getText());
textField.setText("");
}
}
实现简易计算器
package com.wang.listener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestCalc {
public static void main(String[] args) {
new Calculator().loadFrame();
}
}
//计算器类
class Calculator extends Frame{
TextField num1,num2,num3;
public void loadFrame() {
//文本框
num1 = new TextField(10);//字符数,也是长度
num2 = new TextField(10);
num3 = new TextField(10);
//一个按钮
Button button = new Button("=");
MyCalcultorListener myCalcultorListener = new MyCalcultorListener(this);
button.addActionListener(myCalcultorListener);
//一个标签
Label label = new Label("+");
setLayout(new FlowLayout());
add(num1);
add(label);
add(num2);
add(button);
add(num3);
setVisible(true);
pack();
//关闭
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(1);
}
});
}
}
//监听类
class MyCalcultorListener implements ActionListener{
Calculator c = null;
//传递参数
public MyCalcultorListener(Calculator c) {
this.c = c;
}
@Override
public void actionPerformed(ActionEvent e) {
//1、获得加数和被加数,并计算
int x = Integer.parseInt(c.num1.getText());
int y = Integer.parseInt(c.num2.getText());
int z = x+y;
//返回结果
c.num3.setText(""+z);
}
}
6、画笔
package com.wang.paint;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestGraphy {
public static void main(String[] args) {
new MyPaint().loadFrame();
}
}
class MyPaint extends Frame{
public void loadFrame(){
setBounds(200,200,500,400);
setVisible(true);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(1);
}
});
}
@Override
public void paint(Graphics g) {
g.setColor(Color.red); //画笔颜色
g.drawOval(50,50,50,50); //空心圆
g.fillOval(200,50,50,50);//实心圆
//画笔用完,要恢复为原来的颜色
}
}
7、鼠标事件
package com.wang.paint;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.Iterator;
public class TestMouseListener {
public static void main(String[] args) {
new MyFrame().loadFrame();
}
}
class MyFrame extends Frame{
ArrayList points; //用于存放点
public void loadFrame(){
setBounds(100,100,500,400);
setVisible(true);
points = new ArrayList();
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(1);
}
});
addMouseListener(new MyMouseListener());
}
//画笔将数组照中的点全部画出来
@Override
public void paint(Graphics g) {
Iterator iterator = points.iterator();
while(iterator.hasNext()){
Point point = (Point) iterator.next();
g.setColor(Color.blue);
g.fillOval(point.x,point.y,10,10);
}
}
public void addPoint(Point point) {
points.add(point);
}
}
class MyMouseListener extends MouseAdapter{
@Override
public void mouseClicked(MouseEvent e) {
//因为是当前的窗口,所以返回的对象为Myframe类型
MyFrame frame = (MyFrame) e.getSource();
frame.addPoint(new Point(e.getX(),e.getY()));
//每次点都要重画
frame.repaint();//刷新
}
}
8、窗口监听事件
和窗口关闭的处理是一样的,只是具体实现的不同
9、键盘监听
class KeyFrame extends Frame{
public KeyFrame() throws HeadlessException {
setBounds(100,100,400,300);
setVisible(true);
this.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_UP){
System.out.println("上键");
}
}
});
}
}
SWING
1、JFrame
package com.wang.swing;
import javax.swing.*;
public class TestJFrame {
//初始化
public void init(){
//顶级窗口
JFrame frame = new JFrame("JFrame窗口");
frame.setVisible(true);
frame.setBounds(100,100,500,400);
//设置文字
JLabel label = new JLabel("JAVA");
frame.add(label);
//关闭窗口
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new TestJFrame().init();
}
}
2、JDialog
package com.wang.swing;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestDialog extends JFrame {
public void init(){
setBounds(200,200,400,300);
setVisible(true);
Container container = getContentPane();
JButton jButton = new JButton("按钮");
jButton.setBounds(0,0,100,30);
container.add(jButton);
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new MyDialog();
}
});
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new TestDialog().init();
}
}
class MyDialog extends JDialog{
public MyDialog(){
//需要设置可见
setVisible(true);
setBounds(300,300,300,200);
Container container = getContentPane();
//设为绝对定位
container.setLayout(null);
//弹窗不需要设置关闭等,因为,继承的类中已经实现了
JLabel label = new JLabel("This is my Dialog!");
//JLabel要设置大小,不然不会显示出来
label.setBounds(0,0,300,200);
container.add(label);
}
}
layui可以优化弹窗等
3、图片
package com.wang.swing;
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class TestIcon extends JFrame{
public TestIcon() {
//一个标签
JLabel label = new JLabel("ImageIcon");
//找到地址
URL url = TestIcon.class.getResource("1.PNG");
//把地址给一个图片类中
ImageIcon imageIcon = new ImageIcon(url);
//再将图片的类放到标签中
label.setIcon(imageIcon);
//居中布局
label.setHorizontalAlignment(SwingConstants.CENTER);
Container container = getContentPane();
container.add(label);
setVisible(true);
setBounds(100,100,500,400);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new TestIcon();
}
}
加载的图片要放到out文件(src上面)中,不然容易出现空指针异常
4、JPanel
面板
package com.wang.swing;
import javax.swing.*;
import java.awt.*;
public class TestJPanel extends JFrame {
public TestJPanel() {
Container container = this.getContentPane();
//后面两个参数表示的是间隔
container.setLayout(new GridLayout(2,2,10,10));
JPanel panel1 = new JPanel(new GridLayout(1,2));
JPanel panel2 = new JPanel(new GridLayout(1,2));
JPanel panel3 = new JPanel(new GridLayout(1,2));
JPanel panel4 = new JPanel(new GridLayout(1,2));
panel1.add(new JButton("1"));
panel1.add(new JButton("1"));
panel2.add(new JButton("2"));
panel2.add(new JButton("2"));
panel3.add(new JButton("3"));
panel3.add(new JButton("3"));
panel4.add(new JButton("4"));
panel4.add(new JButton("4"));
container.add(panel1);
container.add(panel2);
container.add(panel3);
container.add(panel4);
setVisible(true);
setBounds(100,00,400,300);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new TestJPanel();
}
}
5、滚轮
package com.wang.swing;
import javax.swing.*;
import java.awt.*;
public class TestJSroll extends JFrame {
public TestJSroll() throws HeadlessException {
Container container = this.getContentPane();
setBounds(100,100,200,100);
setVisible(true);
TextArea textArea = new TextArea("this is good");
JScrollPane scrollPane = new JScrollPane(textArea);
container.add(scrollPane);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new TestJSroll();
}
}
6、按钮上加图片
package com.wang.swing;
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class TestJButton extends JFrame {
public TestJButton(){
Container container = getContentPane();
//把图片变为图标
URL url = TestJButton.class.getResource("1.PNG");
Icon icon = new ImageIcon(url);
//把这个图片放到按钮上
JButton button = new JButton();
button.setIcon(icon);
//提示文本
button.setToolTipText("图片按钮");
container.add(button);
setVisible(true);
setBounds(100,100,300,200);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new TestJButton();
}
}
7、单选框,多选框
extends JFrame {
public TestJButton2(){
Container container = getContentPane();
//把图片变为图标
URL url = TestJButton.class.getResource("1.PNG");
Icon icon = new ImageIcon(url);
//单选框
JRadioButton radioButton1 = new JRadioButton("JR1");
JRadioButton radioButton2 = new JRadioButton("JR1");
JRadioButton radioButton3 = new JRadioButton("JR1");
//将这些按钮加入一个组里,实现单选
ButtonGroup buttonGroup = new ButtonGroup();
buttonGroup.add(radioButton1);
buttonGroup.add(radioButton2);
buttonGroup.add(radioButton3);
container.add(radioButton1,BorderLayout.NORTH);
container.add(radioButton2,BorderLayout.CENTER);
container.add(radioButton3,BorderLayout.SOUTH);
setVisible(true);
setBounds(100,100,300,200);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new TestJButton2();
}
}
单选框注意要加上组,
多选框
package com.wang.swing;
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class TestJButton3 extends JFrame {
public TestJButton3(){
Container container = getContentPane();
//把图片变为图标
URL url = TestJButton.class.getResource("1.PNG");
Icon icon = new ImageIcon(url);
//多选框
JCheckBox checkBox1 = new JCheckBox("1");
JCheckBox checkBox2 = new JCheckBox("2");
JCheckBox checkBox3 = new JCheckBox("3");
container.add(checkBox1,BorderLayout.NORTH);
container.add(checkBox2,BorderLayout.CENTER);
container.add(checkBox3,BorderLayout.SOUTH);
setVisible(true);
setBounds(100,100,300,200);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new TestJButton3();
}
}
8、列表
-
下拉列表
package com.wang.swing; import javax.swing.*; import java.awt.*; import java.util.ConcurrentModificationException; public class TestCombobox1 extends JFrame { public TestCombobox1(){ Container container = getContentPane(); JComboBox comboBox = new JComboBox(); comboBox.addItem(null); comboBox.addItem("正在"); comboBox.addItem("结束"); //返回项数 System.out.println(comboBox.getSelectedIndex()); //返回内容 System.out.println(comboBox.getSelectedItem()); container.add(comboBox); setVisible(true); setBounds(100,100,500,400); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new TestCombobox1(); } }
-
列表框
package com.wang.swing; import javax.swing.*; import java.awt.*; import java.util.Vector; public class TestCombobox2 extends JFrame { public TestCombobox2(){ Container container = getContentPane(); //生成列表的内容 // String[] contents = {"1","2","3"}; Vector contents = new Vector(); //列表中需要放入的内容 JList list = new JList(contents); contents.add("1"); contents.add("2"); contents.add("3"); container.add(list); setVisible(true); setBounds(100,100,500,400); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new TestCombobox2(); } }
- 应用场景
- 下拉列表,选择地区,或者一些单个选项
- 列表,展示信息,一般是动态扩容
- 应用场景
9、文本框
文本框、密码框、文本域
package com.wang.swing;
import javax.swing.*;
import java.awt.*;
import java.util.Vector;
public class TestText1 extends JFrame {
public TestText1(){
Container container = getContentPane();
//密码框
JPasswordField passwordField = new JPasswordField();
passwordField.setEchoChar('*');
container.add(passwordField);
//
// TextField textField1 = new TextField("hello");
// TextField textField2 = new TextField("world",20);
// container.add(textField1,BorderLayout.NORTH);
// container.add(textField2,BorderLayout.CENTER);
setVisible(true);
setBounds(100,100,500,400);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new TestText1();
}
}