IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> swing Java窗体程序 2 -> 正文阅读

[系统运维]swing Java窗体程序 2

三、布局管理器
  Swing中,每个组件在容器中都有一个具体的位置和大小,在容器中摆放各自组件时很难判断其具体位置和大小,这里我们就要引入布局管理器了,它提供了基本的布局功能,可以有效的处理整个窗体的布局。常用的布局管理器包括流布局管理器、边界布局管理器、网格布局管理器等。

1. 绝对布局
  绝对布局在上一篇的例子中已经出现过了,是硬性指定组件在容器中的位置和大小,可以使用绝对坐标的方式来指定组件的位置。步骤如下:

(1)使用Container.setLayout(null)方法取消布局管理器

(2)使用Container.setBounds()方法设置每个组件的位置和大小

举一个简单的例子:

Container container = getContentPane();    // 创建容器
JButton jb = new JButton("按钮");    // 创建按钮
jb.setBounds(10, 30, 100, 30);    // 设置按钮位置和大小
container.add(jb);    // 将按钮添加到容器中

setBounds()方法中,前两个参数是位置的xy坐标,后两个参数是按钮的长和宽。

2. 流布局管理器
  流布局管理器是布局管理器中最基本的布局管理器,使用FlowLayout类,像“流”一样从左到右摆放组件,直到占据了这一行的所有空间,再向下移动一行。组件在每一行的位置默认居中排列,要更改位置可自行设置。

在FlowLayout的有参构造方法中,alignment设置为0时,每一行的组件将被指定左对齐排列;当alignment被设置为2时,每一行的组件将被指定右对齐排列;而为1时是默认的居中排列。

下面举个例子,创建10个按钮并用流布局管理器排列。

import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class FlowLayoutDemo extends JFrame {

    public FlowLayoutDemo() {
        Container container = this.getContentPane();
        // 设置流布局管理器,2是右对齐,后两个参数分别为组件间的水平间隔和垂直间隔
        this.setLayout(new FlowLayout(2, 10, 10));

        // 循环添加按钮
        for(int i=0; i<10; i++) {
            container.add(new JButton("按钮" + i));
        }

        this.setSize(300, 200);
        this.setVisible(true);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

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

}

3. 边界布局管理器
  在不指定窗体布局时,Swing组件默认的布局管理器是边界布局管理器,使用的是BorderLayout类。在上篇例子中,一个JLabel标签占据了整个空间,实质上是默认使用了边界布局管理器。边界布局管理器还可以容器分为东、南、西、北、中五个区域,可以将组件加入这五个区域中。

下面举一个实例。

import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class BorderLayoutDemo extends JFrame {

    private String[] border = {BorderLayout.CENTER, BorderLayout.NORTH,
            BorderLayout.SOUTH, BorderLayout.WEST, BorderLayout.EAST};    // 此数组用于存放组件摆放位置
    private String[] button = {"中", "北", "南", "西", "东"};    // 此数组用于存放按钮名称

    public BorderLayoutDemo() {
        Container container = this.getContentPane();
        this.setLayout(new BorderLayout());        // 设置容器为边界布局管理器

        // 循环添加按钮
        for(int i=0; i<button.length ; i++) {
            container.add(border[i], new JButton(button[i]));    // 左参数为设置布局,右参数为创建按钮
        }

        this.setVisible(true);
        this.setSize(300, 200);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

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

}

四、面板
  面板也是一个容器,可作为容器容纳其他组件,但也必须被添加到其他容器中。Swing中常用面板有JPanel面板和JScrollPane面板。

1. JPanel
  JPanel面板可以聚集一些组件来布局。继承自java.awt.Container类。

下面举个例子。

import java.awt.Container;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class JPanelDemo extends JFrame {

    public JPanelDemo() {
        Container container = this.getContentPane();
        container.setLayout(new GridLayout(2, 1, 10, 10));    // 整个容器为2行1列

        JPanel p1 = new JPanel(new GridLayout(1, 3));    // 初始化一个面板,设置1行3列的网格布局
        JPanel p2 = new JPanel(new GridLayout(1, 2));    // 初始化一个面板,设置1行2列的网格布局
        JPanel p3 = new JPanel(new GridLayout(2, 1));    // 初始化一个面板,设置2行1列的网格布局
        JPanel p4 = new JPanel(new GridLayout(3, 2));    // 初始化一个面板,设置3行2列的网格布局

        p1.add(new JButton("1"));    // 在JPanel面板中添加按钮
        p1.add(new JButton("1"));    // 在JPanel面板中添加按钮
        p1.add(new JButton("1"));    // 在JPanel面板中添加按钮
        p2.add(new JButton("2"));    // 在JPanel面板中添加按钮
        p2.add(new JButton("2"));    // 在JPanel面板中添加按钮
        p3.add(new JButton("3"));    // 在JPanel面板中添加按钮
        p3.add(new JButton("3"));    // 在JPanel面板中添加按钮
        p4.add(new JButton("4"));    // 在JPanel面板中添加按钮
        p4.add(new JButton("4"));    // 在JPanel面板中添加按钮
        p4.add(new JButton("4"));    // 在JPanel面板中添加按钮
        p4.add(new JButton("4"));    // 在JPanel面板中添加按钮
        p4.add(new JButton("4"));    // 在JPanel面板中添加按钮
        p4.add(new JButton("4"));    // 在JPanel面板中添加按钮

        container.add(p1);        // 在容器中添加面板
        container.add(p2);        // 在容器中添加面板
        container.add(p3);        // 在容器中添加面板
        container.add(p4);        // 在容器中添加面板

        this.setVisible(true);
        this.setSize(500, 350);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

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

}

2. JScrollPane
  若遇到一个较小的容器窗体中显示一个较大部分内容的情况,可用JScrollPane面板。这是一个带滚动条的面板,就像平时浏览网页,经常遇到的滚动条一样。

如果需要在JScrollPane面板中放置多个组件,需将这多个组件放置在JPanel面板上,然后将JPanel面板作为一个整体组件添加在JScrollPane面板上。

下面看一个例子。

import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;
import javax.swing.WindowConstants;

public class JScrollPaneDemo extends JFrame {

    public JScrollPaneDemo() {
        Container container = this.getContentPane();

        JTextArea tArea = new JTextArea(20, 50);        // 创建文本区域组件
        tArea.setText("http://www.cnblogs.com/adamjwh/");

        JScrollPane sp = new JScrollPane(tArea);
        container.add(sp);

        this.setVisible(true);
        this.setSize(300, 150);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

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

}
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-11 17:55:43  更:2021-10-11 17:57:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:24:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码