java AWT Swing 学习日志

目录

前言

一、Java Swing 介绍

二、学习内容

1.panel(容器)

2.Scrollpane(带滚动条的容器)

3. FlowLayout(流水布局)

 4.BorderLayout(可以将容器分为东西南北中五个区域的布局)

 5.GridLayout(网格布局,计算器界面设计)

6.CardLayout(卡片布局) 

 7.BoxLayout(盒子布局)



前言

学习图形界面的设计,利用MFC应用程序(或Java swing 或QT框架)创建基于对话框的应用程序,能通过设计的控件输入并实现混合运算的算术表达式,要求表达式在编辑框中显示,能将运算结果,输出在编辑框内显示;并保存历史的表达式运算记录。也能够实现算术表达式中包括加、减、乘、除、括号等运算符;并且能够识别括号,优先级正确。

一、Java Swing 介绍

Swing 是一个为Java设计的GUI工具包。

Swing是JAVA基础类的一部分。

Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表。

Swing提供许多比AWT更好的屏幕显示元素。它们用纯Java写成,所以同Java本身一样可以跨平台运行,这一点不像AWT。它们是JFC的一部分。它们支持可更换的面板和主题(各种操作系统默认的特有主题),然而不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们。这意味着你可以在任意平台上使用JAVA支持的任意面板。轻量级组件的缺点则是执行速度较慢,优点就是可以在所有平台上采用统一的行为。

二、学习内容

1.panel(容器)

代码如下:

public class PanelDemo {
    public static void main(String[] args) {
        Frame frame = new Frame("panel");//创建window窗口
        Panel panel = new Panel();//创建panel容器,不能独立存在,依附于window
        panel.add(new TextField("测试文本"));//添加文本到panel
        panel.add(new Button("测试按钮"));//添加按钮到panel
        frame.add(panel);//添加panel到window
        frame.setBounds(100,100,500,300);//x,y,长,宽
        frame.setVisible(true);//窗口可视
    }
}

运行结果:

在运行时会出现乱码,是因为编码(idea默认utf-8)和解码(电脑默认gbk)不同,需要在VM options 里添加-Dfile.encoding=gbk

2.Scrollpane(带滚动条的容器)

代码如下:

package com.one.container;

import java.awt.*;

public class ScrollPaneDemo {
    public static void main(String[] args) {
        Frame frame = new Frame("ScrollPane");
        ScrollPane sp = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);//创建带滚动条容器对象,固定带有滚动条
        Panel panel = new Panel();
        panel.add(new TextField("测试文本"));
        panel.add(new Button("测试按钮"));
        sp.add(panel);//因为ScrollPane默认布局管理器为BorderLayout,在同一区域添加多个组件会覆盖上一个组件;而panel默认的布局管理器为FlowLayout,可以将组件按照从左到右布局,所以这里先将文本和按钮放在panel容器里,再将panel放入ScrollPane容器里,避免直接在ScrollPane里添加组件导致覆盖。
        frame.add(sp);


        frame.setBounds(100,100,500,300);
        frame.setVisible(true);
    }
}

 运行结果:

3. FlowLayout(流水布局)

代码如下:

package com.one.layout;

import java.awt.*;

public class FlowLayoutDemo {
    public static void main(String[] args) {
        Frame frame = new Frame("测试FlowLayout");
        frame.setLayout(new FlowLayout(FlowLayout.LEFT,20,20));
        //frame.setLayout(new FlowLayout(FlowLayout.CENTER,20,20));
        //frame.setLayout(new FlowLayout(FlowLayout.RIGHT,20,20));
        for (int i = 1;i<=100;i++){
            frame.add(new Button("按钮"+i));
        }
        frame.pack();
        frame.setVisible(true);
    }
}

运行结果:

 4.BorderLayout(可以将容器分为东西南北中五个区域的布局)

代码如下:

package com.one.layout;

import java.awt.*;

public class BorderLayoutDemo {
    public static void main(String[] args) {
        Frame frame = new Frame("测试BorderLayout");
        frame.setLayout(new BorderLayout(30,10));

        frame.add(new Button("北侧按钮"),BorderLayout.NORTH);
        frame.add(new Button("南侧按钮"),BorderLayout.SOUTH);
        frame.add(new Button("东侧按钮"),BorderLayout.EAST);
        frame.add(new Button("西侧按钮"),BorderLayout.WEST);
        frame.add(new Button("中间按钮"),BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
    }
}

运行结果:

 

