相关文章推荐
低调的风衣  ·  [面试题~Docker] ...·  2 周前    · 
奋斗的烤土司  ·  react ref ...·  10 月前    · 
酒量大的哑铃  ·  Exception in thread ...·  1 年前    · 
鬼畜的绿豆  ·  ServiceActivationExcep ...·  1 年前    · 

GUI 图型界面的实现。

使用的主要包: import javax.swing.* import java.awt.*

容器:是用来容纳其他组件的特殊组件。

1  顶层容器:JFrame  JApplet  JDialog  JWindow

2  中间容器:JPanel  JScrollPane  JSplitPane  JDesktopPane  JToolBar

3  特殊容器:JInternalFrame  JLayeredPane  JRootPane  在GUI中起特殊作用的中间层

注意:只有顶层容器可以独立的显示出来,其他容器需要放在顶层容器中才能显示出来。一个容器可以通过调用add()方法为该容器添加组件。为此Java引入了布局管理器(LayoutManager),来确定组件按照布局管理器的格式来布局。

创建 GUI 步骤

1  创建顶层容器。

2  指定容器的布局管理器。

3  用add()方法添加各种创建好的组件。

方法:

1  setTitle(String  title) : 设置窗体标题也可在创建对象时作为参数命名。

2  setLayout(new  布局管理器类型): 创建布局管理器。

3  add(组件名称):添加组件。

4  setBounds(int x , int y , int width , int height) : 设置窗体的显示:x , y 显示的位置,width , height 窗体的大小。

5  setVisable(Boolean b):设置窗体是否显示。

6  setDefaultCloseOperation(int operation) :

a: “0”或JFrame . DO_NOTHING_ON_CLOSE:不执行任何操作。

b: “1”或JFrame . HIDE_ON_CLOSE:隐藏该窗体。此时没有关闭程序,只是将程序界面隐藏

c: “2”或JFrame . DISPOSE_ON_CLOSE:隐藏并释放该窗体。但继续运行应用程序,释放了窗体中占用的资源。

d: “3”或JFrame . EXIT_ON_CLOSE: 使用 System exit 方法退出应用程序。

例:

