Java总结(1)

第11章 GUI程序开发

11.1 认识GUI和Swing

1.图形用户界面(Graphics User Interface,GUI)是指采用图形方式显示的计算机操作用户界面。

   之前编写的程序,其操作基本是在控制台上进行的,称为文本用户界面或字符用户界面。

2.Swing是一个为Java设计的GUI开发包。在Java中,GUI操作支持的API一般保存在java.awt和javax.swing包中:

   java.awt包中提供的(Abstract Window Toolkit,AWT)抽象窗口工具包界面开发API,适用于早期Java版本。

   javax.swing包中提供的Swing界面开发API,功能比AWT更加强大,是Java 2推出的,成为JavaGUI开发的首选。其中,Javax中的“x”是扩展的意思。

11.2 使用窗口

1.JFrame类提供了窗口功能。打开文档,找到javax.swing.JFrame类,常见的构造函数如下:

public JFrame(String title) throws HeadlessException

其传入一个界面标题,实例化JFrame对象。

   用户可以调用JFrame类里面的函数进行窗口操作,主要功能如下:

   设置标题

public void setTitle(String title)

   设置在屏幕上的位置

public void setLocation(int x,int y)

其中,x为窗口左上角在屏幕上的横坐标,y为窗口左上角在屏幕上的纵坐标。屏幕最左上角的横纵坐标为0。

   设置大小

public void setSize(int width,int height)

参数为宽度和高度。

   设置可见性

public void setVisible(boolean b)

根据参数b的值显示或隐藏此窗口。

   显示一个窗口,示例代码如下:

import javax.swing.*;

public class FrameTest1 {

        public static void main(String[] args) {

                JFrame frm=new JFrame("这是一个窗口");

                frm.setLocation(30,50);

                frm.setSize(50,60);

                frm.setVisible(true);

        }

}

   注意:单击窗口右上角的“关闭”按钮,窗口消失,但程序并没有结束,解决方法是调用frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)或frm.setDefaultCloseOperation(3)。

2.JDialog类也可以开发窗口,此时创建的窗口是对话框。打开文档,找到javax.swing.JDialog类,常见的构造函数如下:

public JDialog(Frame owner,String title,boolean model) throws HeadlessException

其中,owner为显示该对话框的父窗口,title为该对话框的标题,modal为true表示模态对话框。

   在JFrame的基础上产生一个模态对话框,代码如下:

import javax.swing.*;

public class JDialogTest1 {

        public static void main(String[] args) {

                JFrame frm=new JFrame("这是一个窗口");

                frm.setSize(400,200);

                //frm.setDefaultCloseOperation(3);和下面的语句都可

                fem.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                frm.setVisible(true);

                //创建一个模态对话框,不关闭对话框,窗口亦不能关闭

                JDialog dlg=new JDialog(frm,"这是一个对话框",true);

                dlg.setSize(200,100);

                frm.setVisible(true);

        }

}

11.3 使用控件

1.我们使用的按钮、文本框统称为控件,在Java中又称为Component(组件)。控件都有相应的类来实现,空间“按钮”,在Java中就是JButton类来实现的。

   为了更好地组织控件,通常先将控件添加到面板(JPanel)上,再添加到窗口上。

   将一个按钮添加到面板上,再添加到窗口上,代码如下:

import javax.swing.*;

public class ComponentTest1 extends JFrame {

        private JButton jbt=new JButton("按钮");

        private JPanel jpl=new JPanel();

        public ComponentTest1() {

                jpl.add(jbt);

                this.add(jbt);

                this.setSize(300,300);

                this.setVisible(true);

        }

        public static void main(String[] args) {

             new ComponentTest1();

        }

}

   特别说明:

   (1)面板和窗口也称为容器对象。使用add方法可以在容器上添加容器,也可以添加控件。

   (2)由于界面有可能比较复杂,所以一般不将界面的生成过程写在主函数中,而是写一个类继承JFrame。在其构造函数中初始化界面。

