JAVA GUI(图形用户界面)

本文详细介绍了Java中用于图形用户界面(GUI)开发的Swing框架,包括其主要包(java.awt,javax.swing,java.awt.event)的功能,以及JFrame、JDialog、不同布局管理器(FlowLayout、BorderLayout、GridLayout、GridBagLayout)的使用方法,以及组件的添加和事件处理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java提供了三个主要包做GUI开发:
java.awt 包 – 主要提供字体/布局管理器

javax.swing 包[商业开发常用] – 主要提供各种组件(窗口/按钮/文本框)

java.awt.event 包 – 事件处理,后台功能的实现。


目录

Swing

容器(Container)

窗口JFrame

构造方法

参数设置及常用方法

 案例

弹窗JDialog

构造方法

 参数设置及常用方法

案例 

布局管理器(LayoutManager)

FlowLayout——流式布局管理器

BorderLayout——边框布局管理器

GridLayout——网格布局管理器

GridBagLayout——网格包布局管理器 

组件(Component) 

 Swing事件处理机制

模板一

模板二 

 案例

题目1

题目2


Swing

AWT中大量引入了Windows函数,所以经常被称为重量级组件。而Swing使用Java语言实现的轻量级组件,没有本地代码,直接使用Swing可以更加轻松的构建用户界面。

在Java中所有的Swing都保存在javax.swing包中,从包名可以清楚的发现这个是一个扩展包,所有的组件是从JComponent扩展出来的。

如图所示:swing组件主要可分为三个部分,后面会详细介绍

(1)顶层容器::常用有JFrame,JDialog

(2)中间容器:JPanel,JOptionPane,JScrollPane,JLayeredPane 等,主要以panel结尾。

(3)基本组件:JLabel,JButton,JTextField,JPasswordField,JRadioButton 等。

容器(Container)

窗口JFrame

Swing中的窗口其实和AWT中的类似,只不过是对其做了升级改进,添加了更加人性化的方法。Swing中的Frame叫做JFrame,同样是一个顶级窗口,JFrame比较突出的一个特点就是不需要再去绑定监听事件去关闭窗口了,直接给我们一个方法:

void setDefaultCloseOperation(WindowConstants.常量);
//传入一个WindowConstants类型的常量去决定关闭的方式

Frame或JFrame类用于创建一个具有标题栏的框架窗口作为程序的主要界面,它不依赖其他容器可以单独存在。 

构造方法

①无参构造

JFrame fr = new JFrame();

fr.setTitle("这是一个窗口");

②有参构造

JFrame fr = new JFrame("这是一个窗口");

参数设置及常用方法

·setTitle("窗体名称");
设置窗口名字

·setSize(int width, int height);
设置窗体的大小

·setBackground(Color c));
设置窗体的背景颜色

·setLocation(int x, int y);
设置窗体的坐标(原点在左上角),传入坐标即可。

·setBounds(int x, int y, int width, int height);
设置窗体的大小

·setVisible(boolean b);
设置窗体是否可见,默认是不可见的,所以要可见必须用这个方法传入参数true。

·setDefaultCloseOperation(int opreation);
设置点击窗体关闭按钮的时候,做出的响应。通常都是如下面这样写(调用WindowConstants这个类中的静态成员EXIT_ON_CLOSE,表示点击关闭按钮时的默认响应为关闭此窗口并结束程序)。

fr.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
WindowConstants的相关静态成员如下:

DO_NOTHING_ON_CLOSE(什么也不做)
HIDE_ON_CLOSE (隐藏当前窗口)
DISPOSE_ON_CLOSE (隐藏当前窗口,并释放窗体占有的其他资源,这个重点记一下,后面讲JDialog会用到)
EXIT_ON_CLOSE (结束窗口所在的应用程序)。

 案例
import javax.swing.*;
public class Main{
    public static void creatGUI() {
        // 初始化窗口
        JFrame jFrame = new JFrame("这个是窗口的标题");
        // 设置窗口的位置和大小
        jFrame.setBounds(400, 300, 500, 500);
        // 设置窗口的背景颜色
        jFrame.setBackground(new Color(175, 114, 114));
        // 设置窗口是否可见
        jFrame.setVisible(true);
        // 设置窗口关闭时的响应
        jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
        createGUI();
    }
}
弹窗JDialog

弹窗,使用 JDialog 类可以创建自定义有的弹窗,或者调用 JOptionPane 中的多个静态方法快速创建各种标准的弹窗。弹窗需要明白的一个最重要的概念:弹窗也是一个窗口,是通过另外一个窗口调出的。

