JavaSE学习 第十三章 Swing基础

转载 2013年12月07日 15:11:28

1.重量级组件和轻量级组件

重量级组件是因操作系统而异的,是对本地操作系统的组件的一个封装

轻量级组件是利用Java绘图技术在重量级组件上绘图而成的

Swing与AWT的关系

相关基本概念

Java基础类库(Java Foundation Classes,JFC)

重量组件(Heavy-Weight Components)

轻量组件(Light-Weight Components)

可视化组件(Visual Component)

Swing组件根父类JComponent

java.lang.Object

                |

               +----java.awt.Component

                                   |

                                  +----java.awt.Container

                                                       |

                                                      +----javax.swing.JComponent

 

2.组件介绍

①JFrame

它与Frame最大的区别:它不是单独的一个组件,它是一个容器,可以用来装很多的组件

Container c=jf.getContentPane();

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

JFrame继承并扩充了java.awt.Frame类,JFrame实现了javax.swing.WindowConstants接口,

该接口中定义了用于控制窗口关闭操作的整型常量,包括:

DO_NOTHING_ON_CLOSE

HIDE_ON_CLOSE

DISPOSE_ON_CLOSE

EXIT_ON_CLOSE

 

代码:

import java.awt.Container;
import java.awt.Color;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class TestJFrame{
    public static void main(String[] args){
        JFrame jf = new JFrame("My Test");
        Container c = jf.getContentPane();
        c.setLayout(new FlowLayout(FlowLayout.LEFT,20,20));
        JLabel greet = new JLabel("Hello,World !");
        JLabel bye = new JLabel(" Bye,World ! ");
        bye.setBackground(Color.BLUE);
        bye.setOpaque(true);
        c.add(greet);
        c.add(bye);
        c.setBackground(Color.GREEN);
        jf.setSize(200,100);
        jf.setLocation(400,200);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true);
    }
}

 

②标准对话框

标准对话框(javax.swing.JOptionPane)用于实现程序与用户的便捷交互,其作用包括:

向用户发出错误通知

警告/确认用户操作

接收用户输入简单信息

列举简单选择项供用户选取

 

代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TestJOptionPane implements ActionListener{
    private JFrame jf = new JFrame("标准对话框测试");
    
    public static void main(String[] args){
        new TestJOptionPane().createUI();
    }
    public void createUI(){
        JToolBar jtb = new JToolBar();
        
        String[] s = {"错误","退出确认1","退出确认2","警告","输入","选择"};
        int size = s.length;
        JButton[] button = new JButton[size]; 
        for(int i=0;i<size;i++){
            button[i] = new JButton(s[i]);    
            button[i].addActionListener(this);
            jtb.add(button[i]);    
        }
        jf.add(jtb,"North");
        jf.setSize(350,150);
        jf.setLocation(400,200);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true);
    }
    public void actionPerformed(ActionEvent e){
        String s = e.getActionCommand();
        if(s.equals("错误")){
            JOptionPane.showMessageDialog(null, "要显示的错误信息---",
            "错误提示", JOptionPane.ERROR_MESSAGE);    
        }else if(s.equals("退出确认1")){
            int result = JOptionPane.showConfirmDialog(null, 
                "您真的要退出程序吗?", "请确认", JOptionPane.YES_NO_OPTION);        
            if(result == JOptionPane.OK_OPTION){
                System.exit(0);    
            }
        }else if(s.equals("退出确认2")){
            int result = JOptionPane.showConfirmDialog(null, 
                "退出前是否保存程序?");        
            if(result == JOptionPane.YES_OPTION){
                System.out.println("保存程序---");
                System.exit(0);    
            }else if(result == JOptionPane.NO_OPTION){
                System.exit(0);    
            }
        }else if(s.equals("警告")){
            Object[] options = { "继续", "撤消" };
            int result = JOptionPane.showOptionDialog(null, 
                "本操作可能导致数据丢失", "Warning", JOptionPane.DEFAULT_OPTION, 
                JOptionPane.WARNING_MESSAGE,null, options, options[0]);
            if(result == 0){
                System.out.println("继续操作---");
            }
        }else if(s.equals("输入")){
            String name = JOptionPane.showInputDialog("请输入您的姓名:");
            if(name != null){    
                System.out.println("姓名:" + name);
            }    
        }else if(s.equals("选择")){
            Object[] possibleValues = { "体育", "政治", "经济","文化" };
            Object selectedValue = JOptionPane.showInputDialog(null, 
                "Choose one", "Input",JOptionPane.INFORMATION_MESSAGE, null,
                possibleValues, possibleValues[0]);
            String result = (String)selectedValue;
            if(result != null){
                System.out.println("你选择的是:" + result);
            }
        }        
    }
}

 

 