2.用户使用较多的控件是标签、按钮、文本框、多行文本框和密码框。

   标签: 标签显示一段静态文本,用户可以用JLabel类开发标签。打开文档,找到javax.swing.JLabel类,常见的构造函数如下:

public JLabel(String text)

其传入一个标题,实例化一个标签。

   按钮:用户可以用JButton类开发按钮。打开文档,找到javax.swing.JButton类,常见的构造函数如下:

public JButton(String text)

其传入一个标题,实例化一个按钮。

   文本框:用户可以用JTextField类开发文本框。打开文档,找到javax.swing.JTextField类,常见的构造函数如下:

public JTextField(int columns)

参数为JTextField的显示列数。

   多行文本框:用户可以用JTextArea类开发多行文本框。打开文档,找到javax.swing.JTextArea类,常见的构造函数如下:

public JTextArea(int rows,int columns)

参数为JTextArea显示的行数和列数。

   注意:默认的文本框没有滚动条,如果要使用滚动条,需要使用JScrollPane类,将JTextArea对象传入其构造函数,然后在界面上添加JScrollPane对象。

   密码框:输入的内容以掩码形式显示。用户可以用JPasswordField类开发密码框。打开文档,找到javax.swing.JPasswordField类,常见的构造函数如下:

public JPasswordField(int columns)

参数为JPasswordField的显示列数。

   在界面上显示标签、按钮、文本框、多行文本框和密码框,代码如下:

import javax.swing.*;

public class ComponentTest2 extends JFrame {

        private JLabel lblInfo=new JLabel("这是注册窗口");

        private JButton btReg=new JButton("注册");

        private JTextField tfAcc=new JTextField(10);

        private JPasswordField pfPass=new JPasswordField(10);

        private JTextArea taInfo=new JTextArea(3,10);

        private JScrollPane spTaInfo=new JScrollPane(taInfo);

        private JPanel jpl=new JPanel();

        public ComponentTest2() {

                jpl.add(lblInfo);

                jpl.add(btReg);

                jpl.add(tfAcc);

                jpl.add(pfPass);

                jpl.add(spTaInfo);

                this.add(jpl);

                this.setSize(150,220);

                this.setVisible(true);

        }

        public static void main(String[] args) {

             new ComponentTest2();

        }

}

3.单选按钮、下拉列表框和复选框是较为常用的控件。

   单选按钮:提供多选一功能(如性别)。用户可以使用JRadioButton类开发单选按钮。打开文档,找到javax.swing.JRadioButton类,常见的构造函数如下:

public JRadioButton(String text,boolean selected)

第1个参数为单选按钮标题,第2个参数为选择状态。

   注意:单选按钮支持的选项是多选一,那么如何将多个单选按钮看成一组呢?用户可以使用java

x.swing.ButtonGroup实现,该类有一个add函数,能够将多个单选按钮加入,看成一组。但是ButtonGroup不能被加到界面上,用户要将单选按钮一个一个地加到界面上。

   下拉列表框:提供多选一功能,适合选项较多地情况。用户可以使用JCombpBox类开发下拉列表框。打开文档,找到javax.swing.JCombpBox类,常见的构造函数如下:

public JComboBox()

实例化一个下拉列表框,其中地选项可用其addItem函数添加。

   复选框:提供多选功能,可以不选、全选或选择部分选项。用户可以使用JCheckBox类开发下拉列表框。打开文档,找到javax.swing.JCheckBox类,常见的构造函数如下:

public JCheckBox(String text,boolean selected)

实例化一个复选框,第1个参数为复选框标题,第2个参数为选择状态。

   在界面上显示单选按钮、下拉列表框和复选框集中控件,代码如下:

import javax.swing.*;

public class ComponentTest3 extends JFrame {

        private JRadioButton rbSex1=new JRadioButton("男",true);