构造方法

·有参构造1

JDialog(Frame owner);

用于创建一个非模态的对话框。参数owner为对话框所有者(顶级窗口JFrame)。

·有参构造2

JDialog(Frame owner,String title);

创建一个具有指定标题的非模态对话框。

·有参构造3

JDialog(Frame owner,boolean modal);

创建一个有指定模式(模态或非模态)的无标题对话框。

 参数设置及常用方法

·setTitle("窗体名称");

·setModal(boolean modal);
//用来设置子窗口的模态

①setSize(int width, int height);
②setLocation(int x, int y);
③setBounds(int x, int y, int width, int height);
④setVisible(boolean b);//基本必写
⑤setDefaultCloseOperation(int opreation);
通常作如下写法,表示点击子窗口的关闭按钮时,响应操作为隐藏子窗口,释放它占有的其它资源。Swing中使用JDialog用来被弹出,默认就存在关闭方法,请勿自己写࿰

javaGUI图形界面 public class login extends JFrame { private JComboBox nameJComboBox; private JPanel userJPanel; private JLabel pictureJLabel; private JButton okJButton,cancelJButton; private JLabel nameJLabel,passwordJLabel,note; private JPasswordField passwordJPasswordField; private String name1; private String password1; private String user; private ImageIcon myImageIcon; public login( ) { createUserInterface(); // 调用创建用户界面方法 } private void createUserInterface() { Container contentPane = getContentPane(); contentPane.setLayout( null ); userJPanel = new JPanel(); userJPanel.setBounds( 35, 120, 300, 96 ); userJPanel.setBorder(BorderFactory.createEtchedBorder() ); //显示一圈边儿 userJPanel.setLayout( null ); contentPane.add( userJPanel ); nameJComboBox = new JComboBox(); nameJComboBox.setBounds( 100, 12, 170, 25 ); nameJComboBox.addItem( "admin" ); nameJComboBox.addItem( "aloie" ); nameJComboBox.setSelectedIndex( 0 ); nameJComboBox.setEditable(true); userJPanel.add( nameJComboBox ); pictureJLabel=new JLabel(); pictureJLabel.setBounds(45,0,380,118); pictureJLabel.setIcon(new ImageIcon("pic.gif")); contentPane.add(pictureJLabel); nameJLabel=new JLabel("姓 名:"); nameJLabel.setBounds(20,12,80,25); userJPanel.add(nameJLabel); passwordJPasswordField=new JPasswordField(); passwordJPasswordField.setBounds(100,60,170,25); userJPanel.add(passwordJPasswordField); passwordJLabel=new JLabel("密 码:"); passwordJLabel.setBounds(20,60,80,25); userJPanel.add(passwordJLabel); note=new JLabel("密码与用户名相同"); note.setBounds(0,295,180,25); add(note); okJButton=new JButton("登 陆"); okJButton.setBounds(60,250,80,25); contentPane.add(okJButton); okJButton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent event) { okJButtonActionPerformed(event); } } ); cancelJButton=new JButton("取 消"); cancelJButton.setBounds(210,250,80,25); contentPane.add(cancelJButton); cancelJButton.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent event ) { System.exit(0); //退出登陆 } } ); setTitle( "登陆窗口" ); setSize( 380, 350 ); setResizable( false ); //将最大化按钮设置为不可用 } private void okJButtonActionPerformed( ActionEvent event ) { //okJButton响应事件,检查用户名和密码的匹配 name1= nameJComboBox.getSelectedItem().toString(); if (name1.equals("admin") ) { if (passwordJPasswordField.getText().equals("admin")) { showNewWindow(); setVisible( false); } else { JOptionPane.showMessageDialog( this,"密码错误,拒绝登陆", "密码错误 !", JOptionPane.ERROR_MESSAGE ); } } else if (name1.equals("aloie")) { if ( passwordJPasswordField.getText().equals("aloie") ) { showNewWindow(); setVisible(false); } else { JOptionPane.showMessageDialog( this,"密码错误,拒绝登陆", "密码错误 !", JOptionPane.ERROR_MESSAGE ); } } } public void showNewWindow() { JFrame jf=new JFrame("main Frame"); jf.setSize(500,400); jf.setVisible(true); jf.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } public static void main( String[] args ) { JFrame.setDefaultLookAndFeelDecorated(true); login mylogin = new login( ); mylogin.setVisible( true ); mylogin.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值