swing学习笔记(1)

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方法并非认为调用。在应用程序需要重新绘制图的时候,会自动调用该方法。

 

你可能感兴趣的:(java笔记)