java学习笔记图形程序设计及GUI应用小结(3)



一、布局

组件放置在容器中,布局管理器决定容器中的组件具体放置的位置和大小。

按钮、文本域和其他的用户界面元素都继承于Component类,组件可以放置在面板这样的容器中。由于Container类继承于Component类,所以容器也可以放置在另一个容器中。


流布局管理器
流布局管理器是面板的默认布局管理器。面板的默认布局管理器是FlowLayout。


边框布局管理器

是每个JFrame的内容窗格的默认布局管理器。边框布局管理器允许为每个组件选择一个放置位置。可选择把组件放在内容窗格的中部、北部、南部、东部或者西部。例如:frame.add(component,BorderLayout.SOUTH);  先放置边缘组件,剩余的可用空间由中间组件占据。当容器被缩放时,边缘组件的尺寸不会改变,而中部组件的大小会发生变化。在添加组件时可以指定BorderLayout类中的CENTER、NORTH、SOUTH、EAST和WEST常量。并非需要占用所有的位置,如果没有提供任何值,系统默认为CENTER。边框布局会扩展所有组件的尺寸以便填满可用空间(流布局将维持每个组件的最佳尺寸)


网格布局

网格布局像电子数据表一样,按行列排列所有的组件。不过,他的每个单元大小都是一样 的。在网格布局对象的构造器中,需要指定行数和列数:panel.setLayout(newGridLayout(4,4));添加组件,从第一行的第一个列开始,然后是第一行第二列,以此类推。


布局方法说明:

java.awt.Container 1.0

Void SetLayout(LayoutManager m)  为容器设置布局管理器。

Component add(Component c) 

Componentadd(Component c,Object constraints) 1.1 将组件添加到容器中,并返回组件的引用。

-----------------------------------------------------

java.awt.FlowLayout 1.0

FlowLayout()

FlowLayout(int align)

FlowLayout(int align,int hgap,int vgap) 构造一个新的FlowLayout对象。

-----------------------------------------------------

java.awt.BorderLayout 1.0

BorderLayout()

BorderLayout(int hgap,int vgap)  构造一个新的BorderLayout对象。

-----------------------------------------------------

java.awt.GridLayout 1.0

GridLayout(introws,int columns) 

GridLayout(introws,int columns,int hgap,int vgap) // 参数为水平间距和垂直间距。

-----------------------------------------------------


二、文本域和文本区组件


文本域和文本区组件用于获取文本输入。文本域只能单行文本的输入,而文本区能够接收多行文本的输入JPassword也只能接收单行文本的输入,但不会将输入的内容显示出来。 这三个类都继承于JTextComponent类。JTextComponent是一个抽象类,所以不能构造这个类的对象。

把文本域添加到窗口的常用办法是将它添加到面板或者其他容器中,这与添加按钮一样:

JPanelpanel = new JPanel();    

JTextFieldtextField = new JTextField(“Default input”,20);    // 定义一个文本域

panel.add(textField);

这段代码将添加一个文本域,同时通过传递字符串“Default input”进行初始化。构造器第二个参数设置了文本域的度。

在JTextField的构造器中设定的宽度并不是用户能输入的字符个数的上限。用户可以输入一个更长的字符串,但是当文本长度超过文本域长度时输入就会滚动。

如果需要在运行时重新设置列数,可以使用setColumns方法。使用setColumns方法改变了一个文本域的大小之后,需要调用包含这个文本框的容器的revalidate方法:textField.setColumns(10);      panel.revalidate();

revalidate方法会重新计算容器内所有组件的大小,并且对它们重新进行布局。

文本域一般初始为空白。只要不为JTextField构造器提供字符串参数,就可以构造一个空白文本域,例如如下方式定义:JTextField textField = newJTextField(20); 可在任意时候调用setText方法改变文本域中的内容。

可以调用getText方法来获取用户键入的文本。这个方法返回用户输入的文本。如果想要将getText方法返回的文本域中的内容的前后空格去掉,就应该调用trim方法:String text =textField.getText().trim();   如果想改变显示的字体,就调用setFont方法。

文本域方法说明:

javax.swing.JTextField 1.2

JTextField(int cols)  构造一个给定列数的空JTextField对象。

JTextField(String text,int cols)  构造一个给定列数、给定初始字符串的JTextField对象。

int getColumns()

void setColumns(int cols)  获取或设置文本域使用的列数。

-----------------------------------------------------

javax.swing.JComponent 1.2

voidrevalidate()  重新计算组件的位置和大小。

void setFont(Font f)  设置组件的字体。
-----------------------------------------------------

java.awt.Component 1.0

voidvalidate()  重新计算组件的位置和大小,若组件是容器,也重新计算容器中组件大小。

Font getFont()  获取组件的字体。

-----------------------------------------------------


在JTextArea组件的构造器中,可以指定文本区的行数和列数:JTextArea textArea = newJTextArea(8,40);

用户并不受限于输入指定的行数和列数。当输入过长时,文本会滚动。还可以用setColumns 方法改变列数,用setRows方法改变行数。这些数值只是首选大小—布局管理器可能会对文本区进行缩放。

textArea.setLinerap(true);  开启换行效果。

JTextArea组件只显示无格式的文本。


文本区方法说明:

javax.swing.JTextArea 1.2

JTextArea()

JTextArea(introws,int cols)

JTextArea(Stringtext,int rows,int cols)  构造一个新的文本区对象。

