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, "这是一个有三个按钮的确认框,\n按任意按钮返回");
        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();

    }

}
时间: 2024-12-30 04:31:59

GUI程序设计的相关文章

MATLAB GUI 程序设计中将axes保存为矢量图的方法

MATLAB进行GUI程序设计时,一个figure中通常包含多个axes控件. 保存矢量图的常用指令saveas和print只能以figure为单位保存图片,而不能将figure中的某一个axes单独保存. 而getframe+imwrite的方法虽然可以保存axes,但只能保存为位图,不能保存为矢量图,必定造成图像细节信息丢失. 下面给出一种解决方案. 创建一个新的.不可见的figure和axes,将要保存的axes内容复制至新的axes中,并保存新的figure. 由于新的figure中只有

Python Chapter 9: 使用Tkinter进行GUI程序设计 Part 2

6.几何管理器 Tkinter中的几何管理器分为:网格管理器.包管理器与位置管理器(最好不要对同一容器中的小构件使用多种管理器) ①网格管理器:将各个空间分布在看不见的网格中 1 # Program 9.7 2 from tkinter import * 3 4 class GridManagerDemo: 5 window = Tk() 6 window.title("Grid Manager Demo") 7 8 message = Message(window, text = &

GUI程序设计3

16. 树(JTree)使用示例 例16.1 创建JTree示例. package GUI1; import java.awt.BorderLayout; import java.awt.Container; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; impo

MATLAB GUI程序设计中ListBox空间在运行期间消失的原因及解决方法

在运行期间,ListBox控件突然消失,同时给出如下错误提示: Warning: single-selection listbox control requires that Value be an integer within String rangeControl will not be rendered until all of its parameter values are valid 此错误经常出现在清空List之后.原因在于,List的Value属性指示当前选中的列表项序号,如果超

java GUI之基本图形

1.为了支持图形用户界面程序设计,java1.0的标准类库中包含一个抽象窗口工具箱(Abstract Window Toolkit,AWT). 这个工具箱极不成熟,其编程模型也不是面向对象的,有很大的局限性.为此,java1.2最终决定放弃AWT中的GUI,而是添加了一个Swing库. Swing组件不仅可以完全替代AWT组件,而且提供了更多的复杂组件. 必须注意GUI程序设计是,不能混用AWT组件和Swing组件(例如不能将javax.swing.JList添加到java.awt.Frame中

嵌入式linux QT开发(三)——GUI原理分析

嵌入式linux QT开发(三)--GUI原理分析 一.命令行程序 命令行程序是面向过程的程序设计. 命令行程序的特点: A.基于顺序结构执行 B.程序执行过程中不需与用户交互 C.程序执行结束给出最终运行结果 命令行程序适用场合: A.单任务场合 B.无交互.简单交互场合 C.服务器应用场合 二.GUI程序 GUI程序的特点: A.基于消息驱动模型的程序 B.程序执行依赖用户交互过程 C.程序执行过程中实时响应用户操作 D.一般程序执行后不会主动退出 GUI程序适用场合: A.多任务场合 B.

201671010145 2016-2017《Java程序设计》JAVA图形程序设计基本框架

在Java 1.0 刚刚出现的时候,包含了一个用于基本GUI程序设计的类库,Sun将它称为抽象窗口工具箱(Abstract Window Toolkit, AWT). 1996年,Netscape创建了一种称为IFC(Internet Foundation Class)的GUI库.Sun与Netscape合作完善了这种方式,创建了一个名为Swing的用户界面库. Swing没有完全替代AWT,而是基于AWT架构之上.Swing仅仅提供了能力更加强大的用户界面组件.尤其在采用Swing编写的程序中

徐思201771010132 《面向对象程序设计(java)》课程学习总结

1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设计结构: (4) 综合掌握java多线程编程模型: (5) 综合编程练习. 2.实验内容和步骤 任务1:填写课程课后调查问卷,网址:https://www.wjx.cn/jq/33108969.aspx. 任务2:综合编程练习 练习1:设计一个用户信息采集程序,要求如下: (1)  用户信息输入界面如下图所示: (1)用户点击提交按钮时,用户输入信息

201771010126 王燕《面向对象程序设计(java)》第十八周学习总结

实验十八  总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设计结构: (4) 综合掌握java多线程编程模型: (5) 综合编程练习. 2.实验内容和步骤 任务1:填写课程课后调查问卷,网址:https://www.wjx.cn/jq/33108969.aspx. 任务2:综合编程练习 练习1:设计一个用户信息采集程序,要求如下: 1 package pro