黑马程序员——Java基础---图形化界面编程

来源:互联网 发布:unity3d 沙盒fps源码 编辑:程序博客网 时间:2024/05/29 17:34

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
随着Internet的飞速发展,Java技术也得到了越来越广泛的应用。而无论我们是采用J2SE、J2EE还是J2ME,GUI都是不能回避的问题。现在的应用软件越来越要求界面友好、功能强大而又使用简单。而众所周知,在Java中进行GUI设计相对于其跨平台、多线程等特性的实现要复杂和麻烦许多。这也是很多Java程序员抱怨的事情。但GUI已经成为程序发展的方向,所以我们也必须了解Java的GUI设计方法和特点。其实,采用Java提供的布局管理器接口和相应的布局管理类,我们也可以做出相当漂亮的界面来,当然实现起来肯定要比VB麻烦许多。本文试图通过自己的开发经历介绍一些具体的应用实例,希望能给那些曾经象我一样苦闷的Java痴迷者一些帮助。

  Java中的布局管理器

  2.1 为什么要使用布局

  在实际编程中,我们每设计一个窗体,都要往其中添加若干组件。为了管理好这些组件的布局,我们就需要使用布局管理器。比如说,设计一个简单的计算器,或一个文本编辑器等等。这些组件是让JVM 自己任意安排呢?还是按照一定的位置关系进行规范的安排呢?当然应该选择后者。将加入到容器的组件按照一定的顺序和规则放置,使之看起来更美观,这就是布局。在Java中,布局由布局管理器 (LayoutManager) 来管理。那么,我们在什么时候应该使用布局管理器?应选择哪种布局管理器?又该怎样使用布局管理器呢?

  如果你写的是GUI程序,在使用AWT/Swing组件时就不应硬性设置组件的大小和位置,而应该使用Java的布局管理器(LayoutManager)来设置和管理可视组件的大小和位置,否则就有可能造成布局混乱。不信,你可以新建一个Frame(或JFrame),通过setBounds()方法往其中添加几个Button(或JButton),一旦你将窗体拉大或缩小时,你会发现组件的排列完全不是按你所预想的那样。为了解决这个问题,即当窗体(或容器)缩放时,组件位置也随之合理调整,我们就需要使用布局管理器。

  为此,我们首先要知道Java的布局方式,Java提供的API中有些什么布局管理器,它们的布局特点是什么。

  2.2 Java的布局方式

  我们都知道,Java的GUI界面定义是由AWT类包和Swing类包来完成的。它在布局管理上采用了容器和布局管理分离的方案。也就是说,容器只管将其他组件放入其中,而不管这些组件是如何放置的。对于布局的管理交给专门的布局管理器类(LayoutManager)来完成。

  现在我们来看Java中布局管理器的具体实现。我们前面说过,Java中的容器类(Container),它们只管加入组件(Component),也就是说,它只使用自己的add()方法向自己内部加入组件。同时他记录这些加入其内部的组件的个数,可以通过container.getComponentCount()方法类获得组件的数目,通过container.getComponent(i)来获得相应组件的句柄。然后LayoutManager类就可以通过这些信息来实际布局其中的组件了。

  Java已经为我们提供了几个常用的布局管理器类,例如: FlowLayout、BorderLayout、GridLayout、GridBagLayout等。下面列表说明它们的布局特点:

  事实上,在大多数情况下,综合运用好这些布局管理器已可以满足需要。当然对于特殊的具体应用,我们可以通过实现LayoutManager或LayoutManager2接口来定义自己的布局管理器。下面我们通过几个实例来了解几个常用的布局管理器的使用方法。
JButton的主要方法包括:
主要使用的方法有:
//创建Button,并设置Button的图标
button1 = new JButton(“中间按钮不可用”,imageIcon1);
//设置Button的文本位置
button1.setVerticalTextPosition(JButton.CENTER);
button1.setHorizontalTextPosition(JButton.LEADING);
//设置Button的快捷键
button1.setMnemonic(KeyEvent.VK_D);
//设置Button的反馈消息,消息处理者通过这个标记来辨别是哪个按钮被点击
button1.setActionCommand(“disable”);
//为Button添加监听者
button1.addActionListener(this);
//设置Button的提示信息
button1.setToolTipText(“点击此按键,此按键和中间按键变为不可用,右边按键变为可用”);
//将Button添加到panel中
add(button1);
下面给出实例代码:

package components;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class JButtonTest extends JPanel implements ActionListener {

private static final long serialVersionUID = 1L;JButton button1,button2,button3;public JButtonTest() {   //创建button上的图标   ImageIcon imageIcon1 = createImage("images/right.gif");   ImageIcon imageIcon2 = createImage("images/middle.gif");   ImageIcon imageIcon3 = createImage("images/left.gif");   //创建Button,并设置Button的图标   button1 = new JButton("中间按钮不可用",imageIcon1);   //设置Button的文本位置   button1.setVerticalTextPosition(JButton.CENTER);   button1.setHorizontalTextPosition(JButton.LEADING);   //设置Button的快捷键   button1.setMnemonic(KeyEvent.VK_D);   //设置Button的反馈消息,消息处理者通过这个标记来辨别是哪个按钮被点击   button1.setActionCommand("disable");   //为Button添加监听者   button1.addActionListener(this);   //设置Button的提示信息   button1.setToolTipText("点击此按键,此按键和中间按键变为不可用,右边按键变为可用");   //将Button添加到panel中   add(button1);   //创建第二个Button   button2 = new JButton("中间按钮",imageIcon2);   button2.setVerticalTextPosition(JButton.CENTER);   button2.setHorizontalTextPosition(JButton.LEFT);   button2.setMnemonic(KeyEvent.VK_E);   button2.addActionListener(this);   button2.setToolTipText("点击此按键,没有任何操作");   add(button2);   //创建第三个Button   button3 = new JButton("中间按钮可用",imageIcon3);   button3.setVerticalTextPosition(JButton.CENTER);   button3.setHorizontalTextPosition(JButton.RIGHT);   button3.setMnemonic(KeyEvent.VK_R);   button3.setActionCommand("enable");   button3.addActionListener(this);   button3.setToolTipText("点击此按键,中间按钮和左按钮可用,本按钮不可用");   add(button3);}private ImageIcon createImage(String imageLocation) {   //加载图片   URL url = JButtonTest.class.getResource(imageLocation);   //如果图片存在,返回Icon   if(url != null)       return new ImageIcon(url);   return null;}@Overridepublic void actionPerformed(ActionEvent e) {   //disable为第一个按键被点击时的相应消息   if ("disable".equals(e.getActionCommand())) {       button1.setEnabled(false);       button2.setEnabled(false);       button3.setEnabled(true);   }else {       button1.setEnabled(true);       button2.setEnabled(true);       button3.setEnabled(false);   }}public static void createAndShowGUI(){   //创建一个frame   JFrame frame = new JFrame("按键测试");   //设置frame的关闭方式   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   //创建一个panel   JPanel panel = new JButtonTest();   //设置panel的透明性   panel.setOpaque(true);   //将panel添加到frame中   frame.setContentPane(panel);   //frame自动调整其大小,以便显示所有的空间   frame.pack();   //显示frame   frame.setVisible(true);}public static void main(String[] args) {   //开启界面线程   SwingUtilities.invokeLater(new Runnable() {       @Override       public void run() {          createAndShowGUI();       }   });}

}

执行结果:
java图形界面开发 JButton的使用方法(第三章)

点击左按钮:
java图形界面开发 JButton的使用方法(第三章)

点击有按钮:

java图形界面开发 JButton的使用方法(第三章)

0 0
原创粉丝点击