八运会
级别: 论坛版主
只看楼主 | | | 0 发表于:2007-02-14 18:00

0 【学习笔记】 java提高篇   图形用户界面组件(第一部分) 【草拟】

目标:


理解图形用户界面的设计原则

学会构建图形用户界面

理解包含图形用户界面组件和事件处理类,还有接口的包;

掌握建立和使用按钮、标签、列表、文本区域和面板的方法

学会处理鼠标事件和键盘事件;

理解并掌握布局管理器(这里我们先将3个基础的布局管理器)




我每个章节都会列出相关的知识点,看看自己和大家的学习是不是有残缺,

我因为上班的关系,所以知识点是残缺的,因此在此自我检测,自我学习
人没有牺牲的话就什么都得不到,为了得到什么东西,就必须付出同等的代价,这就是炼金术的‘等价交换’原则!那时我们坚信那就是世界的真实!”
八运会
级别: 论坛版主
只看该作者 | | | 1 发表于:2007-02-14 18:05

GUI 图形用户界面

我们来列举几个常用的GUI组件:

JLabel                     (标签)
JTextField                 (文本框)
JButton                   (按钮)    
JCheckBox                 (复选框)  
JComboBox               (组合框)
JList                       (列表)
JPanel                     (面板)
[ 此贴被八运会在2007-02-14 18:17重新编辑 ]
人没有牺牲的话就什么都得不到,为了得到什么东西,就必须付出同等的代价,这就是炼金术的‘等价交换’原则!那时我们坚信那就是世界的真实!”
八运会
级别: 论坛版主
只看该作者 | | | 2 发表于:2007-02-14 18:16

Swing 和 AWT   的 区别

AWT (Abstract   Windowing Toolkit   抽象窗口工具箱)

当含有AWT GUI 的 java的程序 在不同运行平台执行的时候,在每个平台上GUI组件显示会有所不同。
在苹果机界面可能是这样,在IBM的UNIX上可能是那样;
而且AWT组件的用户交互方式有时也会不同   (确定按钮和取消按钮的相对位置可能会不一样)

Swing组件允许编程人员在跨平台的时候制定统一的界面和风格。

Swing组件的灵活性比AWT组件的灵活性要高。



Swing组件(JComponent的子类 )包括一下功能:

1.“外观和风格”可以定制。
2. 快捷键可以通过键盘直接访问GUI组件。
3.一些相同动作的GUI组件具有相同的事件处理功能。
4.当鼠标停留在某个GUI组件上时,可以支持显示简单描述。
5.支持界面本地化,适合不同国家和不同语言和不同文化习惯。
人没有牺牲的话就什么都得不到,为了得到什么东西,就必须付出同等的代价,这就是炼金术的‘等价交换’原则!那时我们坚信那就是世界的真实!”
八运会
级别: 论坛版主
只看该作者 | | | 3 发表于:2007-02-14 18:41

JLabel   标签

在GUI上显示文本或者提示信息的方法就是使用标签。标签就是JLabel。

JLabel 一般只显示一行只读文本(一旦文字确定,就无法修改),一个图像或者带图像的文本。


以下是如何使用JLabel的源代码:

让大家有一个很明了的认识

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

public class LabelTest extends JFrame
{
   private JLabel label1,label2,label3;   //   初始化3个标签

   public LabelTest()
   {
       super( " Sinbad Testing JLabel! " );   //生成标题

       Container container = getContentPane();   //定义容器
       container.setLayout( new FlowLayout() );

       
                    //标签一的定义
                    label1 = new JLabel( " Label with text (只显示文本的标签) " );
       label1.setToolTipText( "This is Label1   ^_^" );
       container.add( label1 );


                    // 图标的定义
       Icon icon = new ImageIcon( "2.jpg" ); //注意文件名间不要有空格
       label2 = new JLabel ( " Label with text and Icon ", icon, SwingConstants.LEFT );
       label2.setToolTipText ( "This is Label2 :P ");
       container.add( label2 );


                    //定义标签三
       label3 = new JLabel();
       label3.setText( "Label with icon and text at bottom ");
       label3.setIcon( icon );
       label3.setHorizontalTextPosition( SwingConstants.CENTER );
       label3.setVerticalTextPosition ( SwingConstants.BOTTOM);
       label3.setToolTipText ( " This is Label3 @_@ ");
       container.add ( label3 );



                      //布局
       setSize( 275, 170 );
       setVisible( true );

   }
   public static void main(String args[] )
   {
       LabelTest application = new LabelTest();

       application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   }
}
[ 此贴被八运会在2007-02-14 19:21重新编辑 ]
人没有牺牲的话就什么都得不到,为了得到什么东西,就必须付出同等的代价,这就是炼金术的‘等价交换’原则!那时我们坚信那就是世界的真实!”
八运会
级别: 论坛版主
只看该作者 | | | 4 发表于:2007-02-14 19:22

显示效果图

