Java图形化界面编程一

1 篇文章 0 订阅
订阅专栏

目录

一:介绍

二:AWT编程

2.1AWT介绍

2.2 AWT继承体系

2.3 Container容器

2.3.1 Container继承体系

2.3.2 常见API

2.3.3 容器演示

2.4 LayoutManager布局管理器

2.4.1 FlowLayout

2.4.2 BorderLayout

2.4.3 GridLayout

2.4.4 GridBagLayout

2.4.5 CardLayout

2.4.6 BoxLayout

2.5 AWT中常用组件

2.5.1 基本组件

2.5.2 对话框Dialog


一:介绍

        java使用AWT和Swing相关的类可以完成图形化界面编程,其中AWT的全称是抽象窗口工具集(Abstract Window Toolkit),它是sun公司最早提供的GUI库,这个GUI库提供了一些基本功能,但这个GUI库的功能比较有限,所以后来sun公司又提供了Swing库。通过使用AWT和Swing提供的图形化界面组件库,java的图形化界面编程非常简单,程序只需要依次创建所需的图形组件,并以合适的方式将这些组件组织在一起,就可以开发出非常美观的用户界面。

二:AWT编程

2.1AWT介绍

        当 JDK 1.0发布时, Sun 提供了 一套基本的GUI类库,这个GUI类库希望可以在所有平台下都能运行 , 这套基本类库被称为"抽象窗口工具集 CAbstract Window Toolkit )",它为Java应用程序提供了基本的图形组件 。 AWT是窗口框架,它从不同平台的窗口系统中抽取出共同组件 , 当程序运行时,将这些组件的创建和动作委托给程序所在的运行平台 。 简而言之 ,当使用 AWT 编写图形界面应用 时, 程序仅指定了界面组件的位置和行为,并未提供真正的实现,JVM调用操作系统本地的图形界面来创建和平台 一致的对等体 。

        使用AWT创建的图形界面应用和所在的运行平台有相同的界面风格 , 比如在 Windows 操作系统上,它就表现出 Windows 风格 ; 在 UNIX 操作系统上,它就表现出UNIX 风格 。 Sun 希望采用这种方式来实现 " Write Once, Run Anywhere " 的目标 。

2.2 AWT继承体系

        所有和 AWT 编程相关的类都放在 java.awt 包以及它的子包中, AWT 编程中有两个基类 :Component和 MenuComponent。

  • Component:代表一个能以图形化方式显示出来,并可与用户交互的对象,例如 Button 代表一个按钮,TextField 代表 一个文本框等;

  • MenuComponent:则代表图形界面的菜单组件,包括 MenuBar (菜单条)、 Menultem (菜单项)等子类。

        其中 Container 是一种特殊的 Component,它代表一种容器,可以盛装普通的 Component。AWT中还有一个非常重要的接口叫LayoutManager ,如果一个容器中有多个组件,那么容器就需要使用LayoutManager来管理这些组件的布局方式。

2.3 Container容器

2.3.1 Container继承体系

  • Winow是可以独立存在的顶级窗口,默认使用BorderLayout管理其内部组件布局;

  • Panel可以容纳其他组件,但不能独立存在,它必须内嵌其他容器中使用,默认使FlowLayout管理其内部组件布局;

  • ScrollPane 是 一个带滚动条的容器,它也不能独立存在,默认使用 BorderLayout 管理其内部组件布局;

2.3.2 常见API

 

2.3.3 容器演示

2.3.3.1 Window

测试:

import java.awt.*;
public class WindowDemo {
    public static void main(String[] args) {
        //创建一个窗口
        Frame frame=new Frame("测试Windows窗口");
        //设置位置和大小
        frame.setLocation(500,300);
        frame.setSize(500,300);
        //或者
        //frame.setBounds(500,300,500,300);
        //设置可见
        frame.setVisible(true);
    }
}

运行: 

2.3.3.2 Panel

测试: 

import java.awt.*;

public class PanelDemo {
    public static void main(String[] args) {
        
        //1.创建一个Windows对象 因为pannel及其他容器都不能独立存在,需要依附window存在
        Frame frame=new Frame("测试Pannel");
        //2.创建Pannel对象
        Panel panel=new Panel();
        //3.创建一个文本框和一个按钮并把他们放入Pannel容器中
        panel.add(new TextField("这里是一个测试文本"));
        panel.add(new Button("这里是一个测试按钮"));
        //4.将pannel放入window中
        frame.add(panel);
        //5.设置window位置和大小
        frame.setBounds(500,300,500,300);
        //设置可见
        frame.setVisible(true);
    }
}

