热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java基础(十五)GUI基础①

java.awt包的结构1,所有容器组件的父类都可追溯至Component或者MenuComponent。Component是所有的容器的父类,包括Button,TextF

java.awt包的结构


1,所有容器组件的父类都可追溯至Component或者MenuComponent。
Component是所有的容器的父类,包括Button,TextField,Container.MenuComponent
则代表了图像界面的菜单组件,MenuBar,MenuItem,Menu.
2,Container是Component的子类,主要用来盛装其他的GUI组件。
3,Container主要提供了三种容器:Window和panel,Scrollpane.Window是可以独立存在的顶级窗口,
Panel是可以盛装其他组件,但是不能独立存在的容器。
4,Window的子类有:Frame,Dialog。Frame是顶级容器,Dialog是对话框。
5,Frame,Panel,ScrollPane:
Frame可以独立存在的顶级容器,默认布局方式:方位布局(BorderLayout)
Panel不能独立存在的容器,默认布局方式:流式布局(FlowLayout)
ScrollPane带滚动条的容器,,默认布局方式:方位布局(BorderLayout)

图示1:AWT图像组件的继承关系图:

bubuko.com,布布扣

图示2:AWT容器继承关系图:

bubuko.com,布布扣

布局管理器


FlowLayout


组件从从左至右排列,遇到容器边缘,向下另起一行。代码示例:

package com.test;
import java.awt.Button;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
public class FlowLayoutDemo1 extends Frame {

public void init()
{
this.setLayout(new FlowLayout(FlowLayout.LEFT));
for(int i=1;i<=12;i++)
{
this.add(new Button(""+i));
}
this.setSize(100,200);
//this.pack();
this.setVisible(true);

}
public static void main(String[] args) {

new FlowLayoutDemo1().init();;
}
}

BorderLayout



设置容器为BorderLayout可以将容器分为5部分:Center,North,South,West,East。代码示例:

package com.test;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
public class BorderLayoutDemo extends Frame{


public void init()
{
this.setLayout(new BorderLayout());
this.add(new Button("中"),BorderLayout.CENTER);
this.add(new Button("南"),BorderLayout.SOUTH);
this.add(new Button("北"),BorderLayout.NORTH);
this.add(new Button("西"),BorderLayout.WEST);
this.add(new Button("东"),BorderLayout.EAST);

this.setVisible(true);
}
public static void main(String[] args) {

new BorderLayoutDemo().init();
}
}

GridLayout



通过设置网&#26684;布局管理器,可以将容器分为大小相同的网&#26684;。添加组件的时候,默认是从左至右,从上往下添加组件。代码示例:

package com.test;
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;
public class GridLayoutDemo extends Frame {

public void init()
{
this.setLayout(new GridLayout(3,2));
for(int i=0;i<6;i++)
{
this.add(new Button(""+i));

}

this.setVisible(true);

}
public static void main(String[] args) {

new GridLayoutDemo().init();
}
}

GridBagLayout



一种可以设置组件横向,纵向占据空&#26684;和其他属性的布局管理器。
gridx,gridy:设置受该布局影响的横向和纵向的索引。默认&#20540;都为0;
gridWidth,gridHeight:设置受影响组件横向,纵向跨越的网&#26684;数。
fill:设置受影响组件如何占领空白区域。
weightx,weighty:设置受影响组件占领对于空间所增加的比重,默认为0;

代码示例:

package com.test;
import java.awt.Component;
import java.awt.Container;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Label;
import java.awt.TextField;
public class GridBagLayoutDemo2 extends Frame {

GridBagLayout gb =new GridBagLayout();
GridBagConstraints gbc =new GridBagConstraints();

public void init()
{
this.setLayout(gb);
Label l1 = new Label("用户名:");
Label l2 = new Label("密 码:");
TextField naem = new TextField(20);
TextField naem2 = new TextField(20);
gbc.fill= GridBagConstraints.BOTH;
gbc.gridwidth=1;

gb.setConstraints(l1, gbc);
this.add(l1);
gbc.gridwidth=GridBagConstraints.REMAINDER;
//gbc.gridwidth=3;
gb.setConstraints(naem, gbc);
this.add(naem);
gbc.gridwidth=1;
gb.setConstraints(l2, gbc);
this.add(l2);
gbc.gridwidth=GridBagConstraints.REMAINDER;
//gbc.gridwidth=3;
gb.setConstraints(naem2, gbc);
this.add(naem2);

this.setVisible(true);





}



public static void main(String[] args) {

new GridBagLayoutDemo2().init();
}
}