描述:显示效果图
图片:
描述:显示效果图(组件分布示意)
图片:
描述:组件一提示
图片:
描述:组件四提示
图片:
以上是组件生成的图像截图,以及为了一目了然,我对组件的划分,

还有屏幕截图(可惜鼠标看不见)[p:1]
人没有牺牲的话就什么都得不到,为了得到什么东西,就必须付出同等的代价,这就是炼金术的‘等价交换’原则!那时我们坚信那就是世界的真实!”
八运会
级别: 论坛版主
只看该作者 | | | 5 发表于:2007-02-14 19:34

JLabel 总结

setToolTipText方法

是通过JComponent类继承下来的。当鼠标悬停在所在区域时,鼠标会自动显示相关提示。
心得:在软件开发的时候,可是使用这个技巧,让用户使用图形用户界面的时候给于合适的提示。加大界面互动性


在Swing组件的构造函数中,Icon是作为参数传递进去的。ImageIcon类支持图片格式:.jpg   .png   .gif


setHorizontalAlignment方法和 setVerticalAlignment方法用来设置标签的水平垂直对齐位置。
人没有牺牲的话就什么都得不到,为了得到什么东西,就必须付出同等的代价,这就是炼金术的‘等价交换’原则!那时我们坚信那就是世界的真实!”
八运会
级别: 论坛版主
只看该作者 | | | 6 发表于:2007-02-14 19:40

JTextField 和 JPasswordField

JTextField 和 JPasswordField 只有一行, 他们接受来自键盘的输入或输出显示信息。

在JPasswordField中,输入的字符是加密的(变成星号);

注意 JTextField 和 JPasswordField 拼写的时候 F   要大写!!!

下面是有关JTextField 和 JPasswordField 使用的源代码

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

public class TextFieldTest extends JFrame
{
   private JTextField textField1,textField2,textField3;
   private JPasswordField passwordField;

   public TextFieldTest()
   {
       super ( " Sinbad Testing JTextField and JPasswordField " );

       Container container = getContentPane();
       container.setLayout( new FlowLayout() );

       textField1 = new JTextField( 10 );
       container.add( textField1 );

       textField2 = new JTextField( "Enter the Text here");
       container.add( textField2 );

       textField3 = new JTextField ( "Uneditable TextField(不可编辑状态)",20);
       textField3.setEditable( false );
       container.add( textField3 );

       passwordField = new JPasswordField (" Hiden Text ");
       container.add ( passwordField );

       

       TextFieldHandler handler = new TextFieldHandler();
       textField1.addActionListener( handler );
       textField2.addActionListener(handler);
       textField3.addActionListener(handler);
       passwordField.addActionListener( handler);

       setSize( 325,100 );
       setVisible( true );
   }

   public static void main( String args[] )
   {
       TextFieldTest application = new TextFieldTest();

       application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   }

   private class TextFieldHandler implements ActionListener
   {
       public void actionPerformed (ActionEvent event)
       {
           String string = "";

           if ( event.getSource() == textField1 )
           {
               string = "TextField1: " + event.getActionCommand();
           }
           if ( event.getSource() == textField2 )
           {
               string = "TextField2: " + event.getActionCommand();
           }
           if ( event.getSource() == textField3 )
           {
               string = "TextField3: " + event.getActionCommand();
           }
           else if ( event.getSource() == passwordField )
           {
               JPasswordField pwd = (JPasswordField)event.getSource();
               string = "passwordField: " + new String(passwordField.getPassword());
           }


           JOptionPane.showMessageDialog(null,string);
       }
   }
}
[ 此贴被八运会在2007-02-14 20:05重新编辑 ]
人没有牺牲的话就什么都得不到,为了得到什么东西,就必须付出同等的代价,这就是炼金术的‘等价交换’原则!那时我们坚信那就是世界的真实!”
八运会
级别: 论坛版主
只看该作者 | | | 7 发表于:2007-02-14 20:06

显示效果图

描述:JTextField
图片:
描述:JTextField分布图
图片:
显示效果如下:
人没有牺牲的话就什么都得不到,为了得到什么东西,就必须付出同等的代价,这就是炼金术的‘等价交换’原则!那时我们坚信那就是世界的真实!”
八运会
级别: 论坛版主
只看该作者 | | | 8 发表于:2007-02-14 20:14

JTextField 和 JPasswordField 总结

如果不设置 textField1 = new JTextField( 10 );

textField1的文本输入框长度不会是10,会是很短的一个

也可以用   textField2 = new JTextField( "Enter the Text here");

这样本文输入框中出现的时候就是有文字的;

还可以使用 setEditable( false )方法,

设置文本框的是否可编写状态。

用 event.getSource() == ??来捕获当前焦点的位置。
人没有牺牲的话就什么都得不到,为了得到什么东西,就必须付出同等的代价,这就是炼金术的‘等价交换’原则!那时我们坚信那就是世界的真实!”
jowen
级别: 新手上路
只看该作者 | | | 9 发表于:2007-05-10 20:39

恩!!!
能多就好!!!