运行:

        由于IDEA默认使用utf-8进行编码,但是当前我们执行代码是是在windows系统上,而windows操作系统的默认编码是gbk,所以会乱码,如果出现了乱码,那么只需要在运行当前代码前,设置一个jvm参数 -Dfile.encoding=gbk即可。(后面不再强调)

 再次运行

2.3.3.3 ScrollPane

测试:

import java.awt.*;

public class ScrolPaneDemo {
    public static void main(String[] args) {
        Frame frame=new Frame("演示ScrollPane");
        //1.创建一个ScrollPane对象 SCROLLBARS_ALWAYS总是有滚动条
        ScrollPane scrollPane = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
        //2.创建一个文本框和一个按钮
        scrollPane.add(new TextField("这是一个测试文本"));
        scrollPane.add(new Button("这里是一个测试按钮"));
        //将scrollPanne放入window中
        frame.add(scrollPane);
        frame.setBounds(500,300,500,300);
        frame.setVisible(true);
    }
}

运行: 

         程序明明向 ScrollPane 容器中添加了 一个文本框和一个按钮,但只能看到 一个按钮,却看不到文本框 ,这是为什么 呢?这是因为ScrollPane 使用 BorderLayout 布局管理器的缘故,而 BorderLayout 导致了该容器中只有一个组件被显示出来 。

2.4 LayoutManager布局管理器

        之前,我们介绍了Component中有一个方法 setBounds() 可以设置当前容器的位置和大小,但是我们需要明确一件事,如果我们手动的为组件设置位置和大小的话,就会造成程序的不通用性。

         如果要让我么的程序在不同的操作系统下,都有相同的使用体验,那么手动设置组件的位置和大小,无疑是一种灾难,因为有太多的组件,需要分别设置不同操作系统下的大小和位置。为了解决这个问题,Java提供了LayoutManager布局管理器,可以根据运行平台来自动调整组件大小,程序员不用再手动设置组件的大小和位置了,只需要为容器选择合适的布局管理器即可。

 

2.4.1 FlowLayout

        在 FlowLayout 布局管理器 中,组件像水流一样向某方向流动 (排列) ,遇到障碍(边界)就折回,重头开始排列 。在默认情况下, FlowLayout 布局管理器从左向右排列所有组件,遇到边界就会折回下一行重新开始。

 测试:

import java.awt.*;

public class FlowLayoutDemo {
    public static void main(String[] args) {
        Frame frame=new Frame("演示Flowlayout");
        //1.通过setLayout方法设置容器的布局管理器
        frame.setLayout(new FlowLayout(FlowLayout.CENTER,20,30));
        //2.添加多个按钮到frame中
        for (int i = 1; i <=50; i++) {
            frame.add(new Button("按钮"+i));
        }
        //3.设置最佳大小,用pack()方法
        frame.pack();
        frame.setVisible(true);

    }
}

运行: 

2.4.2 BorderLayout

        BorderLayout 将容器分为 EAST、SOUTH、WEST 、NORTH 、CENTER五个区域,普通组件可以被放置在这 5 个区域的任意一个中 。 BorderLayout布局 管理器的布局示意图如图所示 。

当改变使用 BorderLayout 的容器大小时, NORTH 、 SOUTH 和 CENTER区域水平调整,而 EAST 、 WEST 和 CENTER 区域垂直调整。使用BorderLayout 有如下两个注意点:

  1. 当向使用 BorderLayout 布局管理器的容器中添加组件时 , 需要指定要添加到哪个区域中 。 如果没有指定添加到哪个区域中,则默认添加到中间区域中;

  2. 如果向同一个区域中添加多个组件时 , 后放入的组件会覆盖先放入的组件;

  3. 如果不往某个区域中放入组件,那么该区域不会空白出来,而是会被其他区域占用

测试1:

import java.awt.*;

public class BorderLayoutDemo1 {
    public static void main(String[] args) {
        Frame frame=new Frame("演示BorderLayout");
        //1.通过setLayout方法设置容器的布局管理器
        //其实不设置也可以,window默认使用BorderLayout管理其内部组件布局
        frame.setLayout(new BorderLayout(30,10));
        //2.往frame指定区域添加组件
        frame.add(new Button("北侧按钮"),BorderLayout.NORTH);
        frame.add(new Button("南侧按钮"),BorderLayout.SOUTH);
        frame.add(new Button("西侧按钮"),BorderLayout.WEST);
        frame.add(new Button("东侧按钮"),BorderLayout.EAST);
        frame.add(new Button("中间按钮"),BorderLayout.CENTER);
        //3.设置最佳大小,用pack()方法
        frame.pack();
        frame.setVisible(true);
    }
}

运行:

测试2:

import java.awt.*;

public class BorderLayoutDemo2 {