CardLayout



以时间而非空间来管理组件。它将所加入的组件看成是一叠卡片,只有最上面的那张才可见。
CardLayout常用五个方法:first,last,previous,next,show。

package com.test;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.CardLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CardLayoutdemo extends Frame {

CardLayout c =new CardLayout();
Panel pl =new Panel();

public void init()
{

String[] names={"J","Q","K","A","小王","大王"};

pl.setLayout(c);
for(int i=0;i {
Label l= new Label(""+names[i]);
pl.add(l);

}

this.add(pl,BorderLayout.CENTER);



Button pre= new Button("上一张");
pre.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
c.previous(pl);

}

});

Button las = new Button("下一张");

las.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
c.next(pl);

}

});

Panel p = new Panel();
this.add(p,BorderLayout.SOUTH);

p.add(pre);
p.add(las);

this.setVisible(true);

}

public static void main(String[] args) {

new CardLayoutdemo().init();

}
}

BoxLayout


BoxLayout布局管理器常常与Box容器结合使用。这种布局管理器降低了GridBagLayout布局管理器的
难度。通过构造器的参数可以设置放入受影响容器的排列方式。Box对象是一种容器,但是不能独立存在,默认布管理器是BoxLayout。

空布局(NullLayout)


使用组件的setBounds方法可以再深以为位置放入组件,极大的提高了灵活性,操作简单,但是,可移植性不强。代码示例:

package com.test;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
public class NullLayout extends Frame{


public void init()
{
this.setLayout(null);
Label l= new Label("登陆系统");
Label l1 = new Label("用户名:");
Label l2 = new Label("密 码:");
TextField naem = new TextField(20);
TextField naem2 = new TextField(20);
Button reg= new Button("登陆");
Button res= new Button("重置");
l.setBounds(150,30,50,30);
l1.setBounds(50, 60, 40, 40);
l2.setBounds(50, 130, 40, 40);
naem.setBounds(120, 60, 120, 40);
naem2.setBounds(120, 130, 120, 40);
reg.setBounds(100,250 , 40,40 );
res.setBounds(200,250 , 40,40 );
this.add(l);
this.add(l2);
this.add(l1);
this.add(naem2);
this.add(naem);
this.add(res);
this.add(reg);
this.setSize(350,350);
this.setResizable(false);
this.setVisible(true);
}


public static void main(String[] args) {
new NullLayout().init();
}
}








推荐阅读
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 网络爬虫的规范与限制
    本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
  • 本文介绍了 AngularJS 中的 $compile 服务及其用法,通过示例代码展示了如何使用 $compile 动态编译和链接 HTML 元素。 ... [详细]
  • Flutter 2.* 路由管理详解
    本文详细介绍了 Flutter 2.* 中的路由管理机制,包括路由的基本概念、MaterialPageRoute 的使用、Navigator 的操作方法、路由传值、命名路由及其注册、路由钩子等。 ... [详细]
  • 使用jqTransform插件美化表单
    jqTransform 是由 DFC Engineering 开发的一款 jQuery 插件,专用于美化表单元素,操作简便,能够美化包括输入框、单选按钮、多行文本域、下拉选择框和复选框在内的所有表单元素。 ... [详细]
  • 自定义滚动条美化页面内容
    当页面内容超出显示范围时,为了提升用户体验和页面美观,通常会添加滚动条。如果默认的浏览器滚动条无法满足设计需求,我们可以自定义一个符合要求的滚动条。本文将详细介绍自定义滚动条的实现过程。 ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • 微软推出Windows Terminal Preview v0.10
    微软近期发布了Windows Terminal Preview v0.10,用户可以在微软商店或GitHub上获取这一更新。该版本在2月份发布的v0.9基础上,新增了鼠标输入和复制Pane等功能。 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
author-avatar
OutMan王
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有