voidsetColumns(int cols)  设置文本区应该使用的首选列数。

voidsetRows(int rows)  设置文本区应该使用的首选行数。

voidappend(String newText)  将给定的文本追加到文本区中已有文本的尾部。

voidsetLineWrap(boolean wrap)  打开或关闭换行。

void setWrapStyleWord(Boolean word)  

若word是true,超长的行会在字边框处换行。若为false,超长的行被截断不考虑字边框。

void setTabSize(int c)  将制表符设置为c列。

-----------------------------------------------------


三、标签

标签是容纳文本的组件,他们没有任何的修饰,也不能相应用户输入,用来标识组件。

JLabel的构造器允许指定初始文本和图标,也可选择内容排列方式。可用SwingConstants接口中的常量来指定排列方式。在这个接口中定义了几个很有用的常量,如LEFT、RIGHT、 CENTER、NORTH、EAST等。JLabel是实现这个接口的一个Swing类。可以指定标签文字的对齐方式,如下定义所示:

JLabel label = new JLabel(“User name:”,SwingConstants.RIGHT);

label = new JLabel(“Requiredentry:”);   此种定义也合法但是显示慢。


标签方法说明:

javax.swing.JLabel 1.2

JLabel(String text)

JLabel(Icon icon)

JLabel(String text,Icon icon)

JLabel(String text,Icon icon,int align)

String getText()

void setText(String text)  获取或设置标签的文本。

Icon getIcon()

void setIcon(Icon icon)

-----------------------------------------------------


四、密码域

密码域是一种特殊类型的文本域。每个输入的字符都用回显字符表示,典型的回显字符是星号,Swing提供了JPasswordField类来实现这样的文本域。


密码域方法说明:

javax.swing.JPasswordField 1.2

JPasswordField(String text,int columns) 构造一个新的密码域对象。

void setEchoChar(char echo)  为密码设置回显字符。0表示重新设置为默认的回显字符。

char[]getPassword()  返回密码域中的文本。

-----------------------------------------------------


五、滚动窗格

javax.swing.JScrollPane 1.2

JScrollPane(Componentc) 

创建一个滚动窗格,用来显示指定组件的内容。当组件内容超范围滚动条会自动显示。


六、复选框

复选框自动地带有标识标签。用户通过点击某个复选框来选择相应的选项,在点击则取消选取。当复选框获得焦点时,用户也可以通过按空格来切换选择。

JCheckBox bold = new JCheckBox(“Bold”)  构造复选框。

可以使用setSelected方法来选定或取消选定复选框。isSelected方法将返回每个复选框的当前状态。选中返回true,否则返回false。


复选框方法说明:

javax.swing.JCheckBox 1.2

JCheckBox(Stringlabel)

JCheckBox(Stringlabel,Icon icon)  构造一个复选框,初始没有被选择。

JCheckBox(Stringlabel,Boolean state)  用给定的标签和初始化状态构造一个复选框。

BooleanisSelected() 

voidsetSelected(Boolean state)  获取或设置复选框的选择状态。

-----------------------------------------------------


七、单选按钮

当用户选择另一项的时候,前一项就自动地取消选择。这样一组选框通常称为单选按钮组。

实现单选按钮组非常简单。为单选按钮组构造一个ButtonGroup的对象。然后,再将JRadioButton类型的对象添加到按钮组中。按钮组负责在新按钮被按下时,取消前一个被按下的按钮的选择状态。

ButtonGroup group = new ButtonGroup();  定义按钮组

JRadioButton smallButton =new JRadioButton(“small”,false);   

定义单选按钮(第二个参数表明这个按钮初始状态是被选择)


单选按钮方法说明:

javax.swing.JRadioButton 1.2

JRadioButton(String label,Icon icon) 构造一个单选按钮,初始没有被选择。

JRadioButton(String label,Boolean state) 用给定的标签和初始状态构造一个单选按钮。

-----------------------------------------------------


八、边框

如果在一个窗口中有多组单选按钮,就需要用可视化的形式指明哪些按钮属于同一组。Swing提供了一组很有用的边框来解决这个问题。可以在任何继承了JComponent的组件上应用边框。

调用BorderFactory的静态方法创建边框。下面是几种可选的风格:凹斜面、凸斜面、蚀刻、直线、蒙板、空(只是在组件外围创建一些空白空间)

可以给边框加标题:

具体的实现方法是将边框传递给:BroderFactory.createTitledBorder

如果确实想把一切凸显出来,可以调用下列方法将几种边框组合起来使用:BorderFactory.createCompoundBorder

调用JComponent类中setBorder方法将结果边框添加到组件中。

把一个带有标题的蚀刻边框添加到一个面板上:

Border etched = BorderFactory.createEtchedBorder();

Border titled = BorderFactory.createTitledBorder(etched,”A Title”);

panel.setBorder(titled);

不同的边框有不同的用于设置边框的宽度和颜色的选项。SoftBevelBorder类用于构造具有柔和拐角的斜面边框,LineBorder类也能够构造拐角。这些边框只能通过类中的某个构造  器构造,而没有BorderFactory方法。


边框方法说明:

javax.swing.BorderFactory 1.2

staticBorder createLineBorder(Color color)

staticBorder createLineBorder(Color color,int thickness)  创建一个简单的直线边框。

staticMatteBorder createMatteBorder(int top,int left,int bottom,int right,Colorcolor)

