鱼C论坛

 找回密码
 立即注册

自我敦促Java学习末章

已有 381 次阅读2015-3-31 10:51 |个人分类:java学习

第十三章 图形界面

一、ATWSwing简介

(1)AWT简介

 AWT:Abstract Windowing Toolkit抽象窗口工具包,一般调用原生代码调用操作系统的图形功能实现图形界面的显示。

组件是Java图形用户界面最基本的组成元素

组件是一个以图形化方式显示在屏幕上且在需要时和用户进行交互的对象。

容器是可以容纳其他容器和组件的组件。

其中的Frame类可以产生一个带有标题及边框的图形界面窗体,是一个容器,可以容纳其他容器或者组件,使用该代码产生的窗口风格是使用的操作系统自身的窗口风格。

import java.awt.*;

 

public class TestFrame {

public static void main(String[] args)

{

Frame f = new Frame("AWT 窗口示例");

f.setSize(100,100);

f.setVisible(true);

}

 

}

(2)Swing简介

   GUI开发工具集,构筑与AWT之上的GUI组件,提供了更多的组件,提供了更多的性能。

import javax.swing.*;

 

public class TestSwing {

public static void main(String[] args)

{

JFrame f = new JFrame("Swing window example");

f.setSize(500, 300);

f.setVisible(true);

}

 

}(这个代码显示出来的窗口按窗口的关闭键可以将窗口关闭,上面那个不行,但是窗口关闭不等于程序终止)

 

import javax.swing.*;

 

public class TestSwing {

public static void main(String[] args)

{

JFrame f = new JFrame("Swing window example");

//try

//{

UIManager.getSystemLookAndFeelClassName();//UIManager的方法可以对窗口风格进行操作,如果使用UIManager.getLookAndFeel("com.sum.java.swing.plaf.motif.MotifLookAndFeel就会需要被注释的try and catch

// }

/* catch(ClassNotFoundException cnf)

{

cnf.printStackTrace(System.err);

}

catch(UnsupportedLookAndFeelException ula)

{

ula.printStackTrace(System.err);

}

catch( IllegalAccessException iae)

{

iae.printStackTrace(System.err);

}

catch( InstantiationException ie)

{

ie.printStackTrace(System.err);

}*/

f.setSize(500, 300);

f.setVisible(true);

}

}

 

 

二、Swing容器及组件

(1)Swing容器---JFrame,JPanel

  import javax.swing.*;

 

public class TestJFrameAndPanel extends JFrame

{

public TestJFrameAndPanel()

{

super("英汉电子词典");

setSize(300,400);

setCtrl();//调用方法

}

public void setCtrl()

{

JPanel pane = new JPanel();//产生一个版面的实例

pane.setSize(300,100);//设定版面大小

add(pane,"North");//将面板添加到窗体之中,参数North表明要在窗体上部。

}

    public static void main(String[] args)

     {

     TestJFrameAndPanel tfa = new TestJFrameAndPanel();

     tfa.setVisible(true);

    

    }

}

 

(2)Swing组件

英文名

中文名

JLable

标签

JTextField

文本框

JButton

按钮

JTextArea

文本域

1.JLable

通常用于显示一段提示性的信息或图标。

2.可以用JLable构造器来进行,也可以用JLable方法。

构造器:

JLable()

JLable(Icon image)

JLable(Icon image,int horizontalAlignment)

JLable(String text)

JLable(String text, int horizontalAlignment)

JLable(String text, Icon icon, int horizontalAlignment)

Image:表示要在标签中显示的图片

text表示要在标签上显示的文字

horizontalAlignment表示标签在水平方向上的对齐方式,能够指定的值是SwingConstants中的常量LEFT,CENTER,RIGHT,LEADING,TRAILING

Icon(是一个接口)ImageIcon(Icon一个常用的实现类)都在包 javax.swing

import javax.swing.*;

 

public class TestJLable {

public static void main(String[] args)

{

JFrame f = new JFrame();

f.setSize(400, 240);

JLabel lbll = new JLabel("加油,我亲爱的庄~");

f.add(lbll,"North");

ImageIcon icon = new ImageIcon("F:/图/CrazyPudding/Java1.jpg");

JLabel lbl2 = new JLabel(icon);

f.add(lbl2,"Center");

JLabel lbl3 = new JLabel("我爱你~",icon,SwingConstants.RIGHT);

f.add(lbl3,"South");

f.setVisible(true);

}

 

}

3.JTextField

提供编辑单行文本的功能.

方法

功能

setColumns

设定它的列数

setHorizontalAlignment

设定字体

setFont

设定文本的水平对齐方式

getText

可以取得当前对象中的文字,最终要的方法,继承于JTextComponent

4.JButton

