JAVA--GUI

一.GUI的概念

图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。

图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务(简化了用户与计算机系统之间的交互过程)。与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。图形用户界面由窗口、下拉菜单、对话框及其相应的控制机制构成,在各种新式应用程序中都是标准化的,即相同的操作总是以同样的方式来完成,在图形用户界面,用户看到和操作的都是图形对象,应用的是计算机图形学的技术。

二.Swing和AWT

AWT是Java的一个基础GUI工具包,它提供了创建窗口,对话框,按钮,文本框等GUI的基本功能(Button,Canvas,checkbox)。而Swing是基于AWT构建的,提供了更多的GUI组件(JFrame,JButton,JLabel,JPanel,Jscrollpane)。

三.常用容器组件

GUI中的基本组成部分是组件,但组件不能独立显示出来,必须放在容器中才能显示出来。一个容器可以容纳多个组件。最常用的容器是JFrame(窗口)和JPanel(面板)。

3.1JFrame(javax.swing)

JFrame是一个顶级窗口,创建一个继承于JFrame的类,在构造函数中,设置窗口属性和添加各种组件,并将窗口设为可见,最后在main方法中创建对象,即可将窗口显示出来。

3.1.1JFrame的窗口属性设置方法

1.setTitle(String x):设置窗口标题

2.setSize(int x,int y):设置窗口大小

3.setLocation()int x,int y):设置窗口位置

4.setLocationRelativeTo(null):可将窗口放到屏幕中间

5.setResizable(boolean):是否可以调整窗口大小

6.setDefaultCloseOperation(JFrame.):设置窗口关闭时的操作

            (1.JFrame.EXIT_ON_CLOSE:退出程序

              (2.JFrame.HIDE_ON_CLOSE:隐藏窗口

7.add():添加组件到窗口

8.setVisible(boolean):设置窗口是否可见   

3.2JPanel(javax.swing)

JPanel是一个面板,可以将组件添加到上面,并对其进行布局

3.2.1JPanel的布局
3.2.1.1流式布局(JPanel的默认布局)

JPanel jPanel=new JPanel();

如图就为流式布局的样式,它是横向排列的

3.2.1.2边界布局

JPanel jPanel=new JPanel(new BorderLayout());

如图就为边界布局的样式,它会自动填充窗口,确保窗口一直的被填满的

3.2.1.3网格布局

JPanel jPanel=new JPanel(new GridLayout(2,2));

如图就为网格布局的样式,它会根据你给出的行列数形成网格区域

3.3JLabe(标签)

构造:new JLabel(" text ");(可有参可无参)

方法:setText("text"):创建文本(会将之前的文本覆盖掉)

           getText():得到文本

           setFont(new Font("宋体",Font.BOLD,18)):设置文本框字体

3.4JMenuBar(菜单)

构造:new JMenuBar()菜单栏    new JMenu("名称")菜单组件    new JMenultem("名称")菜单项名称

这个叫菜单组件

这个叫菜单项名称

方法:add(menu)向菜单栏中添加菜单组件

           add(menultem)向菜单组件添加菜单项组件

           setJMenuBar(menuBar)将菜单添加到面板上

3.5JTextField(单行文本)

构造:new JTextField(String text,int x)(可有参可无参,x表示长度)

方法:setText(“text”)设置文本框中的文字

           getText()获得文本框中的文字

           setEditable(boolean设置文本框是否可以编辑

           setColumns(20)设置长度

3.6JTextArea(多行文本框)

构造:new JTextArea(int x,int y)(可有参可无参)设置文本框行列大小

方法:setText("text")设置文本框的文本

           getText()获得文本框中的文字

           setFont(Font font)设置文本字体

           setLineWrap(boolean)是否自动换行,默认为false(如果需要滚动条,可以将文本框放入滚动窗格JScrallPane)

3.7JButton(按钮)

构造:new JButton("text")text表示按钮上的文字

方法:setEnabled(boolean)设置按钮是否可用

           setBackground(Color)设置按钮背景色

3.8JScrollPane(滚动窗格)

构造:JScrollPane pane=new JScrollPane(txtArea)可使txtArea文本框出现滚动条

3.9JOptionPane(对话框)

3.9.1showMessageDialog() 消息对话框
JOptionPane.showMessageDialog(null,"消息对话框");

JOptionPane.showMessageDialog(null,"消息对话框","错误",JOptionPane.ERROR_MESSAGE);

构造(一般为null,消息内容,对话框标题,提示类型)

提示类型有五种,如图,类型不同图标不同

ERROR_MWEEAGE 错误消息提示

INFORMATION_MESSAGE 信息提示

WARNING_MESSAGE 警告提示 

QUESTION_MESSAGE 问题提示

PLAIN_MESSAGE 简洁提示

3.9.2showConfirmDialog() 确认对话框
JOptionPane.showConfirmDialog(null,"确认对话框");

JOptionPane.showConfirmDialog(null,"11","22",JOptionPane.YES_NO_OPTION);

构造(一般为null,消息内容,对话框标题,消息类型)

它有四种消息类型,所显示的选项不同

DEFAULT_OPTION 默认选项

YES_NO_OPTION 是/否选项

YES_NO_CANCEL_OPTION 是/否/取消选项 

OK_CANCEL_OPTION 确认/取消

四.事件监听

一个事件源产生一个事件,该事件被送到监听器,监听器负责监听等待,直到收到一个事件,开始处理。

一般为按钮设置监听 (点击按钮就开始执行某一操作)

addActionListener(new ActionListener(){

    @Override public void

     actionPerformed(ActinEvent e){

           执行操作

      }

});

五.例子

下面是一个登录界面,为登录按钮添加监听,让其输入不能为空,否则就会提示弹框

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class JFame02 extends JFrame {


    public JFame02(){
        this.setTitle("欢迎登录");
        this.setSize(300,300);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setResizable(false);

        JPanel jPanel=new JPanel(new GridLayout(4,1));
        JPanel jPanel1=new JPanel(new FlowLayout());
        JLabel label1=new JLabel("欢迎登录");
        label1.setFont(new Font("楷体",Font.BOLD,20));
        jPanel1.add(label1);

        JPanel jPanel2=new JPanel(new FlowLayout());
        JLabel label2=new JLabel("账号:");
        jPanel2.add(label2);
        JTextField jTextField1=new JTextField(10);
        jPanel2.add(jTextField1);
        JPanel jPanel3=new JPanel(new FlowLayout());
        JLabel label3=new JLabel("密码:");
        jPanel3.add(label3);
        JTextField jTextField2=new JTextField(10);
        jPanel3.add(jTextField2);
        JPanel jPanel4=new JPanel(new FlowLayout());
        JButton j1=new JButton("登录");
        JButton j2=new JButton("注册");
        jPanel4.add(j1);
        jPanel4.add(j2);


        jPanel.add(jPanel1);
        jPanel.add(jPanel2);
        jPanel.add(jPanel3);
        jPanel.add(jPanel4);
        this.add(jPanel);
        this.setVisible(true);

        j1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String x=jTextField1.getText();
                String y=jTextField2.getText();
                 if(x.isEmpty() ||y.isEmpty()){
                    JOptionPane.showMessageDialog(null,"输入不能为空");
                    return;
                 }
                 new JFrame03();//打开新窗口
                 dispose();//释放当前窗口
            }
        });

    }


    public static void main(String[] args) {
        JFame02 jFame02=new JFame02();
    }
}

运行结果:

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、付费专栏及课程。

余额充值