staticMatteBorder createMatteBorder(int top,int left,int bottom,int right,IcontileIcon)

创建一个用color颜色或一个重复图标填充的粗的边框。

staticBorder createEmptyBorder()

staticBorder createEmptyBorder(int top,int left,int bottom,int right)  创建一个空边框。

staticBorder createEtchedBorder()

staticBorder createEtchedBorder(Color highlight,Color shadow)

staticBorder createEtchedBorder(int type)

staticBorder createEtchedBorder(int type,Color highlight,Color shadow)  创建一个具有3D效果的直线边框。

staticBorder createBevelBorder(int type)

staticBorder createBevelBorder(int type,Color highlight,Color shadow)

staticBorder createLoweredBevelBorder()

staticBorder createRaisedBevelBorder()  创建一个具有凹面或凸面效果的边框。

staticTitledBorder createTitledBorder(String title)

staticTitledBorder createTitledBorder(Border border)

staticTitledBorder createTitledBorder(Border border,String title)

staticTitledBorder createTitledBorder(Border border,String title,intjustification,int position)

staticTitledBorder createTitledBorder(Border border,String title,intjustification,int  

position,Fontfont)

staticTitledBorder createTitledBorder(Border border,String title,intjustification,int   

position,Font font,Colorcolor)创建一个具有给定特性的带标题的边框。

justification参数:TitledBorder常量LEFT、CENTER、RIGHT、LEADING等或DEFAULT_JUSTIFICATION(left)之一

staticCompoundBorder createCompoundBorder(Border outsideBorder,BorderinsideBorder) 

将两个边框组合成一个新的边框。

-----------------------------------------------------

javax.swing.border.SoftBevelBorder 1.2

SoftBevelBorder(inttype)

SoftBevelBorder(inttype,Color hight,Color shadow)  创建一个带有柔和边角的斜面边框。

-----------------------------------------------------

javax.swing.border.LineBorder 1.2

publicLineBorder(Color color,int thickness,Boolean roundeCorners)

用指定的颜色和粗细创建一个直线边框。最后一个参数是圆角选项。

-----------------------------------------------------

javax.swing.JComponent 1.2

voidsetBorder(Border border)  设置这个组件的边框。

-----------------------------------------------------


九、组合框

如果下拉列表框被设置成可编辑,就可以像编辑文本一样编辑当前的选项内容。鉴于这个原因,这种组件被称为组合框,它将文本域的灵活性与一组预定义的选项组合起来。  JComboBox类提供了组合框的组件。

在Java SE7中,JcomboBox类是一个泛型类。例如JComboBox

当用户点击组合框组件时,选择列表就会下拉出来,用户可以从中选择一项。

定义一个组合框:JComboBoxfaceCombo = new JComboBox<>();

调用setEditable方法可以让组合框可编辑。

调用getSelectedItem方法获取当前的选项,如果组合框是可编辑的当前选项则是可编辑的。

combo.getItemAt(combo.getSelectedIndex())  这会为所选选项提供正确的类型。

可调用addItem方法给组合框增加选项。可在任何地方调用他。faceCombo.addItem(“Serif”);

组合框通过此方法添加选项会获追加到尾部。可以增加任何类型的选项,组合框可以调用

每个选项的toString方法显示其内容。

利用insertItemAt方法可在列表的任何位置插入一个新选项:faceCombo.insertItemAt(“Monospaced”,0);

如果需要在运行时删除某些选项,可以使用removeItem或者removeItemAt方法,使用哪个方法将取决于参数提供的是想要删除的选项内容,还是选项位置:faceCombo.removeItem(“Monospaced”);      faceCombo.removeItemAt(0);

调用removeAllItems方法将立即移除所有的选项。

当用户从组合框中选择一个选项时,组合框就将产生一个动作事件。为了判断哪个选项被

选择,可以通过事件参数调用getSource方法来得到发送时间的组合框引用,接着 

getSelectedItem方法获取当前选择的选项。需要把这个方法的返回值转化为相应的类型,

通常是String型。


组合框方法说明:

javax.swing.JComboBox 1.2

BooleanisEditable()

voidsetEditable(boolean b)  获取或设置组合框的可编辑特性。

voidaddItem(Object item)  把一个选项添加到选项列表中

voidinsertItemAt(Object item,int index)  将一个选项添加到选项列表的指定位置。

voidremoveItem(Object item)  从选项列表中删除一个选项。

voidremoveItemAt(int index)  删除指定位置的选项。

voidremoveAllItems()  从选项列表中删除所有选项。

Object getSelectedItem()  返回当前选择的选项。

-----------------------------------------------------


十、滑动条

组合框可以让用户从一组离散值中进行选择。滑动条允许进行连续值的选择。

构造滑动框: 

JSliderslider = new JSlider(min,max,initialValue); 如果省略最小值、最大值和初始值,器默认值分别为0、100和50。

构造垂直滑动 JSlider slider = newJSlider(SwingConstants.VERTICAL,min,max,initialValue);

当滑动条值发生变化时,ChangeEvent就会发送给addChangeListener方法并且安装一个实 现了ChangeListener接口的对象。此接口只有一个方法StateChanged。在这个方法中,可获取滑动条的当前值:int value = slider.getValue(); 

可以通过显示标尺(tick)对滑动条修饰。slider.setMajorTickSpacing/setMinorTickspacing(20);

设置滑动条标尺显示:slider.setPaintTicks(true);