可以显示一个按钮,按钮上可以显示指定的文字或图标,或不显示。最常用的功能是当用户单击它时执行一定的功能,完成特定的任务

构造器:

JButton()

JButton(Action a)

JButton(String text)

JButton(String text,Icon icon)

Action 类型的参数表明要通过Action来配置按钮,并可以一定程度上的控制

text 表明在按钮上显示的文字

icon 表明在按钮上显示的图标

在不指定按钮大小的情况下,按钮将尽可能地填充它所在的区域。

 

import javax.swing.*;

 

public class TestButton {

public static void main(String[] args)

{

JFrame f = new JFrame("testing button");

f.setSize(400,200);

JButton bt1 = new JButton("comparing to the pain of regret,i prefer the pain of hardworking");

f.add(bt1,"North");

ImageIcon icon = new ImageIcon("F:/图/CrazyPudding/Java1.jpg");

JButton bt2 = new JButton(icon);

f.add(bt2,"Center");

JButton bt3 = new JButton("i love my family",icon);

f.add(bt3, "South");

f.setVisible(true);

}

 

}

5.JTextArea

    提供显示和编辑多行纯文本的功能,在需要的时候可以通过滚动条来移动其中可以显示的出来的部分内容。

在产生JTextArea的时候,可以指定这个实例的行数和列数,不过这里指定的行数和列数通常只是一个首选项,会随包容它的容器以及输入的文本进行自动调整。

import javax.swing.*;

 

public class TestJFrameAndPanel extends JFrame

{

public TestJFrameAndPanel()

{

super("英汉电子词典");

setSize(300,400);

setCtrl();

}

public void setCtrl()

{

JPanel pane = new JPanel();

pane.setSize(400,100);

add(pane,"North");

JLabel lb = new JLabel("eglish word");

pane.add(lb);//按照加入的顺序从左至右,貌似

JTextField tf = new JTextField(20);

pane.add(tf);

JButton bt = new JButton("search");

pane.add(bt);

JTextArea ta = new JTextArea();

add(ta,"Center");//这里为什么可以直接add?

}

    public static void main(String[] args)

     {

     TestJFrameAndPanel tfa = new TestJFrameAndPanel();

     tfa.setVisible(true);

    

    }

}

(3)其他容器和组件简介

1. JScrollPane

        提供滚动条。

import javax.swing.*;

import java.awt.*;

 

public class TestJScrollPane {

public static void main(String[] args)

{

JFrame f = new JFrame("testing JScrollPane");

f.setSize(400,200);

JPanel p = new JPanel();

p.setLayout(new GridLayout(10,10));//P指定布局管理器

for(int i =0; i<100;i++)

{

p.add(new JButton("按钮"+i));p中添加100个按钮

}

int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;//表示垂直滚动条只有在需要时显示

int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;

JScrollPane jsp = new JScrollPane(p,v,h);//一般不把组件添加到JScrollPane中,直接添加的话需要使用 JViewPort

f.add(jsp);

f.setVisible(true);

}

 

}  

ScrollPaneConstants接口中常量

意思(水平方向的常量名就是把垂直的vertical换成horizontal,意思和英文的对应)

VERTICAL_SCROLLBAR_AS_NEED

滚动条在需要的时候使用

VERTCAL_SCROLLBAR_NEVER

从不出现

VERTICAL_SCROLLBAR_ALWAYS

一直出现

 

2. JList

import javax.swing.*;

 

public class TestList {

public static void main(String[] args)

{

JFrame f = new JFrame("testing list");

f.setSize(150,130);

String[] data = {"California","New York","Seattle"};

JList ls = new JList(data);

f.add(ls);

f.setVisible(true);

}

}

setSelectionMode 可以通过一个整型参数来设定列表中的选项可以选择多少个

该整型参数可以是ListSelectionModel中的常量

常量名

意思

SINGLE_SELECTION

允许选择列表中的一项

SINGLE_INTERVAL_SELECTION

允许选择多项,但是这些多项必须是连续的

MULTIPLE_INTERVAL_SELECTION

允许选择多项,但是多项可以不是连续的

取得列表中的选项

方法getSelccedIndex  在列表只允许选择单项时可以通过它获得选中项的索引(有多个时,返回索引最小的)

getSelectedIndices 在列表允许多选时,返回一个int类型的数组,数组将按照升序的方式包含所有选中项的索引

getSelectedValue 获得选中项的值(因为只能返回(Object)一个所以在有多个的情况下返回索引最小的值)

getSelectedValues 获得多个选中的值(返回Object数组)

 

3. JComboBox

import java.awt.*;

import javax.swing.*;

 

public class TestJComboBox {

public static void main(String[] args)

{

JFrame f = new JFrame("testing JComeBox");

f.setLayout(new FlowLayout());

f.setSize(400,500);

String[] data = {"California","New York","Seattle"};

JComboBox cb = new JComboBox(data);

        f.add(cb);

        

        f.setVisible(true);

}

 

}