 5.GridLayout(网格布局,计算器界面设计)

代码如下(制作一个计算器界面):

package com.one.layout;

import java.awt.*;

public class GridLayoutDemo {
    public static void main(String[] args) {
        Frame frame = new Frame("计算器");
        Panel panel = new Panel();
        panel.add(new TextField(30));
        frame.add(panel,BorderLayout.NORTH);//上部分

        Panel panel1 = new Panel();//下部分
        panel1.setLayout(new GridLayout(5,4,5,5));//5行4列,水平和垂直间隔5
        panel1.add(new Button("C"));
        panel1.add(new Button("("));
        panel1.add(new Button(")"));
        panel1.add(new Button("÷"));
        panel1.add(new Button("7"));
        panel1.add(new Button("8"));
        panel1.add(new Button("9"));
        panel1.add(new Button("×"));
        panel1.add(new Button("4"));
        panel1.add(new Button("5"));
        panel1.add(new Button("6"));
        panel1.add(new Button("-"));
        panel1.add(new Button("1"));
        panel1.add(new Button("2"));
        panel1.add(new Button("3"));
        panel1.add(new Button("+"));
        panel1.add(new Button("+/-"));
        panel1.add(new Button("0"));
        panel1.add(new Button("."));
        panel1.add(new Button("="));
        frame.add(panel1);
        frame.pack();
        frame.setVisible(true);
    }
}

运行结果:

 

6.CardLayout(卡片布局) 

 代码如下:

package com.one.layout;

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("Card");
        Panel panel = new Panel();
        CardLayout cardLayout = new CardLayout();
        panel.setLayout(cardLayout);
        String[] names = {"第一张","第二张","第三张","第四张","第五张"};//往panel中存多个组件
        for (int i = 0; i < names.length; i++) {
            panel.add(names[i],new Button(names[i]));
        }
        frame.add(panel);

        Panel panel1 = new Panel();//panel1存储多个按钮
        Button b1 = new Button("上一张");
        Button b2 = new Button("下一张");
        Button b3 = new Button("第一张");
        Button b4 = new Button("最后一张");
        Button b5 = new Button("第三张");

        //事件监听器,监听按钮的点击动作
        ActionListener actionListener = new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e) {
                String actionCommand = e.getActionCommand();//这个字符串是按钮上的文字
                switch (actionCommand){
                    case "上一张":
                        cardLayout.previous(panel);
                        break;
                    case "下一张":
                        cardLayout.next(panel);
                        break;
                    case "第一张":
                        cardLayout.first(panel);
                        break;
                    case "最后一张":
                        cardLayout.last(panel);
                        break;
                    case "第三张":
                        cardLayout.show(panel,"第三张");
                        break;

                }
            }
        };
        //把时间监听器和多个按钮绑定
        b1.addActionListener(actionListener);
        b2.addActionListener(actionListener);
        b3.addActionListener(actionListener);
        b4.addActionListener(actionListener);
        b5.addActionListener(actionListener);
        
//把按钮放到panel1
        panel1.add(b1);
        panel1.add(b2);
        panel1.add(b3);
        panel1.add(b4);
        panel1.add(b5);
//把按钮放到南部
        frame.add(panel1,BorderLayout.SOUTH);
        frame.pack();
        frame.setVisible(true);
    }
}

实验结果:

 

 7.BoxLayout(盒子布局)

代码如下:

package com.one.layout;

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

public class BoxLayoutDemo {
    public static void main(String[] args) {
        Frame frame = new Frame("测试Box");

        Box hbox = Box.createHorizontalBox();//创建水平布局box对象

        hbox.add(new Button("水平按钮1"));
        hbox.add(Box.createHorizontalGlue());//添加水平空格
        hbox.add(new Button("水平按钮2"));
        hbox.add(Box.createHorizontalStrut(30));//添加宽度固定为30的水平空格
        hbox.add(new Button("水平按钮3"));

        Box vbox = Box.createVerticalBox();//添加垂直布局的box对象

        vbox.add(new Button("垂直按钮1"));
        vbox.add(Box.createVerticalGlue());//添加垂直空格
        vbox.add(new Button("垂直按钮2"));
        vbox.add(Box.createVerticalStrut(30));//添加高度固定的垂直空格
        vbox.add(new Button("垂直按钮3"));

        frame.add(hbox,BorderLayout.NORTH);//将水平布局的box容器放在window的北边
        frame.add(vbox);//垂直布局的box容器默认放在中间
        frame.pack();
        frame.setVisible(true);

    }
}

 运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值