        private JRadioButton rbSex2=new JRadioButton("女",false);

        private JComboBox cbHome=new JComboBox();

        private JCheckBox cbFav1=new JCheckBox("唱歌",true);

        private JCheckBox cbFav2=new JCheckBox("跳舞");

        private JPanel jpl=new JPanel();

        public ComponentTest3() {

                ButtonGroup bgSex=new ButtonGroup();

                bgSex.add(rbSex1);          

                bgSex.add(rbSex2);

                cbHome.addItem("北京");

                cbHome.addItem("上海");

                cbHome.addItem("天津");

                jpl.add(rbSex1);

                jpl.add(rbSex2);

                jpl.add(cbHome);

                jpl.add(cbFav1);

                jpl.add(cbFav2);

                this.add(jpl);

                this.setSize(100,180);

                this.setVisible(true);

        }

        public static void main(String[] args) {

             new ComponentTest3();

        }

}

4.菜单:常见的控件,菜单的开发需要了解以下问题。

   (1)在界面上首先需要放置一个菜单条,由javax.swing.JMenuBar封装。打开文档,找到javax.swing.JMenuBar类,常见的构造函数如下:

public JMenuBar()

实例化一个菜单。

   注意:使用JFrame的setJMenuBar(setJMenuBar menubar)方法可以将菜单条添加到界面上。

   (2)菜单,由javax.swing.JMenu封装,JMenu放到菜单条上。打开文档,找javax.swing.JMenu类,常见的构造函数如下:

public JMenu(String s)

其参数是菜单文本。

   注意:使用JMenuBar的add(JMenu menu)方法可以添加JMenu。

   (3)菜单项,由javax.swing.JMenuItem封装,JMenuItem放到JMenu上。打开文档,找javax.swing.JMenuItem类,常见的构造函数如下: 

public JMenuItem(String s)

其参数是菜单文本项。

   注意:使用JMenu的add(JMenuItem menuItem)方法可以添加JMenuItem。

   在界面上有个菜单条(JMenuBar),菜单条上有个菜单(JMenu),菜单中有菜单项(JMenuItem)。

   在界面上显示上述控件,代码如下:

import javax.swing.*;

public class ComponentTest4 extends JFrame {

        private JMenuBar mb=new JMenuBar();

        private JMenu mFile=new JMenu("文件");

        private JMenuItem miOpen=new JMenuItem("打开");

        private JMenuItem miSave=new JMenuItem("保存");

        private JMenuItem miExit=new JMenuItem("退出");

        public ComponentTest4() {

                mFile.add(miOpen);

                mFile.add(miSave);

                mFile.add(miExit);

                mb.add(mFile);

                this.setJMenuBar(mb);

         

                this.setSize(200,180);

                this.setVisible(true);

        }

        public static void main(String[] args) {

             new ComponentTest4();

        }

}

5.使用JOptionPane类也可以显示窗口。一般使用其显示一些消息框、输入框或确认框等。打开文档,找到javax.swing.JOptionPane类,一般使用其以下静态函数。

   (1)显示消息框,代码如下:

public static void showMessageDialog(Component parentComponent,Object message) throws HeadlessException

第1个参数表示父组件(可以为空,也可以为一个Component),第2个参数表示消息内容。

   (2)显示输入框,代码如下:

public static void showInputDialog(Object message) throws HeadlessException

参数表示输入框上的提示信息,输入之后的内容以字符串返回。

   (3)显示确认框,代码如下import:

public static void showConfirmDialog(Component parentComponent,Object message) throws HeadlessException

第1个参数表示父组件(可以为空,也可以为一个Component),第2个参数表示确认框上的提示信息。

   系统如何知道用户单击了那个按钮呢?系统根据返回的值来判断,返回值是一个整数,由JOptionPane类中定义的静态变量表示。例如,JOptionPane。YES_OPTION表示单击了“是”按钮,其他静态变量可以在文档中查到。

   使用上述3种函数,显示3种显示窗口,代码如下:

