黑马程序员 GUI

 

---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

1. 顶级容器

(1)JFrame

标题在JFrame的构造方法中给定(JFrame另有一个不带任何参数的构造方法)

其他控件用方法add加到窗口的内容块中,而后者用getContentPane求得,或者用JFrame的setContentPane设定。

Pack():设定窗口大小,该方法使得窗口能利用其布局管理器根据各控件的理想尺寸自行设定。

SetSize():人为地设定窗口大小。

(2)JApplet

Swing  Applet和普通的Applet有以下几点不同:

a.  控件应加到内容块中,而不能直接加到Applet中;

b.  布局管理器应设定到内容块中,而不能直接设定到Applet中;

c.  Swing  Applet内容块的默认布局管理器是BorderLayout,而不是普通Applet的FlowLayout;

d.  不能直接在JApplet对象中放置绘图代码。

2.  GUI的总体效果

(1)       基本的布局管理

 Swing的布局管理用于对一个容器中的所有的控件进行管理和安排,包括流式布局管

理器和边界布局管理器。

     流式布局管理器是控制面板默认的布局管理器,即FlowLayout,该布局管理器的控件对齐方式有三种:左对齐、右对齐和居中(默认方式),对齐方式可在创建布局管理器时设定,方法为FlowLayout(int align),其中的参数可是LEFT、RIGHT或CENTER之一。此外还可以指定水平和垂直方向的间隔距离,构造方法为FlowLayout(int align,int hgap,int vgap),间隔的单位为像素,如果取负值那么控件之间会重叠。

        边界布局管理器(BorderLayout)是JFrame的内容块(content pane)的默认布局管理器,与流式布局不同,边界布局会调整控件大小以占满所有可用的空间。创建布局管理器时还可以指定控件之间的左右和上下间隔,方法为BorderLayout(int hgap,int vgap)。

(2)       外观(Look and Feel)

 Swing和AWT的不同之处在于它能设定几种不同的外观,包括:Metal外观(又称为

JAVA外观——默认)、Windows外观和CDE/Motif外观。外观的设定有三种途径,即在程序中设定、用命令行在程序运行时设定或者通过文件swing.properties来设定。

在程序中设定外观是通过调用UIManager的setLookAndFeel方法来实现的,而且要在程序的开头进行。

        在运行程序时在命令行中指定,用旗标-D设定swing.defaultlaf属性为所需的外观,后接要运行的GUI程序名。Eg:

     java –Dswing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeel myGUI

     在swing.properties中设定swing.defaultlaf属性的值,swing.properties文件位于Java主目录下的bin目录下,其内容非常短小,只有一两句。Eg:

     Swing properties

     Swing.defaultlaf= com.sun.java.swing.plaf.windows.WindowsLookAndFeel

3.  文本输入和显示

常用的三个方法:void setText(String text)

                       String getText()

                void setEditable(Boolean bool)

文本域(Text Field):

 密码输入所用的类为JPasswordField,它是JTextField的子类,其绝大多数方法

与JTextField的相同,只有少数几个是特有的:setEchoChar(char echo)和getEchoChar()分别用于设定和获得输入时显示的字符,getPassword()用于获得输入的密码内容,以字符数组的形式返回。

文本区(Text Area):

 方法有:JTextArea(int rows,int cols)

         JTextArea(String text,int rows,int cols)

                setRows()和setColumns()

         自动换行:setLineWrap(boolean wrap)取参数为true

                设定跳格键:setTabSize(int cols)

样式文本区(Styled Text Area):

可以输入和显示样式化的复杂文本,即可以混合不同字体的内容,甚至可以嵌

入图像和控件,其功能较强而富有弹性。

4.  按钮、复选框和单选按钮

(1)       按钮(Button)

 当鼠标指针点在按钮上时能跳出一个功能提示信息框,可调用方法setToolTipText(),按钮的动作事件在方法actionPerformed中处理,用getSource来判断事件源

(2)       复选框(Check Box)

设定复选框的初始选择状态用方法setSelected(boolean state);

 设置快捷键:setMnemonic();

 检查选择状态:isSelected();

(3)       单选按钮(Radio Button)

 单选按钮创建之后要加入到相应的按钮组中,后者是由类ButtonGroup生成的对象

