zoukankan      html  css  js  c++  java
  • GUI程序设计

    1. 对话框(JDialog)使用示例

    例1. JDialog简单使用示例。

    import javax.swing.JLabel;
    
    public class demoJDialog {
        JFrame mainJFrame;
        JLabel myJLabel;
        JDialog subJDialog;
        public demoJDialog(){
            mainJFrame = new JFrame("带对话框的JFrame演示窗口");
            myJLabel = new JLabel("世界,你好!");
            subJDialog = new JDialog(mainJFrame,"我是对话框",true);
            subJDialog.getContentPane().setLayout(new FlowLayout());
            subJDialog.getContentPane().add(myJLabel);
            mainJFrame.setSize(500, 400);
            mainJFrame.setVisible(true);
            mainJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            subJDialog.setSize(500, 400);
            subJDialog.setVisible(true);
        }
        public static void main(String[] args) {
            new demoJDialog();
    
        }
    
    }

    默认的subJDialog = new JDialog(mainJFrame,"我是对话框");创建的是非模态对话框,创建模态对话框如下:subJDialog = new JDialog(mainJFrame,"我是对话框",true);

    例2. 使用系统预定义的对话框。

    package GUI;
    
    import java.awt.Container;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    
    public class showTriDialog implements ActionListener {
        JFrame mainJFrame;
        JButton btnMessage,btnComfirm,btnInput;
        Container con;
        
        public showTriDialog(){
            mainJFrame = new JFrame("对话框使用范例");
            btnMessage = new JButton("显示消息对话框");
            btnComfirm = new JButton("显示确认对话框");
            btnInput = new JButton("显示输入对话框");
            con = mainJFrame.getContentPane();
            con.setLayout(new FlowLayout());
            con.add(btnMessage);
            con.add(btnComfirm);
            con.add(btnInput);
            mainJFrame.setSize(500, 400);
            mainJFrame.setVisible(true);
            mainJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            btnMessage.addActionListener(this);
            btnComfirm.addActionListener(this);
            btnInput.addActionListener(this);
        }
        
        public void actionPerformed(ActionEvent e) {
            if(e.getSource()==btnMessage)
                JOptionPane.showMessageDialog(mainJFrame, "这是一个简单的消息框");
            else if(e.getSource()==btnComfirm)
                JOptionPane.showConfirmDialog(mainJFrame, "这是一个有三个按钮的确认框,
    按任意按钮返回");
            else
                JOptionPane.showInputDialog(mainJFrame, "这是一个可供用户输入简单信息的对话框");    
        }
        
        public static void main(String[] args) {
            new showTriDialog();
    
        }
    
    }

    2. 面板(JPanel)使用示例——中间容器

    JPanel被称为面板,是最常用的中间容器。一般情况下,先将各种基本组件添加到其中,然后再将JPanel添加到其它容器(特别是顶层容器)中。JPanel的默认布局是流式布局。

    例3. 面板使用简单示例。

    package GUI;
    
    import java.awt.FlowLayout;
    
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    public class demoJPanel {
        JFrame mainJFrame;
        JPanel myJPanel;
        JLabel myJLabel;
        public demoJPanel(){
            mainJFrame = new JFrame("JPanel使用示例");
            myJPanel = new JPanel();
            myJLabel = new JLabel("本标签在JPanel上");
            myJPanel.setLayout(new FlowLayout());
            myJPanel.add(myJLabel);
            mainJFrame.add(myJPanel);
            mainJFrame.setSize(500, 400);
            mainJFrame.setVisible(true);
            mainJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        public static void main(String[] args) {
            new demoJPanel();
    
        }
    
    }

    JPanel一个作用是方便布局,另外还有一个很重要的作用,就是当做画布来用。

    例4. 在面板上画出简单图形示例1。

    package GUI;
    
    import java.awt.Color;
    import java.awt.Graphics;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    public class painting_1 {
        MyCanvas palette;
        JFrame mainJFrame;
        public class MyCanvas extends JPanel {
    
            protected void paintComponent(Graphics g) {
                g.setColor(Color.red);
                g.drawArc(10, 10, 100, 100, 0, 360);
                g.drawOval(100, 100, 100, 100);
                g.drawRect(50, 50, 100, 100);
                g.drawString("测试", 30, 30);
            }
            
        }
        public painting_1(){
            mainJFrame = new JFrame("用JPanel画图示例");
            palette = new MyCanvas();
            mainJFrame.add(palette);
            mainJFrame.setSize(500, 400);
            mainJFrame.setVisible(true);
            mainJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        public static void main(String[] args) {
            new painting_1();
    
        }
    
    }

    当这个窗口改变时(包括最大化、最小化和调整窗口的大小),窗口中的图形和文字仍然可以正常显示。这要归功于paintComponent(Graphics g)方法。

    例5. 在面板上画出简单图形示例2 。(当用户单击按钮之后才会画图)

    package GUI;
    
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.FlowLayout;
    import java.awt.Graphics;
    import java.awt.LayoutManager;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    public class painting_2 {
        JPanel palette;
        JFrame mainJFrame;
        Container con;
        JButton btn;
        dealPushBtn handleBtn;
        public class dealPushBtn implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                Graphics g;
                final int orign_x = 100, orign_y = 100, radio = 50;
                final double scope = 30.0/180*Math.PI; //每次转动的角度
                double angle = 0.0;
                int x = orign_x+radio, y = orign_y+radio;
                g = palette.getGraphics();
                g.setColor(Color.GREEN);
                for(int i=0;i<12;i++){
                    g.drawArc(x, y, radio*2, radio*2, 0, 360);
                    angle += scope;
                    x =(int)(radio*Math.cos(angle)+orign_x);
                    y =(int)(radio*Math.sin(angle)+orign_y);
                }
            }    
        }
        
        public painting_2(){
            mainJFrame = new JFrame("用JPanel画图示例");
            handleBtn = new dealPushBtn();
            palette = new JPanel();
            btn = new JButton("画图");
            btn.addActionListener(handleBtn);
            palette.add(btn);
            mainJFrame.add(palette);
            mainJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            palette.setLayout(new FlowLayout());
            mainJFrame.setSize(300, 300);
            mainJFrame.setVisible(true);
        }
        public static void main(String[] args) {
            new painting_2();
    
        }
    
    }

    如果改变大小、最小化、最大化上面的图形就会不见了,按钮还在上面。这是因为图片是程序另外画上去的,面板并不知道它的存在。

    3. 滚动面板(JScollPane)使用示例

    例6. 在JScrollPane创建时添加组件示例。

    package GUI;
    
    import javax.swing.Icon;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JScrollPane;
    import javax.swing.ScrollPaneLayout;
    
    public class demoJScrollPane_1 {
        JScrollPane jsp;
        JFrame jf;
        JLabel jl;
        public demoJScrollPane_1(){
            jf = new JFrame("这是一个JScorllPane示例");
            Icon picture = new ImageIcon("test.jpg");
            jl = new JLabel(picture);
            jsp = new JScrollPane(jl);
            jsp.setLayout(new ScrollPaneLayout());
            jf.add(jsp);
            jf.setSize(500, 400);
            jf.setVisible(true);
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
        }
        public static void main(String[] args) {
            new demoJScrollPane_1();
    
        }
    
    }

    例7. 通过add()方法添加组件示例。

    package GUI;
    import javax.swing.Icon;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JScrollPane;
    import javax.swing.ScrollPaneLayout;
    
    public class demoJScrollPane_2 {
        JScrollPane jsp;
        JFrame jf;
        JLabel jl;
        public demoJScrollPane_2(){
            jf = new JFrame("这是一个JScorllPane示例");
            Icon picture = new ImageIcon("test.jpg");
            jl = new JLabel(picture);
            jsp = new JScrollPane();
            jsp.getViewport().add(jl);
            jsp.setLayout(new ScrollPaneLayout());
            jf.add(jsp);
            jf.setSize(500, 400);
            jf.setVisible(true);
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
        }
        public static void main(String[] args) {
            new demoJScrollPane_2();
    
        }
    
    }

    注意:无论采用哪种方法,都只能在JScrollPane中放置一个组件。如果多次添加,后面添加的组件将覆盖前面的组件。如果有多个组件要存放在JScrollPane中,需要先将这些组件存放在另外一个中间容器中,再将这个中间容器添加到JScrollPane中。

    4. 分隔板(JSplitPane)使用示例

    例8. 分隔板简单示例1。

    package GUI;
    
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JSplitPane;
    
    public class demoJSplitPane_1 {
        JFrame jf;
        JSplitPane jsp;
        JLabel jl1,jl2;
        public demoJSplitPane_1(){
            jf = new JFrame("这是一个JSplitPane使用示例");
            jl1 = new JLabel("这是左边窗口");
            jl2 = new JLabel("这是右边窗口");
            jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,jl1,jl2);
            jf.add(jsp);
            jf.setSize(500, 400);
            jf.setVisible(true);
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        public static void main(String[] args) {
            new demoJSplitPane_1();
    
        }
    
    }

    与JScrollPane相同,在JSplitPane的一侧只能放置一个组件。如果需要放置多个组件,需要将这些组件放在另外一个中间容器中(这个中间容器也可以是JSplitPane),再添加进来。

    例9. 分隔板示例2。(将一个窗口分割成四个区域)

    package GUI;
    
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JSplitPane;
    
    public class demoJSplitPane_2 {
        JFrame jf;
        JLabel jl1,jl2,jl3,jl4;
        JSplitPane jsp1,jsp2,jsp3;
        public demoJSplitPane_2(){
            jf = new JFrame("四个窗口的JSplitPane示例");
            jl1 = new JLabel("左上");
            jl2 = new JLabel("左下");
            jl3 = new JLabel("右上");
            jl4 = new JLabel("右下");
            jsp1 = new JSplitPane(JSplitPane.VERTICAL_SPLIT,true,jl1,jl2);
            jsp2 = new JSplitPane(JSplitPane.VERTICAL_SPLIT,true,jl3,jl4);
            jsp3 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,jsp1,jsp2);
            jf.add(jsp3);
            jf.setSize(500, 400);
            jf.setVisible(true);
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        public static void main(String[] args) {
            new demoJSplitPane_2();
    
        }
    
    }

    5. 选项板(JTabbedPane)使用示例

    例10. 选项板使用示例。

    package GUI;
    
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JTabbedPane;
    
    public class demoJTabbedPane {
        JFrame jf;
        JLabel jl1,jl2;
        JTabbedPane jtp;
        public demoJTabbedPane(){
            jf = new JFrame("JTabbedPane使用示例");
            jl1 = new JLabel("这是第一个选项卡");
            jl2 = new JLabel("这是第二个选项卡");
            jtp = new JTabbedPane();
            jtp.addTab("标签一", jl1);
            jtp.addTab("标签二", jl2);
            jf.add(jtp);
            jf.setSize(500, 400);
            jf.setVisible(true);
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        public static void main(String[] args) {
            new demoJTabbedPane();
    
        }
    
    }

    6. 工具栏(JToolBar)使用示例

    在默认情况下,用户可以把工具栏拖动到容器各个边缘。因此,放置工具栏的容器应该使用BorderLayout布局,并且在其他边缘内不能存放其他组件,而只能在容器的中心摆放一个组件。

    JToolBar的使用非常简单,只是要注意往其中添加的按钮通常都是带图标的。

    例11. 工具栏使用示例。

    import java.awt.Container;
    
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JToolBar;
    
    public class demoJToolBar {
        JFrame jf;
        JButton jbt1,jbt2;
        JToolBar jtb;
        Container con;
        public demoJToolBar(){
            jf = new JFrame("JToolBar使用示例");
            jbt1 = new JButton(new ImageIcon("OPEN.jpg"));
            jbt1.setToolTipText("打开文档");
            jbt2 = new JButton(new ImageIcon("SAVE.jpg"));
            jbt2.setToolTipText("保存文档");
            jtb = new JToolBar();
            jtb.add(jbt1);
            jtb.add(jbt2);
            con = jf.getContentPane();
            con.add(jtb, BorderLayout.NORTH);
            jf.setSize(500, 400);
            jf.setVisible(true);
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        public static void main(String[] args) {
            new demoJToolBar();
    
        }
    
    }

    7. 标签(Jlabel)使用示例——常用组件

    例12. 图像标签使用示例。

    package GUI;
    
    import java.awt.BorderLayout;
    import java.awt.Container;
    
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    
    public class demoJLabel_1 {
        JFrame jf;
        JLabel jl;
        Container con;
        public demoJLabel_1(){
            jf = new JFrame("图像标签使用示例");
            jl = new JLabel(new ImageIcon("test.png"));
            con = jf.getContentPane();
            con.add(jl, BorderLayout.CENTER);
            jf.setSize(500, 400);
            jf.setVisible(true);
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        public static void main(String[] args) {
            new demoJLabel_1();
    
        }
    
    }

    例13. 改变标签上鼠标形状示例。

    package GUI;
    
    import java.awt.BorderLayout;
    import java.awt.Container;
    import java.awt.Cursor;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    
    public class demoJLabel_2 {
        JFrame jf;
        JLabel linkjl;
        ListenMouse lm;
        Container con;
        public class ListenMouse extends MouseAdapter {
            public void mouseEntered(MouseEvent e) {
                linkjl.setCursor(new Cursor(Cursor.HAND_CURSOR));
            }        
        }
        
        public demoJLabel_2(){
            jf = new JFrame("改变鼠标形状示例");
            linkjl = new JLabel("将鼠标放到标签上,将变成手型形状");
            lm = new ListenMouse();
            con = jf.getContentPane();
            linkjl.addMouseListener(lm);
            con.add(linkjl,BorderLayout.NORTH);
            jf.setSize(500, 400);
            jf.setVisible(true);
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        public static void main(String[] args) {
            new demoJLabel_2();
    
        }
    
    }
  • 相关阅读:
    hive创建ES外部表过程中的问题
    Hive 与 ElasticSearch 的数据类型对照
    ambari启动hive服务失败
    calcite 1.22新特性
    自动化打包工具gulp
    js中数组的用法
    JavaScript的基础语法
    node.js初体验
    函数的执行过程和闭包
    Ajax -Asynchronous Javascript And XML(异步 JavaScript 和 XML)
  • 原文地址:https://www.cnblogs.com/gaopeng527/p/4246738.html
Copyright © 2011-2022 走看看