强制滑动条对齐标尺。这样以来,只要用户完成拖放滑动条的操作,滑动条就会立即自动地移到最接近的标尺处。激活这种操作方式需要调用:slider.setSnapToTicks(true);

调用下列方法为大标尺添加标尺标签:slider.setPaintLabels(true);

隐藏滑动条移动的轨迹:slider.setPaintTrack(false);

设置滑动条逆向:slider.setInverted(true);


滑动条方法说明:

javax.swing.JSlider 1.2

JSlider()

JSlider(intdirection)  参数为横向滚动条或者纵向滚动条。

JSlider(intmin,int max)

JSlider(intmin,int max,int initialValue)  参数为最小值,最大值和初始值

JSlider(intdirection, int min,int max,int initialValue) 

用给定的方向、最大值、最小值和初始化值构造一个水平滑动条。

void setPaintTicks(Boolean b)  如果b为true显示标尺。

void setMajorTickSpacing(int units)

void setMinorTickSpacing(int units)  用给定的滑动条单位为的倍数设置大标尺和小标尺

void setPaintLabels(Boolean b)  如果b是true,显示标尺标签。

voidsetLabelTable(Dictionary table)  设置用于作为标尺标签的组件。表中的每一个键/值对 

都采用new Integer(value)/component的格式。

void setSnapToTicks(Boolean b)  b为true时,每次调整后滑块都要对齐到最接近的标尺处。

void setPaintTrack(Boolean b)  如果b是true,显示滑动条滑动的轨迹。

-----------------------------------------------------


十一、菜单栏

位于窗口顶部的菜单栏包括了下拉菜单的名字。点击一个名字就可以打开包含菜单项和子菜单的菜单。

创建菜单栏:JMenuBar menuBar = newJMnuBar();   创建一个菜单栏。

将菜单栏添加到框架上:frame.setJMenuBar(menuBar);

为菜单建立一个菜单对象:JMenu editMenu = new JMenu(“Edit”);

将菜单添加到顶层菜单栏中:menuBar.add(editMenu);

向菜单对象中添加菜单项、分隔符和子菜单:

JMenuItem pasteItem = new JMenuItem(“Paste”);

editMenu.add(pasteItem);

editMenu.addSeparator();

JMenuoptionsMenu = …;  定义一个子菜单项。

为菜单项安装监听:pasteItem.addActionListener(listener);

也可以使用JMenu.add(String s)方法将菜单项插入到菜单的尾部:editMenu.add(“Paste”);

菜单栏方法说明:

javax.swing.JMenu 1.2

JMenu(Stringlabel)  用给定标签构造一个菜单。

JMenuItemadd(JmenuItem item)  添加一个菜单项(或一个菜单)。

JMenuItemadd(String label)  用给定标签将一个菜单项添加到菜单中,并返回这个菜单项。

JMenuItemadd(Action a)  用给定动作将一个菜单项添加到菜单中,并返回这个菜单项。

voidaddSeparator()  将一个分隔符行添加到菜单中。

JMenuIteminsert(JMenuItem menu,int index) 

将一个新菜单项(或子菜单)添加到菜单的指定位置。

JMenuIteminsert(Action a,int index)  用给定动作在菜单的指定位置添加一个新菜单项。

voidinsertSeparator(int index)  将一个分隔符添加到菜单中。

voidremove(int index)

void remove(JMenuItem item)  从菜单中删除指定的菜单项。

-----------------------------------------------------

javax.swing.JMenuItem 1.2

JMenuItem(String label)  用给定标签构造一个菜单项。

JMenuItem(Action a) 1.3 

为给定动作构造一个菜单项JMenuItem exitItem=newJMenuItem(exitAction)定义好的动作

-----------------------------------------------------

javax.swing.AbstractButton 1.2

void setAction(Action a) 1.3  为这个按钮或菜单项设置动作。

-----------------------------------------------------

javax.swing.JFrame 1.2

void setJMenuBar(JMenuBar menubar)  为这个框架设置菜单栏。

-----------------------------------------------------

JmenuItem类扩展了AbstractButton类。与按钮一样,菜单可以包含文本标签、图标,也可以两者都包含。既可以用JmenuItem(String,Icon)或者JmenuItem(Icon)构造器为菜单指定 一个图标,也可以利用JmenuItem类中的setIcon方法指定一个图标。如:JmenuItem cutItem = new JmenuItem(“Cut”,newImageIcon(“cut.gif”));

调用JmenuItem类中setHorizontalTextPosition方法设置文本放置位置。例如:

cutItem.setHorizontalTextPosition(SwingConstants.LEFT);此调用把菜单项文本移到图标左侧。

菜单栏方法说明:

javax.swing.JmenuItem 1.2

JmenuItem(String label,Icon icon)  用给定的标签和图标构造一个菜单项。

-----------------------------------------------------

javax.swing.AbstractButton 1.2

void setHorizontalTextPosition(int  pos)  设置文本对应图标的水平位置。

-----------------------------------------------------

javax.swing.AbstractAction 1.2

AbstractAction(String name,Icon smallIcon)  用给定的名字和图标构造一个抽象的动作。

-----------------------------------------------------

复选框和单选按钮菜单项在文本旁边显示了一个复选框或一个单选按钮。当用户选择一个菜单项时,菜单项就会自动地在选择和未选择间进行切换。

建复选框菜单:

JCheckBoxMenuItemreadonlyItem=new JCheckBoxMenuItem(“Read-only”);

