1、所有swing组件必须由事件分派线程进行配置,线程将鼠标点击和按键控制转移到用户接口组件。简单的事件分派线程的代码如下:
public class SimpleFrameTest {
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
SimpleFrame frame = new SimpleFrame(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
}
}
/**
* 这里的SimpleFrame类是自定义的JFrame子类
* EventQueue.invokeLater();方法的参数是一个实现Runnable接口的线程类,这里使用的是lambda表达式
*
* 这就是事件分派线程的执行代码 EventQueue.invokeLater( ()->{ statements });
*
* frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);该语句用于选择选择响应动作
* 定义的是用户关闭框架时的响应动作,对于这个程序而言,只是简单的退出
*
* 组件最初史可见的,但是JFrame这样的顶层框架组件除外
*
* 简单的构造框架是不会自动显示出来的,框架起初是不可见的
* 为了显示框架,需要在main方法中调用框架的setVisible方法
* 如果想要显示一个组件,建议调用setVisible方法
*
* 初始化语句结束后,main方法退出:
* 注意:main方法退出并没有终止程序,终止的是主线程。然而事件分派线程还处于激活状态,知道关闭框架或者调用System.exit方法才可以终止程序。
*
*/
class SimpleFrame extends JFrame {
private static final int detault_width = 300;
private static final int detault_height = 200;
public SimpleFrame(GraphicsConfiguration arg0) {
setSize(detault_width, detault_height);
}
}
2、框架的定位
(1)setLocation和setBounds方法用于设置框架的位置。对于框架来说,这两个方法的坐标均相对于整个屏幕。
坐标(0,0)位于屏幕的左上角
(2)setIconImage用于告诉窗口系统在标题栏、任务栏切换窗口等位置显示哪个图标。
(3)setTitle用于改变标题栏的文字
(4)setResizable利用一个boolean值确定框架的大小是否允许用于改变
(5)如果在显示窗口之前调用setLocationByPlatform(true);窗口系统会选用窗口的位置而不是窗口的大小,通常是据最后一个显示窗口很小偏移量的位置。
3、框架的属性
框架的属性都有set和get方法,其中对于boolean类型的属性比较特别,它使用的是is方法,而不是set方法(方法命名规则都一样)
4、确定合适的屏幕大小
为了得到屏幕的大小有以下的步骤:
- 调用Toolkit类的静态方法getDefaultToolkit得到一个Toolkit对象(Toolkit类中包含很多与本地窗口系统打交道的方法)
- 通过Toolkit对象调用getScreenSize方法,将屏幕大小封装到一个Dimension对象中并返回
- 获取Dimension对象中屏幕的宽度和高度
代码如下:
public class SizeFrameTest {
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
SimpleFrame frame = new SimpleFrame(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
}
}
class SizeFrame extends JFrame {
public SizeFrame() {
// 获取屏幕的大小
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension dimension = toolkit.getScreenSize();
int screenHeight = dimension.height;
int scrernWidth = dimension.width;
// 设置框架的宽和高,让窗口系统选择屏幕位置
setSize(scrernWidth / 2, screenHeight / 2);
setLocationByPlatform(true);
//设置图标
Image image=new ImageIcon("icon.gif").getImage();
setIconImage(image);
}
}
5、在组件中显示消息
java中框架被设计为是放置组件的容器,通常情况下,应该在另外一个组件上绘制消息,并将这个组件添加到框架中。
绘制一个组件,需要定义一个扩展(继承)JComponent的类,并覆盖其中的paintComponent方法,该方法有一个Graphics类型的参数,该参数保存着用于绘制图像和文本的设置。在java中,所有的绘制都必须使用Graphics对象,其中包含了绘制图案、图像和文本的方法。
注意:paintComponent方法并非认为调用。在应用程序需要重新绘制图的时候,会自动调用该方法。