③JTable 和 JTree

javax.swing.JTable 用于以传统的表格形式来显示数据:

表头:标题行,给出每一列(字段)的名称。

表体:由多行多列、规则矩阵形式的单元格组成,真正的数据信息则显示在每个单元格中。

javax.swing.JTree则是以“树”状结构分层次显示数据信息。

 

代码:

TableExample.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TableExample{
    public static void main(String args[]){        
        JFrame myFrame = new JFrame("Table Example");
        Object data[][] ={
            {1,"张三","男","18","010.82607080"},
            {2,"李四","女","24","021.68720890"},
            {3,"王五","男","43","0459.4990893"},
            {4,"赵六","男","32","010.67887098"},
            {5,"任七","女","15","010.84682089"},
            {6,"吴八","男","76","010.63540177"},
        };
        String columnNames[] ={"编号","姓名","性别","年龄","电话"};
        JTable table = new JTable(data,columnNames);
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        //JScrollPane pane = new JScrollPane(table);
        JScrollPane pane = new JScrollPane();
        pane.setViewportView(table);
        
        myFrame.add("Center",pane);
        myFrame.setSize(350,150);
        myFrame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {System.exit(0);}
        });
        myFrame.setVisible(true);
    }
}

TreeExample.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
public class TreeExample {
    public static void main(String args[]){
        JFrame myFrame = new JFrame("Tree Example");
        DefaultMutableTreeNode rootNode = createNodes();
        JTree tree = new JTree(rootNode);
        tree.setRootVisible(true);
        JScrollPane pane = new JScrollPane();
        pane.setViewportView(tree);
        myFrame.add("Center",pane);
        myFrame.setSize(400,250);
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myFrame.setVisible(true);
    }
    
    public static DefaultMutableTreeNode createNodes(){
        DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Java Stuff");
        DefaultMutableTreeNode resources = new DefaultMutableTreeNode("Resources");
        DefaultMutableTreeNode tools = new DefaultMutableTreeNode("Tools");
        rootNode.add(resources);
        rootNode.add(tools);
        
        DefaultMutableTreeNode webSites =new DefaultMutableTreeNode("Web Sites");
        DefaultMutableTreeNode books = new DefaultMutableTreeNode("Books");
        resources.add(webSites);
        resources.add(books);
        
        DefaultMutableTreeNode magazines = new DefaultMutableTreeNode("Magazines");
        magazines.add(new DefaultMutableTreeNode ("Javology"));
        magazines.add(new DefaultMutableTreeNode ("JavaWorld"));
        
        webSites.add(new DefaultMutableTreeNode ("JavaSoft"));
        webSites.add(new DefaultMutableTreeNode ("Gamelan"));
        webSites.add(magazines);
        
        books.add(new DefaultMutableTreeNode("Special Edition Using Java 1.2"));        
        tools.add(new DefaultMutableTreeNode ("JBuilder"));
        tools.add(new DefaultMutableTreeNode ("Visual J++"));
        tools.add(new DefaultMutableTreeNode ("Visual Age for Java"));
        tools.add(new DefaultMutableTreeNode ("Apptivity"));
        
        return rootNode;
    }
}

3.特殊组件:定时器

javax.swing.Timer提供了定时器功能——用于在指定的时间延迟之后触发ActionEvent事件,以执行所需的处理逻辑。

相关方法:

setRepeats()

setInitialDelay()

stop()

restart()

 

以上四个方法的作用分别是:

是否循环触发

设置首次延迟的时间

停止当前的计时器

计时器重新启动

 

代码:

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.Timer;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JButton;

public class TestTimer{
    public static void main(String[] args){
        JFrame jf = new JFrame("Clock");
        JButton pause = new JButton("Pause");
        JLabel clock = new JLabel("Clock");
        clock.setBackground(Color.GREEN);
        clock.setOpaque(true);
        clock.setHorizontalAlignment(JLabel.CENTER);
        jf.add(clock,"Center");
        jf.add(pause,"North");
        jf.setSize(140,80);
        jf.setLocation(500,300);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true);
        
        MyListener m1 = new MyListener(clock);
        Timer t1 = new Timer(1000,m1);
        t1.setInitialDelay(0);
        t1.start();
        MyListener2 m2 = new MyListener2(t1,pause,clock);
        pause.addActionListener(m2);        
    }    
}