单选按钮菜单项与普通单选按钮的工作方式一样,必须将他们加入到按钮组中:

ButtonGroup group = new ButtonGroup();     定义按钮组

JRadioButtonMenuItem insertItem = new JRadioButtonMenuItem(“Insert”); 单选按钮菜单项

insertItem.setSelected(true);   设置默认状态为选中

JRadioButtonMenuItem overtypeItem = new JRadioButtonMenuItem(“overtype”);

group.add(insertItem);             group.add(overtypeItem);     添加至组

optionMenu.add(insertItem);             optionMenu.add(overtypeItem);    添加至菜单

使用isSelected方法来测试菜单项的当前状态(当然,这以为着应该保留一个实例域保存这个菜单项的引用)。

使用setSelect方法设置状态。

复选框单选框菜单方法说明:

javax.swing.JCheckBoxMenuItem 1.2

JCheckBoxMenuItem(String label)  用给定的标签构造一个复选框菜单项。

JCheckBoxMenuItem(String label,boolean state)

用给定的标签和给定的初始状态,(true为选定)构造一个复选框菜单。

-----------------------------------------------------

javax.swing.JRadioButtonMenuItem 1.2

JRadioButtonMenuItem(String label) 用给定的标签构造一个单选按钮菜单项。

JRadioButtonMenuItem(String label,boolean state) 

用给定的标签和给定的初始状态(true为选定)构造一个单选按钮菜单项。

-----------------------------------------------------

javax.swing.AbstractButton 1.2

boolean isSelected()

voidsetSelected(boolean state)  获取或设置这个菜单项的选择状态(true为选定)

-----------------------------------------------------


十二、弹出菜单

弹出菜单(pop-upmenu)是不固定在菜单栏中随处浮动的菜单。创建一个弹出菜单与创建一个常规菜单的方法类似

但是弹出菜单没有标题。

创建弹出菜单:JPopupMenu popup = newJPopupMenu();

给弹出菜单添加菜单项:popup.add(menuitem);

弹出菜单并不像常规菜单栏那样总是显示在框架顶部,必须调用show方法菜单才能显示出来。调用时需给出父组件及

相对父组件左边的显示位置。例如:  popup.show(panel,x,y);

要想在用户点击某一个组件时弹出菜单,需按照下列方式调用方法:component.setComponentPopupMenu(popup);


弹出菜单方法说明:

javax.swing.JPopupMenu 1.2

void show(Component c,int x,int y)显示一个弹出菜单参数为显示弹出菜单的组件及左上角

boolean isPopupTrigger(MouseEvent event)1.3若鼠标事件是弹出菜单的触发器则返回true。
-----------------------------------------------------

java.awt.event.MouseEvent 1.2

boolean isPopupTrigger()  如果鼠标事件是弹出菜单触发器,则返回true。

-----------------------------------------------------

javax.swing.JComponent 1.2

JPopupMenu getComponentPopupMenu() 5.0

void setComponentPopupMenu(JPopupMenu popup) 5.0获取/设置用于这个组件的弹出菜单。

boolean getInheritsPopupMenu() 5.0

voidsetInheritsPopupMenu(boolean b) 5.0     获取或设置inheritsPopupMenu特性。

-----------------------------------------------------

可以通过在菜单项的构造器中指定一个快捷字母来为菜单项设置快捷键:

构造菜单并设置快捷键:JmenuItem aboutItem = new JmenuItem(“About”,”A”);

快捷键会自动地显示在菜单项中,并带有一条下划线。

可以调用setDisplayedMnemonicIndex方法指定希望加下划线的字符(例如SaveAs)。

如果有一个Action对象,就可以把快捷键作为Action.MNEMONIC_KEY的键值添加到对象中。如:cutAction.putValue(Action.MNEMONIC_KEY,newInteger(‘A’));

如果想为菜单设置快捷键,需要调用setMnemonic方法:

JMenuhelpMenu = new JMenu(“help”);    helpMenu.setMnemonic(‘H’);

使用setAccelerator将加速器键关联到一个菜单项上。这个方法使用KeyStroke类型的对象作为参数。例如:下面的调用将加速器CTRL+O关联到OpenItem菜单项:openItem.setAccelerator(KeyStroke.getKeyStroke(“ctrl0”));

加速器只能关联到菜单项上不能关联到菜单上。加速器并不实际打开菜单,它将直接地激活菜单关联的动作事件。

当加速器添加到菜单项时,对应的组合键就会自动地显示在相应菜单上。

菜单快捷键方法说明:

javax.swing.JmenuItem 1.2

JmenuItem(Stringlabel,int mnemonic)  用给定的标签和快捷键字符构造一个菜单项。

voidsetAccelerator(KeyStroke k )  将k设置为这个菜单项的加速器(显示在标签的旁边)。

-----------------------------------------------------

javax.swing.AbstractButton 1.2

voidsetMnemonic(int mnemonic)设置按钮的快捷字符(会在标签中以下划线的形式显示)。

voidsetDisplayedMnemonicIndex(int index) 1.4

将按钮文本中的index字符设定为带下划线不希望第一个出现的快捷键字符带下划线可用。

-----------------------------------------------------

可以对菜单项设置禁用状态,以便屏蔽掉这些暂时不使用的命令禁用菜单项显示为灰色。

启用或禁用菜单项:saveItem.setEnabled(false);    // 禁用

启用和禁用菜单项有两种策略。每次环境发生变化就对相关的菜单项或动作调用