5.  组合框(ComboBox)

虽然组合框本身是一个控件,但实际上是几个控件的组合,它将文本框和列表框的功能组合到一起。

创建组合框之后,调用addItem将各选项以字符串或图标等对象形式添加到其列表中。还可如下这样操作:

         String[] items={“Sphere”,”Cube”,”Cylinder”};

     bodyChoice=new JComboBox(items);

组合框事件的处理方法有两种:一是注册一个ActionListener(动作监听器),事件在方法actionPerformed(ActionEvent evt)中处理;另一种是注册一个ItemListener(选项监听器),事件在方法itemStateChanged(ItemEvent evt)中处理。

6.  列表框(List)

创建列表框用其构造方法JList(Object[] items)或JList(Vector items),最常见的选项

是文本字符串,也可以采用图像。

   列表框的选择模式可用方法setSelectionMode(int mode)来设定,输入参数如下:

       ListSelectionModel.SINGLE_SELECTION:一次只能选一项,前面的选择取消;

       ListSelectionModel.SINGLE_INTERVAL_SELECTION:一次可选一项或相连的多项,前面的选择自动取消;

       ListSelectionModel.MULTIPLE_INTERVAL_SELECTION:默认模式,选项可以任意组合。

7.  滚动条和滑动条

滚动条有以下几个重要的特性和相应的参数:

        方向(Orientation):取值为Adjustable.HORIZONTAL或Adjustable.VERTICAL,用于设定滚动条的放置位置,也可由setOrientation()设定。

       控制值(Value):对应于滑块当前位置,可用setValue()设定或用getValue()求取。

        范围(Range):滚动条控制值的范围,默认为0---100之间。

        单位增长量(Unit increment):默认值为10,可用setBlockIncrement()设定。

        可视区(Visual area):可用方法setVisibleAmount()设定。

滚动条产生的AdjustmentEvent(调节事件)用事件监听器AdjustmentListener来监听,

并在其adjustmentValuedChanged方法中处理。

       类JSlider用于创建滑动块,滑动块产生ChangeEvent事件,对它的监听要用一个ChangeListener对象,当滑块移动时,会调用该监听器的方法stateChanged。

       滑动块的标签可由方法setLabelTable(Dictionary dict)设定,为使所设定的标签能显示出来,还必须调用setPaintLabels(true)。

8.  标签(Label)

JLabel label1=new JLabel(“Text-only Label”,JLabel.CENTER);

JLabel label2=new JLabel(icon);

JLabel label3=new JLabel(“Text and Image”,icon,JLabel.LEFT);

label3..setHorizontalTextPosition(JLabel.LEFT);

标签创建后,其内容的对齐方式可以通过调用setHorizontalAlignment(int align)和

setVerticalAlignment(int align)来设定或修改。

标签内容也可以随时设定或修改,方法setText(String text)和setIcon(Icon icon)分别用来设定文本和图标。

 
 

9.  边框(Border)

Java Swing提供了几种不同的边框,包括Lowered bevel(凹斜边)、Raised bevel(凸斜

边)、Etched(蚀刻边)、Line(线框)、Matte(毛边)、Empty(空边),尽管边框有多种类型,它们的创建和使用方法都是相同的,创建时要调用BorderFactory的静态方法,边框本身没有构造方法,针对不同类型的边框,要调用不同的BorderFactory.createTypeBorder方法,其中Type为Line、Etched等之一。另外边框可以为它加个标题以对被它框着的组件做简要描述,需要调用BorderFactory的createTitledBorder方法。

10.任务进度的监视

       Java Swing提供了三个类来创建控件以显示和监视任务的进度:

       JProgressBar(进度条):一个可视控件,显示在任务总量中已经完成的任务量。

       ProgressMonitor(进度监视器):不可见控件,但在任务进程中,在必要时会弹出一个有关的对话框。

       ProgressMonitorInputStream(进度监视器输入流):带有进度监视器的输入流。

Ⅰ、进度条

       progressBar=new JProgressBar(0,task.getLengthOfTask());

       progressBar.setValue(0);   //设定进度条的值,表示完成的任务量

       progressBar.setStringPainted(true);   //指明是否显示任务完成量的文本信息(xx%)

       progressBar.setBackground(Color.white);

