Swing基础

  JFrame

  JPanel

    绘图:paint

    监听事件: ActionListener  KeyListener

            Listener和Adapter

    计时器:Timer     TimerTask

        schedule

        timer.cancel();

什么是Swing

Swing是JDK提供的一整套 GUI(Graphical User Interface)图形用户界面API。通过Swing可以构建平台无关的桌面应用程序。

JFrame
JFrame用于封装窗体,一个JFrame对象用于实现一个窗体,创建窗口,包含边框、标题和用于关闭和图标化窗口的按钮;
实际应用中,通常采用继承JFrame的方式,定义自己的窗体。

JPanel

JPanel对象表示“面板”, 用于将较小的轻量级组件组合在一起; JFrame 有一个用于盛放组件的“内容面板”,通常可以将其设置为JPanel对象。

组件
 添加常用组件

在Swing中,按钮、文本框、标签等都有特定的类与之对应,称之为“组件”;想将其添加到容器中,需要通过调用容器(JFrame或JPanel)的add方法。
组件添加到容器时,其位置与容器的布局设置有关

class LoginFrame extends JFrame{
    public LoginFrame(){
        this.setSize(350, 220);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel=new JPanel();//创建空白面板
        panel.setBackground(Color.blue);
        this.add(panel);//将面板添加到窗口里面
        //创建3个对象  将3个对象添加到面板
        JLabel label =new JLabel("姓名");
        JTextField name = new JTextField(20);//字符数
        JButton login =new JButton("登录");
        panel.add(label);
        panel.add(name);
        panel.add(login);

    }
}

Graphics绘图
 绘图原理

任何JComponent的扩展组件均可以进行绘制,想实现绘制必须重写paint方法;对于任何情况的窗口重绘事件,处理器都会通告组件,引发执行所有组件的paint方法,但有一点需要注意的是,paint方法一定不能自己调用,当窗口重绘时(如:窗口扩大,缩小,第一次显示时等)系统会自动调用。
paint方法只有一个Graphics参数,封装了各种绘制操作,可以将其简单的理解为“画笔”;该画笔由系统创建,在调用paint方法时传入,作为程序员可调用该“画笔”对象的各种方法实现绘制;
Graphics对象的度量单位是像素,坐标(0,0)为容器的左上角点。

class StagePanel extends JPanel{
    public void paint(Graphics g){
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, getWidth(), getHeight());
    }
}

事件监听
1. 回调模式

回调模式是指:如果一个方法的参数是接口类型,则在调用该方法时,需要创建并传递一个实现此接口类型的对象;而该方法在运行时会调用到参数对象中所实现的方法(接口中定义的)。

interface Action {
    public void doSth();
}
class 类{
public static void main(String[] args) {
         repeat(5, new Action() {
             public void doSth() {
                 System.out.println("Hello, World");
             }
         });
}
   public static void repeat(int n, Action action) {
        for (int i = 0; i < n; i++) {  action.doSth(); }
   }
}

如上的代码中,repeat方法需要一个Action接口类型的参数,其逻辑为将此参数的doSth方法重复执行n次。在调用时,通过内部匿名类传递参数,此处的语义可解释为:通过接口回调传递了一个方法给repeat,让repeat将其执行5次

2. 事件监听机制

事件监听可以看成是回调模式在Swing组件响应用户事件中的应用。

3. ActionListener

ActionListener一般用于监听表示要开始某种操作的事件,如:按钮上的单击,文本框中输入回车等。参见下面的代码:

public interface ActionListener extends EventListener {
    public void actionPerformed(ActionEvent e);
}
JButton button = new JButton();
button.addActionListener (new ActionListener() {
    public void actionPerformed (ActionEvent e) {
        JButton button = (JButton) e.getSource();
        button.setText("Don‘t click me!");
 }}); 

其中,actionPerformed方法用于实现处理Action事件的操作其参数ActionEvent用于封装Action事件的信息,它的getSource方法可以获取产生该事件的事件源对象。

4. KeyListener

KeyListener用于监听键盘事件,其中包括键按下、键释放以及键入(必须确保有Unicode字符的产生,例如组合键将不会产生键入事件)的事件。代码如下:

public interface KeyListener extends EventListener {
public void keyTyped(KeyEvent e);
public void keyPressed(KeyEvent e);
public void keyReleased(KeyEvent e);
}

其中,KeyEvent的getKeyCode()方法用于获得所按下(释放)的键值,可以和KeyEvent所封装的形如VK_XX比对以确定所按下的键。

5. 监听Listener和Adapter

有些场合,仅仅需要响应Listener的某些方法,但作为实现Listener接口的对象又不得不实现其所有的方法,尽管某些方法只提供空的实现。JDK对某些Listener提供了相应的所谓Adapter,即实现了该Listener接口,而所有方法都为空实现的抽象类。在实践中,只需继承该抽象类,重写需要的方法即可。
代码如下:

  this.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e) {
                int key = e.getKeyCode();// [c]

                if (key == KeyEvent.VK_Q) {//Q表示退出
                    System.exit(0);// 结束Java进程
                }

                if (pause) {// pause = true
                    if (key == KeyEvent.VK_C) {//C表示继续
                        continueAction();
                        repaint();
                    }
                    return;
                }

                switch (key) {
                case KeyEvent.VK_LEFT:
                    //tetromino.moveLeft();
                    moveLeftAction();
                    break;
                case KeyEvent.VK_SPACE :

                    hardDropAction();
                    break;
                case KeyEvent.VK_UP:
                    rotateRightAction();
                    break;
                case KeyEvent.VK_P://按键盘上的P表示暂停
                    pauseAction();
                    break;
                }
                repaint();// 再画一次!
            }
        });

定时器
Timer和TimerTask