setEnabled。另一种方法是在显示菜单之前就禁用这些菜单项。这里必须为“menuselected” 

事件注册监听器。swing.event包定义了MenuListener接口,他包含三个方法:

voidmenuSelected(MenuEvent event)、

voidmenuDeselected(MenuEvent event)、

voidmenuCanceled(MenuEvent event) 

由于在菜单显示之前调用menuSelected方法,所以可以在这个方法中禁用或启用菜单项。

只读复选框菜单项别选择后,如何进入Save和Save As动作:

public void menuSelected(MenuEvent event)

{

         saveAction.setEnabled(!readonlyItem.isSelected());

         saveAsAction.setEnabled(!readonlyItem.isSelected());  

}


菜单项方法说明:

javax.swing.JmenuItem 1.2

void setEnabled(boolean b)  启用或禁用菜单项。

-----------------------------------------------------

javax.swing.event.MenuListener 1.2

void menuSelected(MenuEvent e)  在菜单被选择但尚未打开之前调用。

void menuDeselected(MenuEvent event) 在菜单被取消选择并且已经关闭之后调用。

voidmenuCanceled(MenuEvent event)  当菜单被取消时调用。


十三、工具栏

工具栏是在程序中提供的快速访问常用命令的按钮栏。

工具栏只有位于采用边框布局或者任何支持North、East、South和West约束布局管理器的容器内才能够被拖拽。

工具栏可以完全脱离框架。这样的工具栏包含在自己的框架中,当关闭包含工具栏的框架时他会回到原始的框架中。

创建工具栏并添加按钮:JToolBar bar = newJToolBar();  bar.add(blueButton);

JToolBar类还有一个用来添加Action对象的方法,可以用Action对象填充工具栏:bar.add(blueAction);

可以用分隔符将按钮分组:bar.addSeparator();

将工具栏添加到框架中:add(bar,BorderLayout.NORTH);

当工具栏没有停靠时,可以指定工具栏的标题:bar = newJToolBar(titleString);

在默认情况下,工具栏最初为水平的。如果想要将工具栏垂直放置,可以使用下列代码:

bar= new JToolBar(SwingConstants.VERTICAL);

bar = newJToolBar(titleString,SwingConstants.VERITICAL);

可以往工具栏中加入组合框。

工具提示(tooltips)。当光标停留在某个按钮上片刻时,工具提示就会被激活。工具提示文本显示在一个有颜色的矩形里。当用户移开鼠标时,工具提示就会自动消失。

调用setToolText方法将工具提示添加到JComponent上:exitButton.setToolTipText(“Exit”);

如果使用Action对象,就可以用SHORT_DESCRIPTION关联工具提示:

exitAction.putValue(Action.SHORT_DESCRIPTION,”EXIT”);


工具栏方法说明:

javax.swing.JToolBar 1.2

JToolBar()

JToolBar(String titleString)

JToolBar(int orientation)

JToolBar(String titleString,int orientation) 用给定的标题字符串和方向构造一个工具栏。Orientation可以是SwingConstants.HORIZONTAL(默认)或SwingConstants.VERTICAL。

JButtonadd(Action a) 用给定的动作名、图标、简要的说明和动作回调构造一个工具栏中的新按钮。

voidaddSeparator()  将一个分隔符添加到工具栏的尾部。

-----------------------------------------------------


十四、对话框

AWT也分为模式对话框和无模式对话框。

所谓模式对话框是指在结束对它的处理之前,不允许用户与应用程序的其余窗口进行交互。模式对话框主要用于在程序继续运行之前获取用户提供的信息。

所谓无模式对话框是指允许用户同时在对话框和应用程序的其他窗口中输入信息。使用无模式对话框的最好例子就是工具栏。

Swing有一个很容易使用的类JOptionPane,它可以弹出一个简单的对话框,而不必编写任何对话框代码。

Swing有一套简单的对话框,用于获取用户的一些简单信息。JOptionPane有4个用于显示这些对话框的静态方法:

showMessageDialog:显示一条消息并等待用户点击OK。

showConfirmDialog:显示一条消息并等待用户确认(类似OK/Cancel)

showOptionDialog:显示一条消息并获得用户在一组选项中的选择

showInputDialog:显示一条消息并获得用户输入的一行文本。

每个对话框类型都有一个方法,可以用来提供自己的图标,以替代原来的图标。可以为每个对话框类型指定一条消息。这里的消息既可以是字符串、图标、用户界面组件,也可以是其他类型的对象。下面是显示消息对象的基本方式:String、Icon、Component、Object[]

位于底部的按钮取决于对话框类型和选项类型调用showMessageDialog和showInputDialog时,只能看到一组标准按钮(分别是OK/Cancel)。当调用showConfirmDialog时,可以选择下面四种选项类型之一:DEFAULT_OPTION、YES_NO_OPTION、YES_NO_Cancel_OPTION、OK_CANCEL_OPTION

showConfirmDialog和showOptionDialog返回一个整数用来表示用户选择了哪个按钮。对于选项对话框来说,这个值就是被选的选项的索引值或者是CLOSE_OPTION。对于确认 对话框,返回值可以是下列值之一:OK_OPTION、CANCEL_OPTION、YES_OPTION、NO_OPTION、CLOSE_OPTION


对话框方法说明:

javax.swing.JOptionPane 1.2

static voidshowMessageDialog(Component parent,Object message,String title,intmessageType,Icon icon)