Ⅱ、进度监视器

       一个进度监视器只能使用一次,因此每次在任务开始时都必须生成一个新的进度监视器。

       setProgress():设定初始值;

       setMillisToDecideToPopup():设定等待时间,以决定是否弹出对话框。

       进度监视器本身不会使任务结束。

Ⅲ、进度监视器输入流

       ProgressMonitorInputStream用来监视对某个InputStream的读取,在读取过程中也会有个对话框出现,其创建和使用方法与进度监视器非常类似,如:

InputStream in=new

BufferedInputStream(new ProgressMonitorInputStream(parentComponent,”Reading” + filename,new FileInputStream(fileName)));

11.表格(Table)

       创建表格的构造方法为:

              JTable(Object[] cells,Object[] columnNames);

              JTable(Vector cells,Vector columnNames);

       创建表格后,一般要把它装载在一个ScrollPane上,以便必要时(如表格高度较小)能用滚动条对表格内容进行翻滚。

a. 列宽的改变

对列的宽度进行改变要使用类TableColumn。表格的TableColumn对象要通过管理

表格各列的模型类TableColumn-Model来获取,利用TableColumn中的下列方法即可对列设定期望宽度和最大最小宽度:

              void setPreferredWidth(int width);

              void setMaxWidth(int width);

              void setMinWidth(ing width);

b.  列的隐藏和显示

removeColumn():从表格中去掉(隐藏)某列,其参数是一个TableColumn对象;

getSelectedColumn()和getSelectedRows():获取列号和行号,它们都返回int[];

addColumn(column):将隐藏的列重新显示出来;

moveColumn():移动列;

c.  行列和单元的选择

下列方法分别设定是否允许行、列或单元选择:

table.setRowSelectionAllowed(Boolean selectable);

table.setColumnSelectionAllowed(Boolean selectable);

table.setCellSelectionAllowed(Boolean selectable);

默认设定是行选择,只要用户选取某个单元,它所在的整个行便都选中,在允许选

择的基础上,还可以控制行选择的模式:一次只选一行、可选连续几行或选择任意的若干行:模式的设定如下:

              table.getSelectionModel().setSelectionMode(mode);

其中,mode取以下三值之一:ListSelectionModel.SINGLE_SELECTION

                                             ListSelectionModel.SINGLE_INTERVAL_SELECTION

                                          ListSelectionModel.MULTIPLE_INTERVAL_SELECTION

d.  默认表格模型中行的增减

类JTable本身没有方法可以为模型增加新列或从中删减某列,它也没有方法对行作

隐藏,但在默认表格中却可以。类DefaultTableModel是接口TableModel的一个具体实现,它具有方法addRow、addColumn和removeRow,将新行插入到中间应调用方法insertRow,但是没有insertColumn。

e.  表格模型

创建表格时,默认的表格模型是DefaultTableModel,当默认模型不能满足要求时,

可以设计自己的表格模型,这时一般定义一个继承AbstractTableModel的子类,并且实现如下的一些方法:

              public int getRowCount();

              public int getColumnCount();

              public Object getValueAt(int row,int column);

f.  单元的显示和编辑

创建定制的额单元编辑器时要实现TableCellEditor接口,且通常继承类

AbstractCellEditor,因为该类以有各种事件处理功能,它定义了一个用来接受所有事件的方法isCellEditable。

                     public Boolean isCellEditable(EventObject evt)

                     {

                            return true;

                     }

12.树形结构(JTree)

       树是用类JTree的构造方法创建的。与表格类似,树从模型中得到数据并将它们显示出来,因此,一般在调用构造方法创建树时,要提供一个树模型TreeModel对象作为其参数,还有三个用处不大的构造方法:JTree(Object[] nodes)、JTree(Vector nodes)和JTree(Hashtable nodes)。创建默认的树模型时要提供根节点:

                     TreeNode root=……;

                     DefaultTreeModel model=new DefaultTreeModel(root);

                     JTree tree=new JTree(model);

       要想实现对树节点的选择功能,则应安装树选择监听器,该监听器必须实现接口TreeSelectionListener,重定义其中唯一的方法:

                     void valueChanged(TreeSelectionEvent event);

