今天刚学了JAVA中的图形界面,这里来总结一下。
1.简单的例子
JFrame是GUI中的容器
JButton是最常见的组件- 按钮
注意:f.setVisible(true); 会对所有的组件进行渲染,所以一定要放在最后面
现在来用代码来简单介绍一下:
package gui;
import javax.swing.*;
public class TestGUI {
public static void main(String[] args) {
//主窗口
JFrame f = new JFrame("123");
//主窗体设置大小
f.setSize(400,300);
//主窗体设置位置
f.setLocation(200,200);
//主窗体的位置设置为绝对位置
f.setLayout(null);
//按钮主键
JButton b = new JButton("666");
//设置主键位置和大小
b.setBounds(50,50,280,30);
//把按钮添加到主窗口中
f.add(b);
//关闭窗口时退出程序
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//让窗口变得可见
f.setVisible(true);
}
}
上面的代码每一条语句旁边都有实现的具体功能。
运行之后会显示如下图标:
简单的介绍了图形界面之后,我们通过一道练习来巩固一下。
2.练习-在上次关闭位置启动窗口
要求:比如这次使用这个窗口,导致窗口被移动到了右下角。 关闭这个窗口,下一次再启动的时候,就会自动出现在右下角
思路:启动一个线程,每个100毫秒读取当前的位置信息,保存在文件中,比如123.txt文件。
启动的时候,从这个文件中读取位置信息,如果是空的,就使用默认位置,如果不是空的,就把位置信息设置在窗口上。
读取位置信息的办法: f.getX() 读取横坐标信息,f.getY()读取纵坐标信息。
代码如下:
package gui;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
public class TestGUI2 {
public static void main(String[] args) {
JFrame f = new JFrame("123");
f.setSize(400,300);
Point p = getPointFromLocationFile();
if(p != null) f.setLocation(p.x, p.y);
else f.setLocation(200,200);
f.setLayout(null);
JButton b = new JButton("456");
b.setBounds(50,50,280,30);
f.add(b);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
new SavingPostionThread(f).start();
}
static class Point{
int x;
int y;
}
public static Point getPointFromLocationFile() {
File file = new File("D:/123.txt");
Point p = null;
try {
FileInputStream fis = new FileInputStream(file);
DataInputStream dis = new DataInputStream(fis);
int x = dis.readInt();
int y = dis.readInt();
p = new Point();
p.x = x;
p.y = y;
dis.close();
fis.close();
}catch(FileNotFoundException e) {
} catch (IOException e) {
e.printStackTrace();
}
return p;
}
}
package gui;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import javax.swing.JFrame;
public class SavingPostionThread extends Thread{
private JFrame f;
File file = new File("D:/123.txt");
SavingPostionThread(JFrame f) {this.f = f;}
public void run() {
while(true) {
int x = f.getX();
int y = f.getY();
try {
FileOutputStream fos = new FileOutputStream(file);
DataOutputStream dos = new DataOutputStream(fos);
dos.writeInt(x);
dos.writeInt(y);
dos.close();
fos.close();
}catch(Exception e) {
e.printStackTrace();
}
try {
Thread.sleep(100);
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
}
实现结果:
第一次运行出现在设定位置
现在我要把这个窗口随便拖到一个地方
现在把窗口关闭然后再次打开:
出现的位置就是刚才窗口关闭的位置。
总结:
个人觉得这道练习题非常好,把之前学习的内容全部都包括了进来,比如:线程,文件的读写以及异常捕获。