static voidshowMessageDialog(Component parent,Object message,String title,int messageType)

staticvoid showMessageDialog(Component parent,Object message)

staticvoid showInternalMessageDialog(Component parent,Object message,String title,intmessageType,Icon icon)

staticvoid showInternalMessageDialog(Component parent,Object message,String title,intmessageType)

static void showInternalMessageDialog(Component parent,Object message)

显示一个消息对话框或者一个内部消息对话框(内部对话框完全显示在所在的框架内)

static intshowConfirmDialog(Component parent,Object message,String title,intoptionType,int messageType,Icon ic)

static intshowConfirmDialog(Component parent,Object message,String title,intoptionType,int messageType)

static intshowConfirmDialog(Component parent,Object message,String title,int optionType)

static intshowConfirmDialog(Component parent,Object message)

static intshowInternalConfirmDialog(Component parent,Object messag,String titl,intoptionType,int messageType,Icon icon)

static intshowInternalConfirmDialog(Component parent,Object message,String title,intoptionType,int messageType)

static intshowInternalConfirmDialog(Component parent,Object message,String title,int optionType)

static intshowInternalConfirmDialog(Component parent,Object message)

显示一个确认对话框或者内部确认对话框(内部对话框完全显示在所在的框架内)返回用

户选择的选项(取值为:OK_OPTION、CANCEL_OPTION、YES_OPTION、NO_OPTION)

static intshowOptionDialog(Component parent,Object message,String title,intoptionType,int messageType,Icon icon,Object[] options,Object default)

static intshowInternalOptionDialog(Component parent,Object message,String title,intoptionType,int messageType,Icon icon,Object[] options,Object default)

显示一个选项对话框或者内部选项对话框(内部对话框完全显示在所在的框架内)。返回

用户选择的选项索引;如果用户取消对话框返回CLOSED_OPTION。

static Object showInputDialog(Componentparent,Object message,String title,intmessageType,Icon icon,Object[] values,Object default)

static StringshowInputDialog(Component parent,Object message,String title,intmessageType)

static StringshowInputDialog(Component parent,Object message)

static StringshowInputDialog(Object message)

static StringshowInputDialog(Component parent,Object message,Object default) 1.4

static StringshowInputDialog(Object message,Object default) 1.4

static ObjectshowInternalInputDialog(Component parent,Object message,String title,intmessageType,Icon icon,Object[] values,object default)

static ObjectshowInternalInputDialog(Component parent,Object message,String title,intmessageType)

static StringshowInternalInputDialog(Component parent,Object message)

显示一个输入对话框或者内部输入对话框(内部对话框完全显示在所在的框架内)。返回

用户输入的字符串;如果用户取消对话框返回null。


创建一个对话框,需要从JDialog派生一个类。具体过程如下:

    1、在对话框构造器中,调用超类JDialog的构造器。

    2、添加对话框的用户界面组件。

    3、添加事件处理器。

    4、设置对话框的大小。

在调用超类构造器时,需要提供拥有者框架、对话框标题及模式特征。拥有者框架控制对话框的显示位置,如果将拥有者标识为null,那么对话框将由一个隐藏框架所拥有。模式特征将指定对话框处于显示状态时,应用程序中其他窗口是否被锁住。无模式对话框不会锁住其他窗口,而有模式对话框将锁住应用程序中的所有其他窗口。

要想显示对话框,需要建立一个新的对话框对象,并让他可见:

JDialog dialog= new AboutDialog(this);

dialog.setVisible(true);


十五、文件对话框

一个好的文件对话框应该可以显示文件和目录,可以让用户浏览文件系统。Swing中提供了JFileChooser类,它可以显示一个文件对话框,其外观与本地应用程序中使用的文件对话框基本一样。JFileChooser是一个模式对话框。注意,JFileChooser类并不是JDialog类的子类。需要调用showOpenDialog,而不是调用setVisible(true)显示打开文件的对话框,或者调用showSaveDialog显示保存文件的对话框。接收文件的按钮被自动地标签为Open

或者Save。也可以调用showDialog方法为按钮设定标签。

建立文件对话框并且获取用户选择信息的步骤:

1、建立一个JFileChooser对象。与JDialog类的构造器不同,它不需要指定父组件。允许在多个框架中重用一个文件选择器。JFileChooser chooser = new JFileChooser();

2、调用setCurrentDirectory方法设置当前目录。chooser.setCurrentDirectory(newFile(“.”));构造器File(String fileName)能够将一个文件或目录名转化为一个File对象。

3、如果有一个想要作为用户选择的默认文件名,可以使用setSelectedFile方法进行指定:

chooser.setSelectedFile(new File(filename));

4、如果允许用户在对话框中选择多个文件,需要调用setMultiSelectionEnabled可选方法:

chooser.setMultiSelectionEnabled(true); 

5、如果想让对话框仅显示某一种类型的文件,需要设置文件过滤器。

6、默认情况下,用户在文件选择器中只能选择文件。如果希望选择目录,需要调用方法:setFileSelectionMode方法

7、调用showOpenDialog或者showSaveDialog方法显示对话框。必须为这些调用提供父组件:

int result = chooser.showOpenDialog(parent);或int result =chooser.showSaveDialog(parent);这些调用的区别是“确认按钮”的标签不同。点击“确认按钮”将完成文件选择。也可以调用showDialog方法,并将一个显示的文本传递给确认按钮:int result = chooser.showDialog(parent,”Select”); 仅当用户确认、取消或离开对话框时才返回调用。