import java.awt.*;
import javax.swing.*;
public class Test{
    public static void main(String[] args) throws Exception{
        JFrame frame = new JFrame("My name is JFrame");//创建对象,并命名与setTitle方法相同
        frame.setLayout(new BorderLayout());//设置布局格式
        JButton button = new JButton();//创建按钮对象
        frame.add(button);//添加按钮对象
        frame.setBounds(300,200,400,200);//出现的位置与大小
        frame.setVisible(true);//是否可见
        frame.setDefaultCloseOperation(3);//退出的方式 与JFrame.EXIT_ON_CLOSE 相同
}

中间容器:面板 JPanel  JScrollPane  JSplitPane

1  如果不使用面板,则只有一种布局管理器,无法实现分区与分块。

2  一些布局格式只能放有限个组件,无法满足需求通过面板可以增加组件量。

3  可以引入带滚动条(JScrollPane)和可分割(JSplitPane)的面板。

例 JPanel

import java.awt.*;
import javax.swing.*;
public class Test{
    public static void main(String[] args) throws Exception{
        //顶层容器的设计
        JFrame frame = new JFrame("使用JPanel");
        frame.setLayout(new BorderLayout());
        frame.setBounds(500,200,400,200);
        frame.setDefaultCloseOperation(3);
        //中间容器的上层对象设计
        JPanel topPanel = new JPanel();
        frame.add(topPanel,BorderLayout.NORTH);
        JLabel show = new JLabel("请输入姓名");//创建提示标签
        JTextField input = new JTextField();//创建输入框
        input.setEditable(true);//输入框设置为可编辑
        input.setHorizontalAlignment(SwingConstants.LEFT);//输入框格式设计
        input.setColumns(20);//输入框的列数设置
        JButton button = new JButton("提交");//创建提交按钮
        topPanel.add(show);
        topPanel.add(input);
        topPanel.add(button);
        //中间容器的下层对象设计
        JPanel bottomPanel = new JPanel();
        frame.add(bottomPanel,BorderLayout.CENTER);
        JLabel show2 = new JLabel("显示所有输入姓名:");//创建提式标签
        JTextArea output = new JTextArea();//创建输出框
        output.setRows(5);//输出框行数设置
        output.setColumns(32);//输出框列数设置
        output.setEditable(false);//输出框设置为禁止编辑
        bottomPanel.add(show2);
        bottomPanel.add(output);
        //最后设置能否可见
        frame.setVisible(true);
}

效果图 image.png

注意:最后在写setVisible否则组件无法一开始就显示出来。

JScrollPane提供4个常用方法:

1  setViewportView( Component view ): 设置在滚动面板中的显示的组件对象。

2  setWheelScrollingEnabled(boolean arge):设置滚动面板的滚动条是否支持鼠标的滚动轮。

3  setHorizontalScrollBarPolicy(int policy):设置水平滚动条的显示策略。

4  setVerticalScrollBarPolicy(int policy):设置垂直滚动条的显示策略。

JSplitPane提供4个常用方法:

1  setOrientation(int orientation):用于设置面板分割方式即水平分割参数(HORIZNTAL_SPLIT)垂直分割(VERTICAL_SPLIT)。

2  setDividerLocation(double proportionalLocatio):用于设置面板的分割比例,即左右或上下的区域占比。

3  setLeftComponent(Component comp):为面板左侧(或上侧)添加组件。

4  setRightComponent(Component comp):为面板右侧(或下侧)添加组件。

布局: java.awt.*

1  使用布局管理器,则其对应的各组件的大小位置已经被布局管理器所管理,用户无法设置这些属性。

2  如果用户想自己控制组件的大小和位置,可取消布局管理器,即调用 setLayout(null) 将布局管理器设置为空。

布局管理器:

1  若不使用 setLayout(null) 则 setBounds(int x , int y , int width , int height) ,可以设置组件在容器中的位置,大小。

import javax.swing.*;
import java.awt.*;
public class Test{
    public static void main(String[] args) {
        JFrame frame = new JFrame("未使用布局管理器");
        frame.setDefaultCloseOperation(3);
        frame.setLayout(null);//不适用布局管理器
        //创建用户标签并设置其起始位置与大小
        JLabel label = new JLabel("用户名:");
        label.setBounds(40,20,80,30);
        //创建用户名输入框,并设置起始位置与大小
        JTextField textField = new JTextField();
        textField.setEditable(true);//能否输入
        textField.setHorizontalAlignment(SwingConstants.LEFT);//左对齐输入
        textField.setColumns(20);//20列
        textField.setBounds(100,20,120,30);
        //创建登录按钮,并设置起始位置与大小
        JButton button = new JButton("登录");
        button.setBounds(130,60,60,30);
        //添加到容器
        frame.add(label);
        frame.add(textField);
        frame.add(button);
        //设置容器的大小并显示
        frame.setBounds(400,200,300,160);
        frame.setVisible(true);
}

效果图:

image.png

2  边界布局管理器 :BorderLayout

JFrame默认的布局管理器,将容器划分为5个部分:容器顶层(NORTH),容器底层(SOUTH),容器中心(CENTER),容器左侧(WEST),容器右侧(EAST)。可通过add方法控制其位置 : frame.add(northLabel , BorderLayout . NORTH);  来控制其位置。                       此外还有setHgap(int hgap) 与setVgap(int vgap)来设置,各区域水平与垂直距离,以像素为位。

import javax.swing.*;
import java.awt.*;
public class Test{
    public static void main(String[] args) {
        JFrame frame = new JFrame("使用边界布局管理器");
        frame.setDefaultCloseOperation(3);
        frame.setLayout(new BorderLayout());//使用边界布局管理器
        //创建用户标签并设置其起始位置与大小
        JLabel label = new JLabel("用户名:");
        label.setBounds(40,20,80,30);//不在起作用
        //创建用户名输入框,并设置起始位置与大小
        JTextField textField = new JTextField();
        textField.setEditable(true);//能否输入
        textField.setHorizontalAlignment(SwingConstants.LEFT);//左对齐输入
        textField.setColumns(20);//20列
        textField.setBounds(100,20,120,30);//不在起作用
        //创建登录按钮,并设置起始位置与大小
        JButton button = new JButton("登录");
        button.setBounds(130,60,60,30);//不在起作用
        //添加到容器
        frame.add(label,BorderLayout.NORTH);//容器顶层
        frame.add(textField,BorderLayout.CENTER);//容器中心
        frame.add(button,BorderLayout.SOUTH);//容器底层
        //设置容器的大小并显示
        frame.setBounds(400,200,300,160);
        frame.setVisible(true);
}

效果图:

image.png

3  顺序布局 : FlowLayout

JPanel默认的布局管理器,布局策略:在一行上排列组件,当该行没有足够的空间时,则换行显示,当容器的大小改变时,组件将自动重排。该类默认居中显示,但可通过setAlignment(int aling)方法来设置对其方式,即参数:(LEFT) 靠左显示,(RIGHT) 靠有显示,(CENTER)默认居中显示。同样还有setHgap(int hgap) 与setVgap(int vgap)来设置,各区域水平与垂直距离。

import javax.swing.*;
import java.awt.*;
public class Test{
    public static void main(String[] args) {
        JFrame frame = new JFrame("使用顺序布局管理器");
        frame.setDefaultCloseOperation(3);
        frame.setLayout(new FlowLayout());//使用顺序布局管理器
        //创建用户标签并设置其起始位置与大小
        JLabel label = new JLabel("用户名:");
        label.setBounds(40,20,80,30);//不在起作用
        //创建用户名输入框,并设置起始位置与大小
        JTextField textField = new JTextField();
        textField.setEditable(true);//能否输入
        textField.setHorizontalAlignment(SwingConstants.LEFT);//左对齐输入
        textField.setColumns(20);//20列
        textField.setBounds(100,20,120,30);//不在起作用
        //创建登录按钮,并设置起始位置与大小
        JButton button = new JButton("登录");
        button.setBounds(130,60,60,30);//不在起作用
        //添加到容器
        frame.add(label);
        frame.add(textField);
        frame.add(button);
        //设置容器的大小并显示
        frame.setBounds(400,200,300,160);
        frame.setVisible(true);
}

效果图:

image.png

4  网格布局:GridLayout

使容器中的各组件呈M行×N列的网格状分布。各组件的排列方式为:从上到下,从左到右。设置网格布局行数和列数时,行数或者列数可以有一个为零。构造方法:GridLayout(int rows, int clos) a  若 (rows > 0 , cols = 0);容器将先按行排列组件,当组件数>rows时自动增加一列;                  b  若 (rows = 0 , cols > 0);容器将先按列排列组件,当组件数>cols时自动增加一行;                    c  若 (rows > 0 , clos > 0);容器将先按行排列组件,当组件数>rows时自动增加一列;                  同样还有setHgap(int hgap) 与setVgap(int vgap)来设置,各区域水平与垂直距离。

import javax.swing.*;
import java.awt.*;
public class Test{
    public static void main(String[] args) {
        JFrame frame = new JFrame("使用网格布局管理器");
        frame.setDefaultCloseOperation(3);
        frame.setLayout(new GridLayout(2,2));//使用网格布局管理器
        //创建用户标签并设置其起始位置与大小
        JLabel label = new JLabel("用户名:");
        label.setBounds(40,20,80,30);//不在起作用
        //创建用户名输入框,并设置起始位置与大小
        JTextField textField = new JTextField();
        textField.setEditable(true);//能否输入
        textField.setHorizontalAlignment(SwingConstants.LEFT);//左对齐输入
        textField.setColumns(20);//20列
        textField.setBounds(100,20,120,30);//不在起作用
        //创建登录按钮,并设置起始位置与大小
        JButton button = new JButton("登录");
        button.setBounds(130,60,60,30);//不在起作用
        //添加到容器
        frame.add(label);
        frame.add(textField);
        frame.add(button);
        //设置容器的大小并显示
        frame.setBounds(400,200,300,160);
        frame.setVisible(true);
}

效果图:

image.png

5  卡片布局CardLayout

布局策略:将容器分为若干层,将个组件按层放入,每次只能看到一层,在调用add()方法添加组件时,除了提供组件对象外,第二个参数要为组件指定一个字符串名称。若要查看某一个组件,可调用show(frame . getContentPane() , String name)方法查看。还提供了next ,  previous , first , last用于控制查看的次序。通常会将面板按照卡片布局插入。


Java GUI框架选择什么?Swing,SWT,AWT,SwingX,JGoodies,JavaFX,Apache Pivot?
Java GUI框架选择什么?Swing,SWT,AWT,SwingX,JGoodies,JavaFX,Apache Pivot?
使用Java语言、GUI图形用户界面设计、JDBC数据库连接等技术,开发出简易的员工信息管理系统
使用Java语言、GUI图形用户界面设计、JDBC数据库连接等技术,开发出简易的员工信息管理系统
java GUI记忆纸牌游戏(memorize game)
首先,一个小程序的制作要考虑的首先是程序界面的布局;其次是算法的设计,实现基本功能;然后再添加其他功能。然后就是Bug以及细节的处理;最后就是制作嵌入帮助开发系统。
【Java】涉及到GUI、JAVASE、网络编程、多线程、数据库的聊天系统,非常适合大学Java课程的练手
【Java】涉及到GUI、JAVASE、网络编程、多线程、数据库的聊天系统,非常适合大学Java课程的练手