该组件提供方法 setEditable 可以设定当前JComboBox是否支持编辑功能

取得JComboBox对象的选定值的操作与JList是类似的,相关的方法有getSelectedIndex,getSelectedItem,getSelectedObjects

 

4. JCheckBox

复选框是一个可以显示被选中或者取消选中的图形组件。每一个复选框是一个独立的对象,相互之间不影响,可以多选。

在构建JCheckBox实例的时候,可以通过构造器参数指定复选框显示的文本内容以及指定初始状态(选择或者不选择)

如果希望显示图标,可以使用带有Icon参数的构造器来构建其对象

import java.awt.*;

import javax.swing.*;

 

public class TestJCheckBox {

public static void main(String[] args)

{

JFrame f = new JFrame("testing JCheckBox...");

f.setLayout(new FlowLayout());

f.setSize(300,100);

JCheckBox jb1 = new JCheckBox("上海",true);//这个调用的是可以输入文本和指定状态的构造器

f.add(jb1);

JCheckBox jb2 = new JCheckBox("广东");

f.add(jb2);

JCheckBox jb3 = new JCheckBox("北京");

f.add(jb3);

f.setVisible(true);

}

 

}

5. JRadioButton

只能选一个

import java.awt.*;

import javax.swing.*;

 

public class TestJRadioButton {

public static void main(String[] args)

{

JFrame f = new JFrame("Testing JRadioButton....");

f.setLayout(new FlowLayout());

f.setSize(400,500);

ButtonGroup bg = new ButtonGroup();

JRadioButton rb = new JRadioButton("California");

bg.add(rb);

f.add(rb);

JRadioButton rb1 = new JRadioButton("New York");

bg.add(rb1);

f.add(rb1);

JRadioButton rb2 = new JRadioButton("Seattle");

bg.add(rb2);

f.add(rb2);

f.setVisible(true);

}

 

}

6. JOptionPane

import java.awt.*;

import javax.swing.*;

 

public class TestJOptinPane {

public static void main(String[] args)

{

JFrame f = new JFrame("TESTING JOPTIONPANE...");

//f.setLayout(new FlowLayout());

f.setSize(400,500);

f.setVisible(true);

int ret;

ret = JOptionPane.showConfirmDialog(null"您确认要退出程序么?","确认对话框示例",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);

    System.out.println(ret);

    

    String inStr;

    inStr = JOptionPane.showInputDialog(null,"请输入你的姓名","输入对话框显示",JOptionPane.QUESTION_MESSAGE);

    System.out.println(inStr);

    

    JOptionPane.showMessageDialog(null,"程序出现异常","消息框显示",JOptionPane.ERROR_MESSAGE);

    

}

 

}

 

图标常量

对应的图标

ERROR_MASSAGE

 

INFORMATION_MESSAGE

 

WARNING_MESSAGE

 

QUESTION_MESSAGE

 

PLAIN_MESSAGE

无图标

按钮常量

 

DEFAULT_OPTION

 

YES_NO_OPTION

 

YES_NO_CANCEL_OPTION

 

OK_CANCEL_OPTION

 

对话框返回值常量

含义

YES_OPTION

通过单击“是”按钮关闭对话框

NO_OPTION

通过单击“否”按钮关闭对话框

CANCEL_OPTION

通过单击“取消”按钮关闭对话框

OK_OPTION

通过单击“确定”按钮关闭对话框

CLOSED_OPTION

通过单击右上角的“关闭”按钮关闭对话框

 

三、Java事件模型

(1)事件处理机制简介

事件、事件源、事件处理器

事件:用户对图形用户界面上的图形元素做的操作

事件源:是某个事件发生的来源;例如用户点击了某个按钮,那么产生单击按钮这个事件的事件源便是这个按钮

事件处理器:当事件发生后对这个事件进行处理的一个Java方法。

包含事件处理器的类叫做事件监听器

 

(2)事件监听器

     事件监听器是完成事件响应和处理的核心部分。

     如果希望在单击右上角“关闭”按钮时结束程序,首先要实现接收窗口时间的侦听器接口WindowListener,同时在实现WindowListener中的windowClosing方法时执行退出程序的指令。

监听器一个是监听按钮的行为,一个是监听窗口的按钮(放大缩小关闭什么的)

代码另查

 

