JAVA核心卷第十章

图形程序设计

swing 概述

大概理解几个专有名词:
1,AWT:abstract window toolkit
2,IFC:internet foundation class

swing没有完全替代awt,而是基于AWT架构之上

swing是指“被控制的”用户界面类
awt是指像事件处理这样的窗口工具箱的底层机制

swing的优点:
1,拥有一个丰富,便捷的用户界面元素集合
2,对底层平台依赖的很少,因此与平台相关的bug很少
3,给予不同平台的用户一致的感觉

问题:如果在所有平台上用户界面元素看起来都一样的,那么它们就有可能与本地控件不一样,而这些平台的用户对此并不是很熟悉.
解决:在程序员编写swing程序时,可以为程序指定专门的“观感”。市场上人们将它称为java观感。

java7提供了一个新观感,称为Nimbus,不过默认情况下不可用,Nimbus使用了矢量绘图而不是位图绘图,所以它不依赖屏幕分辨率。
java se 5.0引入了一种称为Synth的观感。

http://napkinlaf.sourceforge.net/
Napkin观感为所有用户界面元素提供了一种手绘外观。
在这里插入图片描述
Eclipse 集成开发环境使用了一种与AWT类似称为SWT的图形工具箱。

创建框架

顶层窗口,没有包含在其他窗口中的窗口,被称为框架。

在AWT库中有一个被称为Frame的类,用于描述顶层窗口。
在这个类的SWING版本名为jframe,它拓展于frame类。

绝大多数swing组件类都以J开头,在Java中有Button,frame这样的类,但它们仍属于AWT组件,如果偶尔忘记写J,程序仍然可以进行编译和运行。但是会导致视觉和行为的不一致。

Swing类位于javax.swing包中。包名javax是JAVA的一个拓展包,而不是核心包。

class SimpleFrame extends JFrame
JFrame是原始框架。0 x 0
所以要赋值。
事件分派线程的格式:
EventQueue.invokeLater(() ->
{

SimpleFrame frame=new SimpleFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
浅色为内容,可自定义。

定义一个用户关闭这个框架时的响应动作:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
要记得先new一个对象吼。
SimpleFrame frame=new SimpleFrame();
setVisible:设置框架显示

frame.setUndecorated(true);
是指关闭掉框架里面所有的对象,像一些关闭键,按钮啥的。反正就是一片空白。
如下图:在这里插入图片描述
关闭的方法只能在下面右键关闭窗口。
设置框架的位置:setLocation(x,y) 窗口将放置在左上角的x像素,垂直y像素的位置,坐标(0,0)位于屏幕的左上角。
setBounds(x,y,width,height)
width,height是指窗口里面的框架在窗口的位置。
告诉窗口系统在标题栏,任务切换窗口等位置显示哪个图标:setIconImage
用于改变标题栏的文字:setTitle
利用一个Boolean值确定框架的大小是否允许用户改变:setResizable
用法:
public void setResizable(boolean resizable) {
setResizable(false);
}

可以在窗口系统控制窗口的位置,如果在显示窗口之前调用
setLocationByPlatform(true);
窗口系统会选用窗口的位置,而不是大小,(x,y)

框架属性:
Frame类的方法:public String getTitle();
public void setTitle(String title);

为了得到屏幕的大小:
调用Toolkit类的静态方法getDefaultToolkit();

Toolkit kit=Toolkit.getDefaultToolkit();
调用getScreenSize方法,这个方法以Demension对象的形式返回屏幕的大小
Demension screenSize=kit.getScreenSize();
Demension对象同时用公用实例变量width和height保存着屏幕的宽度和高度
int screenWidth=screenSize.width();
int screenHeight=screenSize.height();
将框架大小设定为上面取值的50%,然后,告知窗口系统定位框架:
setSize(screenWidth/2,screenHeight/2);
setLocationByPlatform(true);
图标的引入
Image img=new ImageIcon(“icon.gif”).getImage();
setIconImage(img);
将框架设置为最大:
frame.setExtendedState(Frame.MAXIMIZED_BOTH);
将全部知识点应用在一起:

import javax.swing.;
import java.awt.
;
import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer;

public class SizedFrame {
public static void main(String[] args){
EventQueue.invokeLater(()->
{
JFrame frame=new SizedFramed();
frame.setTitle(“SizedFrame”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭键
frame.setVisible(true);
});
}
}

class SizedFramed extends JFrame{
public void SizedFramed(){
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension screenSize=kit.getScreenSize();
int screenWidth=screenSize.width;
int screenHeight=screenSize.height;

    setSize(screenWidth/2,screenHeight/2);
    setLocationByPlatform(true);
    **Image img=new **ImageIcon**("C:\\Users\\86136\\Desktop\\捕获.png")**.getImage();**
    setIconImage(img);**
    }

 }

在组件中显示信息:
在这里插入图片描述
根面板,层级面板,玻璃面板 次重点
内容窗格重点。

Cotainer contentPane=frame.getContentPane();
Component c=…;
contentPane.add©;

如果需要强制刷新屏幕,就需要调用repaint方法。而不是paintComponent方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值