import javax.swing.*;

public class OptionpaneTest1 {

        public static void main(String[] args) {

                JOptionPane.showMessageDialog(null,"这是一个消息框");

                JOptionPane.showInputDialog("这是一个输入框");

                int result=JOptionPane.showConfirmDialog(null,"这是一个确认框");

        }

}

6.下面列出一些常见的控件

   (1)Javax.swing.JFileChooser:文件选择框,用于文件的打开或保存。

   (2)Javax.swing.JColorChooser:颜色选择框,用于颜色的选择。

   (3)Javax.swing.JToolBar:用于在菜单条下方显示工具条。

   (4)Javax.swing.JList:列表框,用于选择某些选项。

   (5)Javax.swing.JProgressBar:进度条,用于显示某些进度。

   (6)Javax.swing.JSlider:滑块,用于设定数值。

   (7)Javax.swing.JTree:树形结构,用于将分层数据显示为树形轮廓。

   (8)Javax.swing.JTable:表格,用于显示和编辑常规二维单元表。

   (9)Javax.swing.JTabbedPane:选项卡面板。它允许用户通过点击给定标题或图标的选项卡,在一组组之间进行切换显示。

   (10)Javax.swing.JInternaIFrame:在窗口中容纳多个小窗口。

11.4 颜色、字体和图片的使用

1.在Java中颜色是用java.awt.Color表达的。打开文档,找到java.awt.Color类,常见的构造函数如下:

public Color(int r,int g,int b)

其表示用红色、绿色和蓝色分量来初始化颜色,参数r,g,b必须取值为0~255。

   小知识:生活中的任何颜色都可以看成是由红、绿、蓝3种颜色混合而成。如果3种颜色分量都为0,则为黑色;如果都为255,则为白色。

   对于窗口和控件来说,可以设置两类颜色。

   (1)设置背景颜色:

public void setBackground(Color c)

   (2)设置前景颜色:

public void setForeground(Color c)

前景颜色主要是指控件上文字等内容的颜色。

   在界面上显示一个按钮,界面背景颜色是黄色,按钮上文字的颜色是红色,代码如下:

import java.awt.*;

import javax.swing.*

public class ColorTest1 extends JFrame {

        private JButton jbt=new JButton("按钮");

        private Jpanel jpl=new Jpanel();

        public ColorTest1() {

                jpl.add(jbt);

                this.add(jpl);

                jpl.setBackground(Color.yellow);

                jpt.setForeground(Color.red);

                this.setSize(100,80);

                this.setVisible(true);

        }

        public static void main(String[] args) {

                new ColorTest();

        }

}

2.在GUI编程中字体也是要经常使用的内容,在Java中字体是用java.awt.Font表达的。打开文档,找到java.awt.Font类,常见的构造函数如下:

public Font(String name,int style,int size)

其用字体名称、字体风格和字体大小初始化字体。

   注意:

   (1)如果字体名称错误,则使用系统默认字体。在Fort类中也定义了一些静态变量表示系统提供的字体,如Fort.SANS_SERIF等,具体可以参考文档。

   (2)字体风格可以选用Fort.PLAIN(普通)、Fort.BOLD(粗体)、Fort.ITALIC(斜体)等,如果同时使用多种,则用“|”隔开,如,Fort.BOLD|Fort.ITALIC表示粗斜体。

   设置字体一般针对含有文字的控件,可以通过以下方法设置字体:

public setFont(Font f)

   在界面上显示一个标签和一个文本框,标签字体为20号粗斜楷体,文本框中的字体为20号斜黑体,代码如下:

import java.awt.*;

import javax.swing.*

public class FontTest1 extends JFrame {

        private JLabel lblAcc=new JLabel("输入账号:");

        private JTextField tfAcc=new JTextField(10);

