java中Swing布局方式总结

  • 时间:
  • 3845人关注

本文通过代码示例给大家详细讲解了java中Swing五种常见的布局方式,以及相关注意知识点,有兴趣的朋友参考学习下。,另外这篇文章主要知识点是关于java、Swing、布局方式、Swing布局的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子资料:

教程详情电子资料
  • 教程类别:Swing布局
  • 编辑整理:须哲彦
  • 教程字数:4280字节
  • 阅读时间:大概18分钟
  • 下载本教程(DOC版)
  • Java从入门到精通(第4版)
  • Java开发实例大全:基础卷
  • Java开发手册 v1.5.0
  • 深度解析Java游戏服务器开发
  • JavaScript设计模式
  • 1、 边界布局(BorderLayout)

    2、流式布局(FlowLayout)

    3、网格布局(GridLayout)

    4、盒子布局(BoxLaYout)

    5、空布局(null)

    还有其他两种布局,分别是GridBagLayout(网格包布局)、CardLayout(卡片布局)

    注意:JFrame和JDialog默认布局为BorderLayout,JPanel和Applet默认布局为FlowLayout

    边界布局示例代码:

    import java.awt.BorderLayout;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    
    public class BorderLayoutExample extends JFrame{
      JButton btn1=new JButton("东");
      JButton btn2=new JButton("南");
      JButton btn3=new JButton("西");
      JButton btn4=new JButton("北");
      JButton btn5=new JButton("中");
      BorderLayoutExample(){
        init();
        this.setTitle("边界布局");
        this.setResizable(true);
        this.setSize(200, 200);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setVisible(true);
      }
      void init(){
        this.setLayout(new BorderLayout(10,5)); //默认为0,0;水平间距10,垂直间距5
        this.add(btn1,BorderLayout.EAST);
        this.add(btn2,BorderLayout.SOUTH);
        this.add(btn3,BorderLayout.WEST);
        this.add(btn4,BorderLayout.NORTH);
        this.add(btn5,BorderLayout.CENTER);
      }
      public static void main(String args[]){
        new BorderLayoutExample();
      }
    }

    运行结果:

    java中Swing五种常见的布局方式

    流式布局示例代码:

    import java.awt.FlowLayout;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    
    public class FlowLayoutExample extends JFrame{
      JButton btn1=new JButton("one");
      JButton btn2=new JButton("two");
      JButton btn3=new JButton("three");
      JButton btn4=new JButton("four");
      JButton btn5=new JButton("five");
      FlowLayoutExample(){
        init();
        this.setTitle("流式布局");
        this.setResizable(true);
        this.setSize(200, 200);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setVisible(true);
      }
      void init(){
        this.setLayout(new FlowLayout(FlowLayout.LEFT,10,5)); //默认为居中;水平间距10,垂直间距5
        this.add(btn1);
        this.add(btn2);
        this.add(btn3);
        this.add(btn4);
        this.add(btn5);
      }
      public static void main(String args[]){
        new FlowLayoutExample();
      }
    }

    运行结果:

    java中Swing五种常见的布局方式

    网格布局示例代码:

    import java.awt.GridLayout;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    
    public class GridLayoutExample extends JFrame{
    	JButton btn1=new JButton("one");
    	JButton btn2=new JButton("two");
    	JButton btn3=new JButton("three");
    	JButton btn4=new JButton("four");
    	JButton btn5=new JButton("five");
    	GridLayoutExample(){
    		init();
    		this.setTitle("表格布局");
    		this.setResizable(true);
    		this.setSize(300, 200);
    		this.setLocationRelativeTo(null);
    		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    		this.setVisible(true);
    	}
    	void init(){
    		this.setLayout(new GridLayout(2,3,10,5)); //默认为1行,n列;2行3列,水平间距10,垂直间距5
    		this.add(btn1);
    		this.add(btn2);
    		this.add(btn3);
    		this.add(btn4);
    		this.add(btn5);
    	}
    	public static void main(String args[]){
    		new GridLayoutExample();
    	}
    }

    运行结果:

    java中Swing五种常见的布局方式

    盒子布局示例代码:

    import javax.swing.Box;
    import javax.swing.BoxLayout;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    
    public class BoxLaYoutExample extends JFrame{
    	JButton btn1=new JButton("one");
    	JButton btn2=new JButton("two");
    	JButton btn3=new JButton("three");
    	JButton btn4=new JButton("four");
    	JButton btn5=new JButton("five");
    	BoxLaYoutExample(){
    		init();
    		this.setTitle("表格布局");
    		this.setResizable(true);
    		this.setSize(300, 200);
    		this.setLocationRelativeTo(null);
    		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    		this.setVisible(true);
    	}
    	void init(){
    		this.setLayout(new BoxLayout(this.getContentPane(),BoxLayout.X_AXIS));
    		//可以使用Box容器代替
    		//Box box = new Box(BoxLayout.Y_AXIS);box.add(btn...);box.add(creat..);
    		this.add(btn1);
    		this.add(btn2);
    		this.getContentPane().add(Box.createHorizontalStrut(10)); //采用x布局时,添加固定宽度组件隔开
    		//this.getContentPane().add(Box.createVerticalStrut(5)); //采用y布局时,添加固定高度组件隔开
    		this.add(btn3);
    		this.add(btn4);
    		this.add(btn5);
    	}
    	public static void main(String args[]){
    		new BoxLaYoutExample();
    	}
    }

    运行结果:

    java中Swing五种常见的布局方式

    空布局示例代码:

    import javax.swing.JButton;
    import javax.swing.JFrame;
    
    public class NullLayoutExample extends JFrame{
    	JButton btn1=new JButton("one");
    	JButton btn2=new JButton("two");
    	JButton btn3=new JButton("three");
    	JButton btn4=new JButton("four");
    	JButton btn5=new JButton("five");
    	NullLayoutExample(){
    		init();
    		this.setTitle("空布局");
    		this.setResizable(true);
    		this.setSize(300, 300);
    		this.setLocationRelativeTo(null);
    		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    		this.setVisible(true);
    	}
    	void init(){
    		this.setLayout(null);
    		btn1.setBounds(10, 0, 100, 50); //x坐标10,y坐标0,组件宽100,高50
    		btn2.setBounds(20, 50, 100, 50);
    		btn3.setBounds(30, 100, 100, 50);
    		btn4.setBounds(40, 150, 100, 50);
    		btn5.setBounds(50, 200, 100, 50);
    		this.add(btn1);
    		this.add(btn2);
    		this.add(btn3);
    		this.add(btn4);
    		this.add(btn5);
    		
    	}
    	public static void main(String args[]){
    		new NullLayoutExample();
    	}
    }

    运行结果:

    java中Swing五种常见的布局方式

    码农之家
    Java Swing组件单选框JRadioButton用法示例

    3小时1分钟前回答

    Java Swing组件单选框JRadioButton用法示例

    本文实例讲述了Java Swing组件单选框JRadioButton用法。分享给大家供大家参考,具体如下:

    JRadioButton是Swing中的单选框。所谓单选框是指,在同一个组内虽然有多个单选框存在,然而同一时刻只能有一个单选框处于选中状态。它就像收音机的按钮,按下一个时此前被按下的会自动弹起,故因此得名。因此,在添加JRadioButton控件时,要记得将它们添加到同一个ButtonGroup中。

    JRadioButton的常用方法如下图所示:

    Java Swing组件单选框JRadioButton用法示例

    可以为它添加ActionListener对象来响应事件。这里有一个问题,当多个JRadioButton共用一个事件监听器时,如何获取产生事件的按钮?

    有4种方法:

    1.遍历这些按钮并检查是否选中,这种方法比较笨重。

    2.使用事件的getActionCommand()方法,这需要事先为每个控件设置ActionCommand

    3.使用事件的getSource,并转化为控件对象。

    4.使用ButtonGroupgetSelection方法,它返回的并不是控件,而是那个控件的ButtonModel,需再次调用ButtonModel的getActionCommand方法。

    使用demo如下:

    JRadioButtonDemo.java

    package awtDemo;
    import java.awt.BorderLayout;
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.HashMap;
    import java.util.Map;
    import javax.swing.ButtonGroup;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JRadioButton;
    /*
     * source code from 《java核心技术 卷1 基础知识》 P329
     */
    @SuppressWarnings("serial")
    public class JRadioButtonDemo extends JFrame {
      int DEFAULT_WIDTH = 600;
      int DEFAULT_HEIGHT = 400;
      private JLabel label;
      private JPanel buttonPanel;
      private ButtonGroup group;
      private static final int DEFAULT_SIZE = 12;
      private Map actionCommandSizeMap = new HashMap();
      // 二维数组存储按钮属性,第一维是按钮名称,第二维是字体大小
      private String[][] buttonAttributes = {
          { "Small", "Medium", "Large", "Extra" }, { "8", "12", "18", "36" } };
      public JRadioButtonDemo() {
        setTitle("JRadioButtonDemo - www.jb51.net");
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
        // 添加label
        label = new JLabel("欢迎访问码农之家 www.jb51.net");
        label.setFont(new Font("Serif", Font.PLAIN, DEFAULT_SIZE));
        add(label, BorderLayout.CENTER);
        // 添加buttonPanel,它包含4个radioButton
        buttonPanel = new JPanel();
        group = new ButtonGroup();
        add(buttonPanel, BorderLayout.SOUTH);
        // 添加radioButton
        for (int i = 0; i < buttonAttributes[0].length; i++) {
          addRadioButton(buttonAttributes[0][i],
              Integer.parseInt(buttonAttributes[1][i]));
          // 将按钮名称和字体大小添加为对应表,名称等同于actionCommand
          actionCommandSizeMap.put(buttonAttributes[0][i],
              Integer.parseInt(buttonAttributes[1][i]));
        }
      }
      public void addRadioButton(String name, final int size) {
        boolean selected = size == DEFAULT_SIZE;
        JRadioButton button = new JRadioButton(name, selected);
        button.setActionCommand(name);// 设置name即为actionCommand
        group.add(button);
        buttonPanel.add(button);
        // 构造一个监听器,响应checkBox事件
        ActionListener actionListener = new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            // 1.通过eActionCommand
            String eActionCommand = e.getActionCommand();
            System.out.printf("e.getActionCommand() is %s\n",
                eActionCommand);
            // 2.通过getSource()
            Object sourceObject = e.getSource();
            if (sourceObject instanceof JRadioButton) {
              JRadioButton sourceButton = (JRadioButton) sourceObject;
              System.out.printf("selected JRadioButton is %s\n",
                  sourceButton.getText());
            }
            // 3.通过groupSelectionActionCommand
            String groupSelectionActionCommand = group.getSelection()
                .getActionCommand();
            System.out.printf("groupSelectionActionCommand is %s\n",
                groupSelectionActionCommand);
            label.setFont(new Font("Serif", Font.PLAIN,
                actionCommandSizeMap.get(groupSelectionActionCommand)));
          }
        };
        button.addActionListener(actionListener);
      }
      public static void main(String[] args) {
        // TODO Auto-generated method stub
        // 创建窗体并指定标题
        JRadioButtonDemo frame = new JRadioButtonDemo();
        // 关闭窗体后退出程序
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 自动适配所有控件大小
        // frame.pack();
        // 设置窗体位置在屏幕中央
        frame.setLocationRelativeTo(null);
        // 显示窗体
        frame.setVisible(true);
      }
    }
    

    运行效果如下:

    Java Swing组件单选框JRadioButton用法示例

    更多关于java相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java字符与字符串操作技巧总结》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

    希望本文所述对大家java程序设计有所帮助。

    展开阅读

    上一篇:使用 Maven 插件构建Docker镜像

    下一篇:解析Spring Boot中如何使用LDAP来统一管理用户信息

    相关内容

    • Java Swing中JTable渲染器与编辑器的用法详解

      这篇文章主要介绍了Java Swing中JTable渲染器与编辑器用法,结合实例形式较为详细的分析了Swing中JTable渲染器与编辑器的功能、使用方法及相关注意事项,需要的朋友可以参考下

      12-17Java Swing中JTable渲染器与编辑器用法示例

      阅读更多
    • Java Swing 多线程加载图片实例详解

      这篇文章主要为大家详细介绍了Java Swing 多线程加载图片,保证顺序一致,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

      03-08Java Swing 多线程加载图片(保证顺序一致)

      阅读更多
    • Java开发实例大全(提高卷)

      Java开发实例大全(提高卷)

      汇集了Java开发从基础知识到高级应用各个层面的大量实例及源代码,45个方向,1201个实例案例,java编程类四库全书,供学习、速查、实践练习的超全参考手册,是《java开发实战1200例》之全新升级

      大小:162.8 MBJava编程

      点击下载
    • Java核心技术卷II:高级特性(第10版)

      Java核心技术卷II:高级特性(第10版)

      这是一本Java领域有影响力和价值的著作之一,根据JavaSE8全面更新,系统全面讲解了Java语言的核心概念、语法、重要特性和开发方法,包含大量案例,实践性强,欢迎下载

      大小:195.7 MBJava

      点击下载
    • Java 8实战

      Java 8实战

      大小:12.9MBJava8

      点击下载
    • 实战Java高并发程序设计

      实战Java高并发程序设计

      大小:155793 MB Java

      点击下载
    • 2019校招面java试题库(含答案解析)

      2019校招面java试题库(含答案解析)

      本题库均来自海量真实校招面试题目大数据进行的整理,内含解析和答案,需要严肃说明的是:面试题库作为帮助同学准备面试的辅助资料,但是绝对不能作为备考唯 一途径,因为面试是一个考察真实水平的,不是背会了答案就可以的,需要你透彻理解的,否则追问问题答不出来反而减分,毕竟技术面试中面试官最痛恨的就是背答案这个事情了。 学完这个题库,把此题库都理解透彻应对各家企业面试完全没有问题。(当然,要加上好的 项目以及透彻掌

      大小:2.03 MBjava面试

      点击下载

    学习笔记

    30小时30分钟前回答

    java swing实现简单的五子棋游戏

    用java swing写的一个简单的五子棋游戏。 下面是Main.java。 package com.crossing.main;import com.crossing.view.GameWindow;public class Main { /** * @param args */ public static void main(String[] args) { GameWindow gameWindow = new GameWindow(); }} 下面是GameWindow.java。 package com.crossing.view;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.GridLayout;import java.awt.Rectangle;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.JButton;import javax.swing.JFrame;imp……

    46小时30分钟前回答

    Java Swing实现的定制TextField功能示例

    本文实例讲述了Java Swing实现的定制TextField功能。分享给大家供大家参考,具体如下: 先来看看运行效果: 具体代码如下: package themedemo;import java.awt.BasicStroke;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Graphics2D;import java.awt.GridLayout;import java.awt.Insets;import java.awt.RenderingHints;import java.util.Map;import javax.swing.BorderFactory;import javax.swing.JComponent;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.Painter;import javax.swing.SwingUtilities;import javax.swing.UIDefaults;import javax.swing.UIManager;import javax.swing.WindowConstants;public class TextFieldSkinDemo { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnab……

    16小时31分钟前回答

    Java Swing组件单选框JRadioButton用法示例

    本文实例讲述了Java Swing组件单选框JRadioButton用法。分享给大家供大家参考,具体如下: JRadioButton是Swing中的单选框。所谓单选框是指,在同一个组内虽然有多个单选框存在,然而同一时刻只能有一个单选框处于选中状态。它就像收音机的按钮,按下一个时此前被按下的会自动弹起,故因此得名。因此,在添加JRadioButton控件时,要记得将它们添加到同一个ButtonGroup中。 JRadioButton的常用方法如下图所示: 可以为它添加ActionListener对象来响应事件。这里有一个问题,当多个JRadioButton共用一个事件监听器时,如何获取产生事件的按钮? 有4种方法: 1.遍历这些按钮并检查是否选中,这种方法比较笨重。 2.使用事……