(3)事件适配器

 适配器是针对接口定义的实现类,为对应接口中的所有方法提供了一个空的实现。如果只是扩展对应接口的适配器的话,就可以直接重写想实现的方法而不管其他方法,这样可以节省代码。(奇怪的是当初设置接口就是为了在实现多态的同时还可以扩展类,现在又变成间接的扩展接口了

主要的适配器

所实现的接口

ComponentAdapter

ComponentListener,EventListener

ContainerAdapter

ContainerListener,EventListener

HierarchyBoundsAdapter

HierarchyBoundsListener,EventListener

KeyAdapter

EventListener,KeyListener

MouseAdapter

EventListener,MouseListener,MouseMotionListener,MouseWheelListener

MouseMotionAdapter

EventListener,MouseMotionListener

WindowAdapter

EventListener,WindowFocusListener,WindowStateListener,WindowListener

FocusAdapter

EventListener,FocusListener

 

四、布局管理器

(1)布局管理器概述

布局管理器均在java.awt包中,使用布局管理器使得组件的布局趋于自动化。

(2)BorderLayout

是默认的布局管理器,以方向为依据,将容器划分为东西南北中五个部分。

import java.awt.*;

 

import javax.swing.*;

 

public class TestBorderLayout {

public static void main(String[] args)

{

JFrame jf = new JFrame("Testing BorderLayout");

jf.setLayout(new BorderLayout());//因为是默认的,所以删掉这句话也不会有什么影响

jf.setSize(120,120);

jf.add(new Button("east"),"East");//如果不设置方位,就默认为放在中间,多个默认就都放在中间,先定义的被覆盖

jf.add(new Button("west"),"West");

jf.add(new Button("north"),"North");

jf.add(new Button("south"),"South");

jf.add(new Button("meddle"),"Center");//如果将这行注释掉别的位置的按钮不会来填补这一区域,但是其他任意按钮(可以多个按钮被同时注释,但是多个里面不能包括中间这个)被注释掉都有其他的按钮来填补空白

jf.setVisible(true);

}

 

}

 

(3)FlowLayout

是流式布局管理器,是从左到右,从上到下的顺序依次进行排列,当容器大小发生改变时,容器里面组件的位置也会发生改变

import java.awt.*;

import javax.swing.*;

 

public class TestFlowLayout {

public static void main(String[] args)

{

JFrame f = new JFrame("Testing FlowLayout");

f.setLayout(new FlowLayout());

f.setSize(100,200);

f.add(new Button("1"));

f.add(new Button("2"));

f.add(new Button("3"));

f.add(new Button("4"));

f.add(new Button("5"));

f.add(new Button("6"));

f.add(new Button("7"));

f.add(new Button("8"));

f.add(new Button("9"));

f.setVisible(true);

}

 

}

 

(4)GridLayout

以网格作为布局的基本框架,将容器划分为若干网格,然后将组件从左到右从上到下,依次将组件添加到网格中

import java.awt.*;

import javax.swing.*;

 

public class TestGridLayout {

public static void main(String[] args)

{

JFrame f = new JFrame("Testing FlowLayout");

f.setLayout(new GridLayout(2,8));//第一个参数是行,第二个参数是列,也可以不输入参数,则默认为一行,此外输入参数并不是所有的时候都会按照参执行

f.setSize(100,200);

f.add(new Button("1"));

f.add(new Button("2"));

f.add(new Button("3"));

f.add(new Button("4"));

f.add(new Button("5"));

f.add(new Button("6"));

f.add(new Button("7"));

f.add(new Button("8"));

f.add(new Button("9"));

f.setVisible(true);

}

}

 

(5)其他

CardLayout  优点,在有限空间包容更多的组件

GridBagLayout 不需要组件大小相同便可以将组件垂直、水平或沿它们的基线对齐。

 

五、为窗口添加菜单

(1)Java菜单简述

JMenuBar 包括 JMenu; JMenu 包括 JMenuItem

JMenuBar的方法

方法

功能

 

 

 

 

 

 

 

JMenu的方法

方法

功能

add

添加JMenuItem对象(该方法有5个重载方法,也可以将String ,Action, Component作为构造参数)

insert

将需要的菜单项组件添加到JMenu

addSeparator/insertSeparator

为菜单添加分隔

set

对菜单属性进行操作

get

取得菜单属性的值

isSelected

判断菜单项是否处于选中状态

isMenuComponent

判断参数中指定的组件是否存在于当前的JMune对象之中

remove

对菜单项或者组件进行删除

JMenuItem的重载器

构造器

功能

JMnuItem()

创建不带文本和图标的JMnuItem

JMnuItem(Action a)

创建从指定的Action获取属性的菜单项

JMnuItem(Icon icon)

创建带有指定图标的JMnuItem

JMnuItem(String text)

创建带有指定文本的JMnuItem

JMnuItem(String text, Icon icon)

创建带有指定文本和图标的JMnuItem

JMnuItem(String text, int mnemonic)

创建带有指定文本和键盘助记符的JMnuItem

 

(2)为英汉电子词典添加菜单

 

添加菜单的代码另查


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-17 13:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部