    public static void main(String[] args) {
        //1.创建Frame对象
        Frame frame = new Frame("这里测试BorderLayout");
        //2.指定Frame对象的布局管理器为BorderLayout
        frame.setLayout(new BorderLayout(30,5));
        //3.往Frame指定南,北,放入一个按钮,往中间区域放入一个Panel

        frame.add(new Button("南侧按钮"), BorderLayout.SOUTH);
        frame.add(new Button("北侧按钮"), BorderLayout.NORTH);

        Panel panel = new Panel();
        panel.add(new TextField("测试文本"));
        panel.add(new Button("中间按钮"));

        frame.add(panel, BorderLayout.CENTER);
	
        //4.设置Frame为最佳大小
        frame.pack();
        //5.设置Frame可见
        frame.setVisible(true);
    }
}

运行:

2.4.3 GridLayout

        GridLayout 布局管理器将容器分割成纵横线分隔的网格 , 每个网格所占的区域大小相同。当向使用 GridLayout 布局管理器的容器中添加组件时, 默认从左向右、 从上向下依次添加到每个网格中 。 与 FlowLayout不同的是,放置在 GridLayout 布局管理器中的各组件的大小由组件所处的区域决定(每 个组件将自动占满整个区域) 。

测试

import java.awt.*;

public class GridLayoutDemo {
    public static void main(String[] args) {
        Frame frame=new Frame("计算器");
        //1.创建一个Pannel对象,里面存放一个TextFiled组件
        //30表示最多能容纳30个字符
        Panel p1 = new Panel();
        p1.add(new TextField(30));
        //2.把当前这个Panel添加到frame的北边区域
        frame.add(p1,BorderLayout.NORTH);
        //3,创建一个Pannel对象,并设置它的布局管理器为GridLayout
        //Pannel 默认的布局管理器是FlowLayout
        //GridLayout(int rows,int cols,int hgap,int vgap)
        Panel p2=new Panel();
        p2.setLayout(new GridLayout(3,5,4,4));
        //4.往Pannel中添加内容
        for (int i = 0; i < 10; i++) {
            //Button(字符串) i+""即变为字符串类型
            p2.add(new Button(i+""));
        }
        p2.add(new Button("+"));
        p2.add(new Button("-"));
        p2.add(new Button("*"));
        p2.add(new Button("/"));
        p2.add(new Button("."));
        //5.将Pannel添加到frame中
        frame.add(p2);
        frame.pack();
        frame.setVisible(true);
    }
}

运行:

 

2.4.4 GridBagLayout

        GridBagLayout 布局管理器的功能最强大 , 但也最复杂,与 GridLayout 布局管理器不同的是, 在GridBagLayout 布局管理器中,一个组件可以跨越一个或多个网格 , 并可以设置各网格的大小互不相同,从而增加了布局的灵活性 。 当窗口的大小发生变化时 , GridBagLayout 布局管理器也可以准确地控制窗口各部分的拉伸 。(不好用,Swing中的布局管理器更好用,下面不做测试)

        由于在GridBagLayout 布局中,每个组件可以占用多个网格,此时,我们往容器中添加组件的时候,就需要具体的控制每个组件占用多少个网格,java提供的GridBagConstaints类,与特定的组件绑定,可以完成具体大小和跨越性的设置。  GridBagConstraints API不做演示

2.4.5 CardLayout

        CardLayout 布局管理器以时间而非空间来管理它里面的组件,它将加入容器的所有组件看成一叠卡片(每个卡片其实就是一个组件),每次只有最上面的那个 Component 才可见。就好像一副扑克牌,它们叠在一起,每次只有最上面的一张扑克牌才可见。 

