JAVA图形界面(GUI)

前面的博客中,我们写的程序都属于控制台程序,从这一篇开始,将为大家介绍如何编写GUI程序,GUI意思是图形读者界面,比如我们用的QQ就属于GUI程序。

抽象工具集(AWT)和Swing

JAVA GUI基本类库位于java.awt 包中,这个包称为抽象窗口工具箱(Abstract Window Toolkit,AWT)。AWT中包含了很多图形界面编程的类。它包括用来容纳其它组件的容器类、用来控制进行组件布局的各种布局管理器、用来监听程序与读者进行交互的事件监听器,还有一套绘图机制,用来维护图形界面等。
AWT的特点是简单、稳定、重量级(依赖本地平台),AWT所涉及的类一般在java.awt包及其子包中。AWT主要类的继承关系如图所示:
这里写图片描述
如果用AWT组件设计出来的图形界面,读者会发现窗口中的组件,如按钮等都是与操作系统相对应的组件是基本一致的,所以利用AWT设计的程序在不同操作系统中运行的效果是不一致的。AWT实现中对平台是有依赖的,它的相关组件是重量级,不够灵活。如果平台上没有相关组件,则其应用就没办法实现。
Swing是基于AWT的,它除了顶级组件是重量级的,而其他的组件例如按钮、文本框等还有布局都与操作系统无关,是轻量级的。Swing保证了可移植性,完全用java语言编写,和AWT相比,Swing提供了更多的组件,引入了更多的新的特性和能力。Swing增强了AWT中组件的功能,这些增强的组件命名通常在AWT组件名前加一个“J”字母。
Swing的类结构如下:

java.lang.Object
+–java.awt.Component
  +–java.awt.Container
   +–javax.swing.JComponent
  
Swing没有完全放弃AWT,而是基于AWT之上提供了更强大的读者界面组件。而且Swing图形组件使用AWT事件类和监听接口处理事件响应。AWT和Swing组件混合使用可能产生一些无法预料的错误,同一个程序不建议混合使用。

Swing例子

下面这个例子只是演示一下Swing的运行效果。

import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class SwingDemo extends JFrame
{
   private DrawPanel drawPanel = null;

   public SwingDemo()
   {
      super("SwingDemo");
      drawPanel = new DrawPanel();
      add(drawPanel);

      setSize(300, 200);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
   }

   public static void main(String[] args)
   {
      new SwingDemo().setVisible(true);
   }
}

class DrawPanel extends JPanel
{
   @Override
   public void paint(Graphics g)
   {
      super.paint(g);
      g.drawString("Hello Swing", 10, 50);
   }
}

运行结果:

这里写图片描述

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 ); } }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值