JavaSE学习 第十三章 Swing基础

来源:互联网 发布:福州淘宝美工培训班 编辑:程序博客网 时间:2024/05/16 08:06

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;    }    }
原创粉丝点击