定义选择监听器后,用方法addTreeSelectionListener()注册到树中。

13.高级布局管理

       当不用布局管理器时,设计过程为:首先设定布局管理为null,然后将控件加到容器中,再指定控件的位置和大小,如:

                     panel .setLayout(null);

                     JButton ok=new JButton(“OK”);

                     panel.add(ok);

                     ok.setBounds(10,15,30,20);

其中,方法setBounds(int x,int y,int width,int height)用于设定控件的位置和大小。

1.  网格布局(Grid Layout)

该布局将容器中的控件按照行和列布置,其特点是所有控件的大小都相同,这些控

件把整个容器充满,因此不能对单个的控件大小进行控制,当容器窗口改变大小时,各控件的大小也随之作相应的变化。其构造方法有两个:

                     GridLayout(int rows,int cols)

                     GridLayout(int rows,int cols,int hgap,int vgap)

2.  方框布局(Box Layout)

方框布局将容器中的空间沿一行从左到右或一列从上到下的顺序依次排列。创建方

框布局管理器有两种方式;一种是先创建要进行布局的普通容器(如JPanel),在此基础上创建BoxLayout对象,并以此为参数,调用该容器的setLayout方法进行设定,然后将各控件加入容器中,类Box Layout的构造方法为Box Layout(Container cont,int hv),前一个参数为受控的容器,后一个指定控件是沿水平还是垂直方向排列,取值为BoxLayout.X_AXIS或BoxLayout.Y_AXIS;另一种方式使用一个特别的容器,即创建一个静态类Box的对象,Box的默认布局即方框布局,其构造方法Box.createHorizontalBox和Box.createVerticalBox分别创建沿水平和垂直方向布局的Box对象,有了Box容器后,把需要布局的控件用方法add向它加入即可。


3.  卡片式布局(Card Layout)

该布局使统一容器区域在不同的时间或情况下显示不同的控件,因而能节省显示空

间。

4.布局管理器的定制

          创建定制的布局管理器时必须设计实现LayoutManager接口的一个类,该类可以直接实现LayoutManager接口,也可以实现其子接口LayoutManager2。
 

14.菜单(Menu)

       首先创建菜单条,为此只要调用类JMenuBar的构造方法即可:

                     JMneuBar mbar=new JMneuBar();

       菜单条一般放在窗口框的顶端,所用的方法为setMenuBar():

                     frame.setMenuBar(mbar);

       然后为每个菜单创建对象,将之用addMenu方法加到菜单条中,并向它增添菜单选项、分隔条或子菜单。方法addSeparator()用于增加菜单选项之间的分隔条。

       图标可在菜单选项构造方法JMenuItem(String,Icon)或JMenuItem(Icon)中指定,也可以用方法setIcon设定。

       助记符用方法setMnemonic()来设定,快捷键用方法setAccelerator()设定到菜单选项中,所用的参数是一个KeyStroke类型的对象。如:

openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));

       复选框和单选按钮分别用类JCheckBoxMenuItem和JRadioButtonMenuItem来创建。

       对于事件监听器如:

                     public void actionPerformed(Event evt)

                     {

                            if(evt.getSource()instanceof  JMenuItem)

                            {

                                   String arg=evt.getActionCommand();

if(arg.equals(“New”))……

else if(arg.equals(“Open”))……

……

else if(arg.equals(“Exit”))

       System.exit(0);

}

}

       对于复选框选项,应注册到ItemListener监听器,事件在方法itemStateChanged中处理。

       弹出式菜单的显示必须明确调用其方法show,该方法带有三个参数,第一次参数是父控件,后两个参数是用于菜单定位的x和y坐标。由于弹出式菜单通常由鼠标右击弹出,因而要安装鼠标监听器,并在其事件处理方法中显示菜单,如下:

                     textArea.addMouseListener(new MouseAdapter()

{

       public void mouseReleased(MouseEvent evt)

       {

              if(evt.isPopupTrigger())

                     popup.show(evt.getComponent(),evt.getX(),evt.getY());

}

});

---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

详细请查看:<a href="http://edu.csdn.net/heima" target="blank">http://edu.csdn.net/heima</a>



 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值