测试:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class CardLayoutDemo {
    public static void main(String[] args) {
        Frame frame = new Frame("这里测试CardLayout");

        //1.创建一个Pannel,用来存储多张卡片
        Panel p1 = new Panel();
        //2.创建CardLayout对象,并且把该对象设置给之前创建的容器
        CardLayout cardLayout = new CardLayout();
        p1.setLayout(cardLayout);
        //3.往Pannel中存储多个组件
        String[] names = {"第一页", "第二页", "第三页", "第四页", "第五页"};
        for (int i = 0; i < 5; i++) {
            p1.add(names[i], new Button(names[i]));
        }
        //4.把Pannel放到frame的中间区域
        //或者frame.add(p1,BorderLayout.CENTER);
        frame.add(p1);
        //5.创建另一个Pannel p2用来存储多个按钮组件
        Panel p2 = new Panel();
        //6.创建5个按钮组件
        Button b1 = new Button("上一张");
        Button b2 = new Button("下一张");
        Button b3 = new Button("第一张");
        Button b4 = new Button("最后一张");
        Button b5 = new Button("第三张");

        //7.创建一个事件监听器,监听按钮的点击动作
        ActionListener listener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //这个字符串其实就是按钮上的文字
                String actionCommand = e.getActionCommand();
                switch (actionCommand) {
                    case "上一张":
                        cardLayout.previous(p1);
                        break;
                    case "下一张":
                        cardLayout.next(p1);
                        break;
                    case "第一张":
                        cardLayout.first(p1);
                        break;
                    case "最后一张":
                        cardLayout.last(p1);
                        break;
                    case "第三张":
                        cardLayout.show(p1, "第三张");
                        break;
                }
            }
        };
        //8.把当前这个事件监听器和多个按钮绑定在一起
        b1.addActionListener(listener);
        b2.addActionListener(listener);
        b3.addActionListener(listener);
        b4.addActionListener(listener);
        b5.addActionListener(listener);
        //9.把按钮添加到容器p2中
        p2.add(b1);
        p2.add(b2);
        p2.add(b3);
        p2.add(b4);
        p2.add(b5);
        //10.把p2放在frame的南边区域
        frame.add(p2,BorderLayout.SOUTH);
        frame.pack();
        frame.setVisible(true);
        }
    }

运行:

2.4.6 BoxLayout

        为了简化开发,Swing 引入了 一个新的布局管理器 : BoxLayout 。 BoxLayout 可以在垂直和 水平两个方向上摆放 GUI 组件, BoxLayout 提供了如下一个简单的构造器:

测试1:

package layout;

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

public class BoxLayoutDemo1 {
    public static void main(String[] args) {
        Frame frame=new Frame("这里测试BoxLayout");
        //1.基于frame创建一个BoyLayout对象 并且该对象存放组件是垂直存放
        BoxLayout boxLayout = new BoxLayout(frame,BoxLayout.Y_AXIS);
        //2.把BoyLayout对象设置给Frame
        frame.setLayout(boxLayout);
        //3.往frame中添加两个按钮组件
        frame.add(new Button("按钮1"));
        frame.add(new Button("按钮2"));
        frame.pack();
        frame.setVisible(true);
    }
}

运行:

 在java.swing包中,提供了一个新的容器Box,该容器的默认布局管理器就是BoxLayout,大多数情况下,使用Box容器去容纳多个GUI组件,然后再把Box容器作为一个组件,添加到其他的容器中,从而形成整体窗口布局。

方法名称方法功能
static Box createHorizontalBox()创建一个水平排列组件的 Box 容器 。
static Box createVerticalBox()创建一个垂直排列组件的 Box 容器 。

测试2:

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

public class BoxLayoutDemo2 {

    public static void main(String[] args) {

        //1.创建Frame对象
        Frame frame = new Frame("这里测试BoxLayout");

        //2.创建一个横向的Box,并添加两个按钮
        Box hBox = Box.createHorizontalBox();
        hBox.add(new Button("水平按钮一"));
        hBox.add(new Button("水平按钮二"));

        //3.创建一个纵向的Box,并添加两个按钮
        Box vBox = Box.createVerticalBox();
        vBox.add(new Button("垂直按钮一"));
        vBox.add(new Button("垂直按钮二"));

        //4.把box容器添加到frame容器中
        frame.add(hBox,BorderLayout.NORTH);
        frame.add(vBox);


        //5.设置frame最佳大小并可见

        frame.pack();
        frame.setVisible(true);

    }
}

运行:

        通过之前的两个BoxLayout演示,我们会发现,被它管理的容器中的组件之间是没有间隔的,不是特别的美观,但之前学习的几种布局,组件之间都会有一些间距,那使用BoxLayout如何给组件设置间距呢?

其实很简单,我们只需要在原有的组件需要间隔的地方,添加间隔即可,而每个间隔可以是一个组件,只不过该组件没有内容,仅仅起到一种分隔的作用。

Box类中,提供了5个方便的静态方法来生成这些间隔组件:

方法名称方法功能
static Component createHorizontalGlue()创建一条水平 Glue (可在两个方向上同时拉伸的间距)
static Component createVerticalGlue()创建一条垂直 Glue (可在两个方向上同时拉伸的间距)
static Component createHorizontalStrut(int width)创建一条指定宽度(宽度固定了,不能拉伸)的水平Strut (可在垂直方向上拉伸的间距)
static Component createVerticalStrut(int height)创建一条指定高度(高度固定了,不能拉伸)的垂直Strut (可在水平方向上拉伸的间距)

测试:

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