class MyListener  implements ActionListener{
    private JLabel clock;
    public MyListener(JLabel clock){
        this.clock = clock;    
    }    
    public void actionPerformed(ActionEvent e){
        Calendar c = new GregorianCalendar();
        String time = c.get(Calendar.YEAR) + "-" +
                      (c.get(Calendar.MONTH) + 1) + "-" +
                      c.get(Calendar.DATE)  + "  " ;
        int h = c.get(Calendar.HOUR_OF_DAY);
        int m = c.get(Calendar.MINUTE);
        int s = c.get(Calendar.SECOND);
        String ph = h<10 ? "0":"";
        String pm = m<10 ? "0":"";
        String ps = s<10 ? "0":"";        
        time += ph + h + ":" + pm + m + ":" + ps + s; 
        clock.setText(time);
        clock.repaint();
    }    
}

class MyListener2 implements ActionListener{
    private Timer timer;
    private JButton button;
    private JLabel clock;
    private boolean running= true;
    
    public MyListener2(Timer timer,JButton button,JLabel clock){
        this.timer = timer;    
        this.button = button;
        this.clock = clock;
    }    
    public void actionPerformed(ActionEvent e){
        if(running){
            timer.stop();
            button.setText("Replay");
            clock.setBackground(Color.RED);
        }else{
            timer.restart();    
            button.setText("Pause");
            clock.setBackground(Color.green);
        }
        running = !running;
    }    
}

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

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020           最近想学下java的界面编程,在此记录下。     大多...
  • jesson20121020
  • jesson20121020
  • 2014年11月15日 00:00
  • 1417

Java基础总结篇--JavaSE你必须要知道的基础

01.Java概述与语法 作者: 风离紫竹 java发展概述 一、 Java由SUN公司研发,SUN 被 Oracle 收购 Ja...
  • u011200604
  • u011200604
  • 2016年07月12日 23:54
  • 17714

JAVA入门学习资料

一、入门 《Java 2从入门到精通》- 推荐 《Thinking in Java》- 强烈推荐* O’reilly的Java编程基础系列 - 参考* 二、进阶 《Java Cook Book》- 非...
  • sean_z
  • sean_z
  • 2006年11月03日 00:24
  • 649

javaSE基础测试题

这套题目是传智播客javaEE入学测试题,我是在自己学完javaSE之后做的套题,感觉这套题考察的内容很基础,很适合自学javaSE的自测。全套试题有50个选择题,单选和多选都有,每道题2分,80分合...
  • chenlxhf
  • chenlxhf
  • 2016年05月04日 21:03
  • 6717

JavaSE入门学习3:搭建Java开发环境(一)

在上一篇的博文中,所编辑的Java源文件和编译的字节码文件是保存在E:\Java\develop\jdk1.8.0_25\bin目录下, 如果编辑的Java源文件和字节码文件没有用了或者想要删掉,我们...
  • erlian1992
  • erlian1992
  • 2016年01月19日 10:58
  • 2243

JavaSE学习之路

我们知道Java有三个方向,JavaSE,JavaME,JavaEE(老程序员可能会叫J2EE等,不过SUN已经改名了)。JavaME主要是嵌入式与游戏开发。那我们先看JavaSE,因为只有学好了Ja...
  • songbaojie
  • songbaojie
  • 2010年04月26日 16:02
  • 6673

JAVASE学习总结(一)

JAVA语言是一种面向对象的语言。要使用JAVA进行面向对象编程,首先要建立面向对象的思想。OOP的基本思想是把问题看成若干个对象组成的,这些对象之间是独立的 ,但又可以相互配合、连接和协调,从而共同...
  • hhrxp373317
  • hhrxp373317
  • 2013年09月02日 10:11
  • 1405

java程序员学习前了解的主要大纲

程序员首先学习是因先下载一系列学习辅助软件:有道云笔记   思维导图freemind(先安装JDK)   火狐(安装火狐需要安装插件firebug)     常常看看七月题库  牛客网上这些.    ...
  • Albaficahan
  • Albaficahan
  • 2015年10月22日 16:55
  • 2459

Java Swing入门

Java Swing相当于升级版本的AWT(Abstract Window Toolkit),是一组易于使用和理解的JavaBeans。 大多数的Swing应用都是建立在基础的JFrame的内部,J...
  • superhill
  • superhill
  • 2013年05月23日 05:07
  • 2666

JavaSE入门学习50:多线程编程(一)

一进程和线程         (1)进程和线程的基本概念         进程:程序(任务)的执行过程;持有资源(共享内存,共享文件)和线程。         线程:是一个程序内部的顺序控制流。...
  • erlian1992
  • erlian1992
  • 2016年06月18日 20:35
  • 2205
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaSE学习 第十三章 Swing基础
举报原因:
原因补充:

(最多只允许输入30个字)