JDK提供的Timer类和TimerTask抽象类可以以固定的周期运行某段程序。

schedule (TimerTask task, long delay,long period) 几个参数(任务,延迟时间,间隔时间)

Timer 老婆 TimerTask 老婆命令

timer.cancel();

匿名内部类 在使用外部方法中的局部变量的时候 变量必须用final修饰

不知道怎么用修饰词的时候 要用private 尽可能封装

public class Demo02 {

    /**
     * @param args
     */
    public static void main(String[] args) {

        final Timer timer =new Timer();

        //局部内部类     在方法中有效
        class MyTask extends TimerTask{
            public void run(){
                System.out.println("吃大餐");
            }
        }

        timer.schedule(new MyTask(), 1000, 500);
        /*匿名类/局部内部类 访问外部方法中的局部变量
         *  这个变量必须是final类型的 否则编译错误
         */

        TimerTask overTask = new TimerTask(){
            public void run(){
                timer.cancel(); //把timer上的绑定的任务取消
            }
        };

        timer.schedule(overTask, 1000*10);
    }

}
时间: 2024-12-18 22:59:01

Swing基础的相关文章

Java学习之图形化界面(Swing基础)

Java学习之图形化界面(Swing基础) 一.Java图形化界面发展史 起初在早期的计算机系统中,电脑只提供命令行界面(CLI),现在在Windows中开个DOS窗口,就可以历史足迹,这就是命令行界面在 现在Windows界面中的体现. 后来Apple公司率先在电脑的操作系统中实现了图形化的用户界面(Graphical User Interface,简称GUI),但由于Apple公司封闭的市场策略,自己完成电脑硬件.操作系统.应用软件一条龙的产品,与其它PC不兼容.这使得Apple公司错过了一

java界面编程(1) ------ Swing基础

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 最近想学下java的界面编程,在此记录下.    大多数的Swing应用都被构建在基础的JFrame内部,JFrame在你作用的任何操作系统中都可以创建视窗应用. 看如下一个最简单的JFrame例子: JFrame frame = new JFrame("Hello Swing"); frame.setDefaultCloseOperation(JFrame.EXIT

Swing基础之设置大小

setSize()/setBounds() 和setPreferredSize() 的区别: The short answer is: it's complicated.The slightly longer answer is: use setSize() if your component's parent has no layout manager, and setPreferredSize() and its related setMinimumSize and setMaximumSi

Swing:LookAndFeel 教程第一篇——手把手教你写出自己的 LookAndFeel

本文是 LookAndFeel 系列教程的第一篇. 是我在对 Swing 学习摸索中的一些微薄经验. 我相信,细致看全然系列之后.你就能写出自己的 LookAndFeel. 你会发现 Swing 原来能够这样美. -------------------------------------------------------------------------------- 引言: 我第一次接触 Java 要追溯到非常多年前做毕业设计的时候. 那天我和同学来到了一个微型软件公司(三程序猿.一会计.

分享几种常用的嵌入式Linux GUI及其特点—干货

随着Internet与网络的迅速发展并逐步走进人们的家庭,使消费电子.计算机.通信(3C)一体化趋势日趋明显,嵌入式系统也成为研究与应用的热点.嵌入式实时Linux操作系统以价格低廉.功能强大又易于移植而正在被广泛采用,成为新兴的力量,当然,有眼光的人早已经看出其中的发展和前景.如今随着WAP手机.PDA.机顶盒.及DVD/VCD播放机已经迅速普及,用户对这些手持式设备的GUI提出了更高的要求,希望能看到像PC机才拥有的华丽美观的GUI.GUI已经成为了人与机器沟通的桥梁,嵌入式系统对GUI的需

IDEA插件开发(一)一个简单的表单demo

?? 版本信息: ?? JDK:1.8+ ?? IDEA:2019.3 ?? 插件项目基于gradle构建. ?? 知识背景:swing ?? 参考文档: http://www.jetbrains.org/intellij/sdk/docs/tutorials/build_system/prerequisites.html http://www.jetbrains.org/intellij/sdk/docs/user_interface_components/tool_windows.html

java web 开发三剑客 -------电子书

Internet,人们通常称为因特网,是当今世界上覆盖面最大和应用最广泛的网络.根据英语构词法,Internet是Inter + net,Inter-作为前缀在英语中表示“在一起,交互”,由此可知Internet的目的是让各个net交互.所以,Internet实质上是将世界上各个国家.各个网络运营商的多个网络相互连接构成的一个全球范围内的统一网,使各个网络之间能够相互到达.各个国家和运营商构建网络采用的底层技术和实现可能各不相同,但只要采用统一的上层协议(TCP/IP)就可以通过Internet

Java基础:多功能小窗口,swing,io,net综合应用

概念原理的理解,不代表能熟练应用. 如果将多个知识点关联并应用起来,这能加快我们对知识的掌握. 作为一个初学者,最快速的上手方式应该就是学以致用了. 下面做了一个小窗口,主要是为了综合应用java的一些基础功能,界面稍显随意. 界面: 具体功能以及代码: 1 /*具体实现功能: 2 * 1.根据地址栏的路径打开文本文件,显示在文本区域. 3 * 2.根据地址栏的网址获取网页源代码,显示在文本区域. 4 * 3.通过打开按钮打开本地文本文件,显示在文本区域. 5 * 4.通过保存按钮,把文本区域内

Swing是在AWT基础上的扩展

JFrame组件import java.awt.Color;import javax.swing.JFrame; import javax.swing.JPanel;/* * Swing是在AWT基础上的扩展  * javax.swing包及其扩展包,组件的命名多以J开关  *  * JFrame组件  */ public class Test08 {    public static voi... http://ask.360kad.com/question/166093.htmlhttp:/