        private JPanel jpl=new JPanel();

        public FontTest1() {

                Font fontLblAcc=new Font("楷体_GB2312",Font.BOLD|Font.ITALIC,20);

                lblAcc.setFont(fontLblAcc);

                Font fontTfAcc=new Font("黑体",Font.ITALIC,20);

                tfAcc.setFont(fontTfAcc);

                jpl.add(lblAcc);

                jpl.add(tfAcc);

                this.add(jpl);

                this.setSize(250,80);

                this.setVisible(true);

        }

        public static void main(String[] args) {

                new FontTest1();

        }

}

3.在GUI编程中经常使用图片。

   图像:用java.awt.Image来封装的。打开文档,找到java.awt.Image类,该类是一个抽象类,无法被实例化。Image对象一般使用以下方式得到:

Image img=Toolkit.getDefaultToolkit().creatImage("图片路径");

   JFrame有一个函数:

public void setIconImage(Image image)

通过该函数可以设置此窗口要显示在最小话图标中的图像。

   图标:是用java.swing.Icon来封装的。打开文档,找到java.awt.Icon,它是一个接口,无法被实例化。一般使用Icon的实现类java.swing.ImageIcon来生成一个图标。打开文档,找到java.awt.ImageIcon类,常见的构造函数如下:

public ImageIcon(String filename)

其传入一个路径,实例化ImageIcon对象。

   设置图标在Swing开发中较为常见。常见的控件一般都提供了构造函数传入一个图标。例如,JButton类就用以下构造函数传入一个图标:

public JButton(String text,Icon icon)

此外,还用setIcon函数修改图标。

   JLabel等其他类也有相应的图标支持函数,具体可以参考文档。

11.5 其他功能

1.在GUI编程中风格是由java.swing.UIManager类进行管理。通过该类的以下函数来设置界面的显示风格:

public static void setLookAndFeel(String className)

                                                throws ClassNotFoundException,

                                                            InstantiationException,

                                                            IllegalAccessException,

                                                            UnsupportedLookAndFeelException

用户可以使用以下函数得到系统中已经支持的风格:

public static UIManger.LookAndFeelInfo[] getInstalledLookAndFeels()

   用系统支持的所有风格显示一个输入框,代码如下:

import javax.swing.*;

public class StyleTest {

        public static void main(String[] args) {

                try{

                        UIManager.LookAndFeelInfo[] infos=

                                UIManager.getInstalledLookAndFeels();

                        for(UIManager.LookAndFeelInfo Info:infos) {

                                UIManger.LookAndFeel(info.getClassName());

                                JOptionPane.showInputDialog(info.getName()+"风格");

                        }

                }catch(Exception ex) {}

        }

}

2.在GUI编程中屏幕大小是由java.awt.GraphicsEnvironment类获得的。打印当前的屏幕大小,代码如下:

import java.awt.*;

public class ScreenTest {

        public static void main(String[] args) {

                GraphicsEnvironment ge=

                        GraphicsEnvironment.getLocalGraphicsEnvironment();

                Retangle rec=

                        ge.getDefaultScreenDevice().getDefaultConfiguration().getBounds();

                System.out.println("屏幕宽度:"+rec.getWidth());

                System.out.println("屏幕高度:"+rec.getHeight());                     

        }

}

3.在JDK6.0中增加java.awt.SystemTray类,该类的功能是用默认应用程序打开文件。此功能也可以用Desktop类实现。

   打开C盘中的test.pdf(C盘中要先创建该文档),代码如下:

import java.awt.Desktop;

import java.io.File;

public class DesktopTest {

        public static void main(String[] args) {

                Desktop.getDesktop().open(new File("C:\\test.pdf"));

        }

}

4.在JDK6.0中增加了java.awt.SystemTray类,该类可以在任务栏上显示系统托盘,系统托盘用java.awt.TaryIcon封装(可自行了解)。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LJ4

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值