黑马程序员——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图形界面开发
点击左按钮:
java图形界面开发
点击有按钮:
java图形界面开发
- 黑马程序员——Java基础---图形化界面编程
- 黑马程序员——Java基础---图形化界面
- 黑马程序员——Java基础--GUI图形化界面
- 黑马程序员—java基础_GUI图形化界面
- 黑马程序员—JAVA基础—GUI(图形化界面编程)
- 黑马程序员--------------java基础----------------- 图形化界面
- 黑马程序员——图形化界面编程GUI
- 黑马程序员—java基础—GUI图形用户界面编程
- 黑马程序员——Java基础--GUI(图形化界面)
- 黑马程序员:Java基础总结----GUI图形化界面
- 黑马程序员----java基础图形化界面GUI
- 黑马程序员—Java图形化界面 GUI
- 黑马程序员——图形化界面
- 黑马程序员——图形化界面
- 黑马程序员—GUI(图形化界面)
- 黑马程序员 图形化界面编程
- 黑马程序员————Java基础日常笔记---(图形化用户界面)GUI
- 黑马程序员-Java-图形化界面-day22
- HDU 1452 Happy 2004 (唯一分解定理 + 求等比数列前n项和)
- Fragment生命周期和使用小结
- jQuery 插件autocomplete 应用
- Android声明和使用权限
- poj2262
- 黑马程序员——Java基础---图形化界面编程
- Arrays.asList(T... a)分析
- 【POJ 3321】 Apple Tree (dfs重标号设区间+树状数组求和)
- UITableView使用<1>之自定义UITableViewCell
- 文件传输基础——Java IO流
- ERROR 1045 (28000): Access denied for user 'hive'@'localhost' (using password: YES)
- 自动滚动的TextView
- CXF发送、接收消息超时设置
- zoj 2975 Kinds of Fuwas