public class BoxLayoutDemo3 {
    public static void main(String[] args) {
        Frame frame = new Frame("这里测试BoxLayout");
        //1.创建水平排列的Box容器 hBox
        Box hBox = Box.createHorizontalBox();
        //2.往Box容器中添加按钮,还需要在多个按钮之间添加分割
        hBox.add(new Button("水平按钮一"));
        hBox.add(Box.createHorizontalGlue());//水平Glue该分割在两个方向都可以拉伸
        hBox.add(new Button("水平按钮二"));
        hBox.add(Box.createHorizontalStrut(30));
        hBox.add(new Button("水平按钮三"));

        //3.创建垂直排列的Box容器 vBox
        Box vBox = Box.createVerticalBox();
        //4.往vBox容器中添加按钮,还需要在多个按钮之间添加分割
        vBox.add(new Button("垂直按钮一"));
        vBox.add(Box.createVerticalGlue());//垂直Glue()该分割在两个方向上都可以拉伸
        vBox.add(new Button("垂直按钮二"));
        vBox.add(Box.createVerticalStrut(30));
        vBox.add(new Button("垂直按钮三"));
        //5.把box容器添加到frame中
        frame.add(hBox,BorderLayout.NORTH);
        frame.add(vBox);

        frame.pack();
        frame.setVisible(true);

    }
}

运行: 

2.5 AWT中常用组件

2.5.1 基本组件

组件名功能
ButtonButton
Canvas用于绘图的画布
Checkbox复选框组件(也可当做单选框组件使用)
CheckboxGroup用于将多个Checkbox 组件组合成一组, 一组 Checkbox 组件将只有一个可以 被选中 , 即全部变成单选框组件
Choice下拉选择框
Frame窗口 , 在 GUI 程序里通过该类创建窗口
Label标签类,用于放置提示性文本
ListJU表框组件,可以添加多项条目
Panel不能单独存在基本容器类,必须放到其他容器中
Scrollbar滑动条组件。如果需要用户输入位于某个范围的值 , 就可以使用滑动条组件 ,比如调 色板中设置 RGB 的三个值所用的滑动条。当创建一个滑动条时,必须指定它的方向、初始值、 滑块的大小、最小值和最大值。
ScrollPane带水平及垂直滚动条的容器组件
TextArea多行文本域
TextField单行文本框

这些 AWT 组件的用法比较简单,可以查阅 API 文档来获取它们各自的构方法、成员方法等详细信息。

测试:

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

public class BasicComponentDemo {
    Frame frame = new Frame("这里测试基本组件");

    //定义一个5行,20列的多行文本域
    TextArea ta = new TextArea(5, 20);

    //定义一个下拉选择框
    Choice colorChooser = new Choice();

    //定义一个复选框组
    CheckboxGroup cbg = new CheckboxGroup();
    //定义一个单选框,初始处于被选中状态,并添加到cbg组中
    Checkbox male = new Checkbox("男", cbg, true);

    //定义一个单选框,初始处于未被选中状态,并添加到cbg组中
    Checkbox female = new Checkbox("女", cbg, false);

    //定义一个复选框,初始处于未被选中状态
    Checkbox married = new Checkbox("是否已婚?", false);

    //定义一个50列的单行文本域
    TextField tf = new TextField(50);
    //定义一个按钮
    Button ok = new Button("确认");


    //定义一个列表选择框 true代表可以多选
    List colorList = new List(6,true);




    public void init() {

        //创建一个垂直排列的Box容器,装载 多行文本域和checkPanel
        Box topLeft = Box.createVerticalBox();
        topLeft.add(ta);

        //往列表选择框中添加内容
        colorList.add("红色");
        colorList.add("绿色");
        colorList.add("蓝色");

        //创建一个水平排列的Box容器,装载topLeft和列表选择框
        Box top = Box.createHorizontalBox();
        top.add(topLeft);
        top.add(colorList);
        //将top添加到frame的中间区域
        frame.add(top);

        //往下拉选择框中添加内容
        colorChooser.add("红色");
        colorChooser.add("绿色");
        colorChooser.add("蓝色");
        //创建一个装载按钮和文本框的Panel容器


        //创建一个Panel容器,装载下拉选择框,单选框和复选框
        Panel checkPanel = new Panel();
        checkPanel.add(colorChooser);
        checkPanel.add(male);
        checkPanel.add(female);
        checkPanel.add(married);
        topLeft.add(checkPanel);

        Panel bottom = new Panel();
        bottom.add(tf);
        bottom.add(ok);
        //把bottom添加到Frame的底部
        frame.add(bottom,BorderLayout.SOUTH);

        //设置frame最佳大小并可见
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {

        new BasicComponentDemo().init();

    }
}

运行:

2.5.2 对话框Dialog

2.5.2.1 Dialog

Dialog 是 Window 类的子类,是 一个容器类,属于特殊组件 。 对话框是可以独立存在的顶级窗口, 因此用法与普通窗口的用法几乎完全一样,但是使用对话框需要注意下面两点:

  • 对话框通常依赖于其他窗口,就是通常需要有一个父窗口;

  • 对话框有非模式(non-modal)和模式(modal)两种,当某个模式对话框被打开后,该模式对话框总是位于它的父窗口之上,在模式对话框被关闭之前,父窗口无法获得焦点。

方法名称方法功能
Dialog(Frame owner, String title, boolean modal)创建一个对话框对象: owner:当前对话框的父窗口 title:当前对话框的标题 modal:当前对话框是否是模式对话框,true/false

测试:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class DialogDemo1 {

    public static void main(String[] args) {

        Frame frame = new Frame("这里测试Dialog");

        Dialog d1 = new Dialog(frame, "模式对话框", true);
        Dialog d2 = new Dialog(frame, "非模式对话框", false);

        Button b1 = new Button("打开模式对话框");
        Button b2 = new Button("打开非模式对话框");

        //设置对话框的大小和位置
        d1.setBounds(20,30,300,400);
        d2.setBounds(20,30,300,400);

        //给b1和b2绑定监听事件
        b1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                d1.setVisible(true);
            }
        });
        b2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                d2.setVisible(true);
            }
        });

        //把按钮添加到frame中
        frame.add(b1);
        frame.add(b2,BorderLayout.SOUTH);

        //设置frame最佳大小并可见
        frame.pack();
        frame.setVisible(true);

    }
}

运行: 

 

 测试2:

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

public class DialogDemo2 {

    public static void main(String[] args) {

        Frame frame = new Frame("这里测试Dialog");
       
        Button b1 = new Button("打开模式对话框");

        Dialog d1 = new Dialog(frame, "模式对话框", true);
        //往对话框中添加内容
        Box vBox = Box.createVerticalBox();
        vBox.add(new TextField(15));
        vBox.add(new JButton("确认"));
        d1.add(vBox);

        //设置对话框的大小和位置
        d1.setBounds(20,30,300,100);


        //给b1绑定监听事件
        b1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                d1.setVisible(true);
            }
        });


        //把按钮添加到frame中
        frame.add(b1);

        //设置frame最佳大小并可见
        frame.pack();
        frame.setVisible(true);

    }
}

运行:

2.5.2.1 FileDialog

Dialog 类还有 一个子类 : FileDialog ,它代表一个文件对话框,用于打开或者保存 文件,需要注意的是FileDialog无法指定模态或者非模态,这是因为 FileDialog 依赖于运行平台的实现,如果运行平台的文件对话框是模态的,那么 FileDialog 也是模态的;否则就是非模态的 。

方法名称方法功能
FileDialog(Frame parent, String title, int mode)创建一个文件对话框: parent:指定父窗口 title:对话框标题 mode:文件对话框类型,如果指定为FileDialog.load,用于打开文件,如果指定为FileDialog.SAVE,用于保存文件
String getDirectory()获取被打开或保存文件的绝对路径
String getFile()获取被打开或保存文件的文件名

测试:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class FileDialogTest {

    public static void main(String[] args) {

        Frame frame = new Frame("这里测试FileDialog");
        
        Button b1 = new Button("打开文件");
        Button b2 = new Button("保存文件");
        
        FileDialog d1 = new FileDialog(frame, "选择需要加载的文件", FileDialog.LOAD);
        FileDialog d2 = new FileDialog(frame, "选择需要保存的文件", FileDialog.SAVE);
        
        //给按钮添加事件
        b1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                d1.setVisible(true);
                //打印用户选择的文件路径和名称
                System.out.println("用户选择的文件路径:"+d1.getDirectory());
                System.out.println("用户选择的文件名称:"+d1.getFile());
            }
        });

        System.out.println("-------------------------------");
        b2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                d2.setVisible(true);
                //打印用户选择的文件路径和名称
                System.out.println("用户选择的文件路径:"+d2.getDirectory());
                System.out.println("用户选择的文件名称:"+d2.getFile());
            }
        });

        //添加按钮到frame中

        frame.add(b1);
        frame.add(b2,BorderLayout.SOUTH);

        //设置frame最佳大小并可见
        frame.pack();
        frame.setVisible(true);
    }
}

运行:

Java图形化界面编程——Swing编程
qq_32442911的博客
02-23 2395
Swing是完完全全由Java实现的,不再依赖本地平台的GUI,因此可以在所有平台上都保持相同的界面外观,独立于本地平台的Swing组件被称为轻量级组件;而依赖于本地平台的AWT组件被称为重量级组件。由于Swing的所有组件完全采用Java实现,不再调用本地平台的GUI,所有导致Swing图形界面的显示速度要比AWT图形界面的显示速度慢一些,但相对于快速发展的硬件设施而言,这种微小的速度差距并无大碍。
java 图形化界面
热门推荐
wxh的博客
11-15 1万+
框架Frame框架Frame可以作为Java的顶级窗口来使用。Frame是AWT中Window的一个子类,是带有标题和缩放角的窗口,是属于重量级组件。Frame可以设置自己的标题、边框、菜单、大小等等。默认的Frame实例化对象都是没有大小和不可见的,必须调用setSize( )来设置大小,调用setVisible(true)来设置该窗口为可见的。
JavaGUI界面—窗口、按钮、文本框,及其解决按钮的中文乱码
ruan_luqingnian的博客
01-29 7304
一. Java图形化界面开发概述 通常情况下,java语言一般是用来开发后台程序的,所谓的后台程序就是部署在服务器端的程序,默默的工作,用户是看不到任何界面的。 事实上,我们使用java语言同样可以完成图形化界面程序的开发,而学习图形化界面编程相对来说就会有趣很多,因为所见即所得,也就是说,我们写的大部分代码的执行效果,是可以通过图形化界面实实在在能够看得到的。 java使用AWT和Swing相关的类可以完成图形化界面编程,其中AWT的全称是抽象窗口工具集(Abstract Window Toolkit)
如何在Java中实现高效的图形用户界面:从Swing到JavaFX
最新发布
微赚淘客系统开发者博客
08-30 1109
对于新的项目,JavaFX是一个更现代和功能丰富的选择,而对于现有的Swing项目,逐步迁移到JavaFX可以为应用程序带来更好的用户体验和性能优化。Swing是Java Foundation Classes(JFC)的一部分,提供了丰富的GUI组件库,如按钮、文本框、列表等。在这个示例中,我们创建了一个基本的Swing窗口,并在窗口中添加了一个按钮。在这个示例中,当用户点击按钮时,将弹出一个信息对话框。将一个Swing按钮嵌入到JavaFX应用程序中,这使得从Swing到JavaFX的过渡变得更加平滑。
linux图形界面编程基本知识
欲穷千里目,更上一层楼
10-05 2018
引用作者:GuCuiwen email:win2linux@163.com    很多LINUX初学者分不清楚linux和X之间,X和Xfree86之间,X和KDE,GNOME等之间是什么关系.常常混淆概念,我想以比较易于理 解的方式说明一下X,X11,XFREE,WM,KDE,GNOME等之间的关系.由于本人水平有限可能存在错误,请高手指正.一,linux本身没有图形界面,linux现在的图
java图形化界面开发_java图形用户界面编程
weixin_39837105的博客
02-13 270
package com.lovo.frame;import java.awt.Color;import java.awt.Container;import java.awt.Font;import java.awt.Toolkit;import javax.swing.BorderFactory;import javax.swing.ButtonGroup;import javax.swing.I...
java图形化界面编程资料.zip
06-19
Java图形化界面编程Java开发中的一个重要组成部分,它允许开发者创建具有用户友好界面的应用程序。在Java中,有两种主要的图形用户界面(GUI)库:Abstract Window Toolkit(AWT)和Swing。这两个库提供了丰富的...
java图形化界面编程.zip
06-29
Java图形化界面编程Java开发中的一个重要领域,主要用于创建用户友好的桌面应用程序。在Java中,Swing库提供了丰富的组件和工具,使开发者能够构建功能强大的GUI(图形用户界面)。Swing是Java Foundation Classes...
java图形化界面编程.md
11-17
java图形化界面编程.md
Java图形化界面编程
06-20
Java图形化界面编程Java开发中的一个重要组成部分,它允许开发者创建具有用户交互功能的应用程序。在Java中,图形用户界面(GUI)的构建主要依赖于Java的AWT(Abstract Window Toolkit)库和Swing库。这两个库提供...
Java图形界面开发—学生信息管理系统 完整源码
02-28
学生信息管理系统,使用Java开发。 1、登录界面可以进行登录操作。有俩种权限选择。分别跳转到不同的界面。 2、使用了事件监听、Java操作SQLserver数据库等知识。 3、图形化界面中使用了JTable等组件,将查询结果显示在表格中。 详见我的博客:http://blog.csdn.net/qq_25827845/article/details/50932501
Java图形化界面
09-12
java Swing 各个组件布局,控制位置
java图形界面编程
06-28
java图形界面编程,资料很详细
Java中的图形用户界面开发
微赚淘客系统开发者博客
06-22 1194
Java最早的GUI工具包,提供了一组基本的图形组件(如窗口、按钮、文本框等),依赖于底层平台的本地GUI组件。Swing:建立在AWT之上的GUI工具包,提供了更丰富和更具吸引力的界面组件,完全由Java实现,不依赖于底层操作系统。JavaFX:Java的下一代客户端桌面应用程序平台,提供了现代化的界面设计和丰富的可视化组件,支持丰富的动画和效果。Java中的图形用户界面开发不仅仅是技术上的挑战,更是提升用户体验和应用程序价值的重要手段。
Java图形界面设计
weixin_30325971的博客
10-20 1249
一、总述 Java的图形用户界面由各种组件(component)构成,它们主要位于java.awt包与javax.swing包中。Swing与AWT最大的不同是,Swing在实现时,不包含任何本地代码(native),是一种“轻量级(lightweight)”的组件 Swing具有状态的组件。 二、容器 1.顶层容器: JFrame、JApplet、JDialog 和 JWind...
JAVA图形用户界面开发
the_littlew的博客
04-19 519
package Cai; import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class Student { //组件 JTextField name;//写名字的文本框 JTextField ID; JTextField number; JTextField result; JB.
Java学习笔记】java图形界面编程
diguangxihua的博客
07-02 1517
AWT是抽象窗口工具类(Abstrat Window ToolKit)的缩写,AWT库中有60多个类和接口,几乎涵盖了创建Java图形界面程序的所有工具。利用AWT类库,可以在Applet的显示区域创建标签、按钮、复选框第二部分,还可以针对用户行为进行响应。AWT是jdk的一部分,AWT为图形界面程序提供了所需的丰富的组件,同时还提供了对事件类、监听器类、图形处理工具,2D图形的支持。
黑马训练营Java图形化界面编程全套教程
1. Java图形化界面编程基础:图形化界面编程是指使用编程语言构建用户可交互的图形界面的应用程序。在Java中,这通常涉及Java Swing库或JavaFX框架。本教程将专注于Java Swing,因为它历史悠久且在实际开发中仍被...
写文章

热门文章

  • 数据结构版学生管理系统 8552
  • Java图形化界面编程一 7826
  • Typora中如何打小黑点,空心圆,实心方框 4885
  • 单链表的冒泡排序 3959
  • Android相对布局 3868

分类专栏

  • QT 13篇
  • 就业 1篇
  • 机械设计 1篇
  • 前端 5篇
  • SSM+SpringBoot 6篇
  • Vue 17篇
  • C++就业 13篇
  • 安卓 10篇
  • 面试 9篇
  • 人工智能 1篇
  • 公务员 4篇
  • 嵌入式就业班 1篇
  • 网络 1篇
  • AGV 2篇
  • Python 4篇
  • HTML 3篇
  • opencv 2篇
  • 实训 2篇
  • JavaWeb 2篇
  • Java刷题 23篇
  • JavaSE 30篇
  • 博客 2篇
  • IO 8篇
  • 服务器 2篇
  • Java可视化 1篇
  • 算法 17篇
  • C语言 21篇
  • Android 5篇
  • 蓝桥杯C/C++ 27篇
  • 数据结构 4篇
  • STL 3篇
  • C++ 21篇
  • 代码 3篇
  • 常见问题 3篇

最新评论

  • qt下载与安装

    lyy678zm: 为啥没有6.2.4呢

  • 数据结构版学生管理系统

    2401_84160234: 这个有没有流程图表情包

  • qt下载与安装

    心之本源: 有用, 非常好,一次成功

  • TCPIP介绍

    小梁说代码: 支持佬 文章很细节 学习到了

  • 数据结构版学生管理系统

    Dvoiln: 为什么307行de_s报错未初始化

最新文章

  • Qt的安装
  • 试学第一天
  • 机械设计基础的基本知识
2024
10月 1篇
06月 1篇
05月 1篇
04月 2篇
03月 19篇
02月 2篇
01月 29篇
2023年84篇
2022年97篇
2021年20篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猪八戒1.0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳坪山网站建设公司网站推广优化定制网站优化seo教程项城外贸网站优化哪家有名长治关键词网站优化网站优化应该从何做起中山seo网站优化闵行区谷歌网站优化排名南通网站优化招聘唯品会网站优化目标容桂网站优化流程斗门网站优化费用网站百度优化推广公司旅游网站优化益阳网站关键词排名优化随州市网站线上推广优化高质量的丹徒网站优化淮北网站排名优化哪家好网站关键词优化好主意易速达服装行业网站优化热线网站优化实训作业品创天下网站优化杭州专业的餐饮行业网站优化东莞网站seo关键词优化方法正定网站优化推广哪家好嘉兴做网站优化临沧网站优化价格肇庆网站性能优化网站优化分站武冈网站优化霸屏郑州网站优化公司香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化