8、调用getSelectedFile()或getSelectedFiles()方法获取用户选择的一个或多个文件。这些方法将返回一个文件对象或者一组文件对象。如果需要知道文件对象名时,可以调用 getPath方法:

String filename = chooser.getSelectedFile().getPath();

若想限制显示的文件,需创建一个实现抽象类javax.swing.filechooser.FileFilter的对象。    文件选择器将每个文件传递给文件过滤器,只有文件过滤器接受的文件才被最终显示出来。

设计专用文件过滤器只要实现FileFilter超类中的两个方法即可:

public Booleanaccept(File f);     public StringgetDescription();  第一个方法检测是否应该接受一个文件,第二个方法返回显示在文件选择器对话框中显示的文件类型的描述信息。

有了文件过滤器对象,就可以调用JFileChooser类中的setFileFilter方法,将这个对象安装到文件选择器对象中(可以为一个文件选择器安装多个过滤器):chooser.setFileFilter(newFileNameExtensionFilter(“Image files”,”gif”,”jpg”));

用户可以从文件对话框底部的组合框中选择过滤器。默认情况,All files过滤器总是显示在组合框中。想禁用All files过滤器,需要调用:chooser.setAcceptAllFilterUsed(false);

chooser.resetChoosableFilters() 方法可以在添加新文件过滤器之前清除旧文件过滤器。

可以通过为文件选择器显示的每个文件提供特定的图标和文件描述来定制文件选择器。这需要应用一个扩展于javax.swing.filechooser包中的FileView类对象。这时一个高级技巧。如果想让某种特定的文件类型显示不同的图标,就需要安装自己的文件视图。这要扩展FileView并实现下面5个方法:   Icon getIcon(File f);     String getName(File f);  

StringgetDescription(File f); String getTypeDescription(File f); BooleanisTraversable(File f);然后,调用setFileView方法将文件视图安装到文件选择器中。

文件选择器调用isTraversable方法来决定是否在用户点击一个目录的时候打开这个目录。

注意,此方法返回一个Boolean对象,而不是boolean值。这个方法返回的Boolean对象能给出三种选择:Boolean.TRUE、Boolean.FALSE和null(不关心)

可以调用setFileView方法将这个文件视图安装到文件选择器中:

chooser.setFileView(newFileIconView(filter,new ImageIcon(“palette.gif”)));

可以通过添加一个附件组件来定制文件对话框。附件可以是任何Swing组件。


文件对话框方法说明:

javax.swing.JFileChooser 1.2

JFileChooser()  创建一个可用于多框架的文件选择器对话框。

voidsetCurrentDirectory(File dir)  设置文件对话框的初始目录。

voidsetSelectedFile(File file)

voidsetSelectedFiles(File[] file)  设置文件对话框的默认文件选择。

voidsetMultiSelectionEnabled(boolean b)  设置或清除多选模式。

voidsetFileSelectionMode(int mode) 

设置用户选择模式,只可以选文件(默认)、只能选目录,或文件目录均可选择。

intshowOpenDialog(Component parent)

intshowSaveDialog(Component parent)

intshowDialog(Component parent,String approveButtonText)

显示按钮标签为Open,Save或者为approveButtonText字符串的对话框。

FilegetSelectedFile()

File[]getSelectedFiles() 获取用户选择的一个或多个文件,没有选择文件返回null。

voidsetFileFilter(FileFilter filter)  设置文件对话框的过滤器。

void addChoosableFileFilter(FileFilter filter) 将文件过滤器添加到可选过滤器列表中。

void setAcceptAllFileFilterUsed(boolean b)  在过滤器组合框中包括或取消All files过滤器。

void resetChoosableFileFilters() 

清除可选过滤器列表。除非Allfiles过滤器被显式地清除,否则它仍然会存在。

void setFileView(FileView view)  设置一个文件视图来提供文件选择器显示信息。

voidsetAccessory(JComponent component)  设置一个附件。

-----------------------------------------------------

javax.swing.filechooser.FileFilter 1.2

booleanaccept(File f)  如果文件选择器可以显示这个文件,返回true。

StringgetDescription()  返回这个文件过滤器的说明信息,例如Imagefiles(*.gif,*.jpeg)。

-----------------------------------------------------

javax.swing.filechooser.FileNameExtensionFiler6

FileNameExtensionFilter(Stringdescription,String…extensions) 

利用给定的描述构造一个文件过滤器。这些描述限定了被接受的所有目录和文件其名称结

尾的句点之后所包含的扩展字符串。

-----------------------------------------------------

javax.swing.filechooser.FileView 1.2

StringgetName(File f)  返回文件f的文件名,或者null。通常这个方法返回f.getName()。

StringgetDescription(File f) 返回文件f的可读性描述,或者null。例如,如果f是HTML

文档,那么此方法可能返回它的标题。

StringgetTypeDescription(File f)   返回文件的类型的可读性描述。例如,如果f是HTML

文档,那么此方法可能返回Hypertext document字符串。

IcongetIcon(File f)  返回文件f的图标,或者null。例如,如果f是JPEG文件,那么这个

方法有可能返回简略的图标。

BooleanisTraversable(File f)  如果f是用户可以打开的目录,返回Boolean.TRUE。




你可能感兴趣的:(java学习笔记图形程序设计及GUI应用小结(3))