资源预览内容
第1页 / 共108页
第2页 / 共108页
第3页 / 共108页
第4页 / 共108页
第5页 / 共108页
第6页 / 共108页
第7页 / 共108页
第8页 / 共108页
第9页 / 共108页
第10页 / 共108页
亲,该文档总共108页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第七讲 图形用户界面的设计与实现布局管理器n回忆前面的程序,向一个面板中加了三件按钮,所有的按钮都是排成一行。n如果加更多,直到一行排不了,分行。n按钮总是居中显示。n实际上,是有一个布局管理器在背后起作用。n只要是容器都可以更改布局。FlowLayout流式布局n上例中的JPanel就是。nJava.awt.Container setLayout(LayoutManger m)nJava.awt.FlowLayout FlowLayout(int align) 新的流式布局 align-可选LEFT(左),CENTER(中),RIGHT(右) FlowLayout(int aligh,int hgap,int vgap) hgap-水平间隙(负值强制相互重叠) vgap-重直 BorderLayout 边框布局NorthCenterEastWestSouthBorderLayoutn这是每个JFrame的内容窗格的默认布局管理器。它和流布局管理器完全控制每个组件的位置不同,边界布局管理器让你选择每个组件的摆放位置。你可以选择把组件放在内容窗格的中部、北部、南部、东部或者西部。BorderLayout1. Void add(Component c,Object Constraints)把一个组件添加到容器中。参数:c 添加的组件constraints 布局管理器理解的标识符2. BorderLayout(int hgap,int vgap)根据指定的组件水平和垂直间距来构造一个新的BorderLayout。参数:hgap水平间距(以像素为单位,如果为负,则强 制进行重叠)vgap垂直间距(以像素为单位,如果为负,则强 制进行重叠)BorderLayoutn经常将面板和BorderLayout合在一起用。n面板如同界面元素的小容器,并且在局面管理器的控制之下,它们自己能够排列在一个更大的面板中。例如,你可以把一个面板放在南边用于容纳按钮,而另一个面板放在中部用于显示文本JPanel(LayoutManager m)为面板设置布局管理器n显示几个按钮,以窗体下方对齐。示例Container contentPane = getContentPane();JPanel panel = new JPanel();JButton yellowButton = new JButton(yellow);JButton blueButton = new JButton(blue);JButton redButton = new JButton(red);panel.add(yellowButton);panel.add(blueButton);panel.add(redButton);。Container contentPane = getContentPane();contentPane.add(panel,BorderLayout.SOUTH);网格布局管理器n网格布局按行列来排列所有的组件,就像电子数据表一样。然而,对于网格布局。各个单元总是一样的大小。 例如:设定行列数 panel.setLayout(new GridLayout(5,4); 添加组件,从第一行的第一列开始,然后是第一行的第二列,并这样持续下去。网袋布局n网袋布局是所有的布局管理器中最强大的一种。在一个网袋布局中,行和列的尺寸均可改变,并且可以合并相邻的单元格来适应更大的组件。组件不需要填充整个单元格区域,并且可以指定单元格内的对齐方式。n使用网袋布局管理器进行布局的步骤如下:n创建一个GridBagLayout类型的对象n把此GridBagLayout对象设成组件的布局管理器n创建一个GridBagConstraints类型的对象n对于每一个组件,填充GridBagConstraints对象n约束ngridx,gridy,gridwidth,gridheight参数gridx,gridy值定义了添加组件左上角的行和列位置。而gridwidth,gridheight值指定了组件占用的行数和列数n增量字段(weightx,weighty)设置单元格增量的最大值nfill,anchor参数fill有个有效值:GridBagConstraints.NONE, GridBagConstraints.HORIZONTAL, GridBagConstraints.VERTICAL, GridBagConstraints.BOTHanchor取值:GridBagConstraints.CENTER, GridBagConstraints.NORTH, GridBagConstraints.NORTHEAST, GridBagConstraints.EAST等等n填塞(Insets,ipadx,ipady)Insets用来设置组件周围的空间量,这称作外部填塞,它有left,top,right,bottom个值ipadx,ipady的设置称作内部填塞。这两个值被加到组件的最小宽度和最小高度上n例子:package src;import java.awt.*;import javax.swing.*;public class GridBagDemo extends JFrameJLabel face,size;JComboBox comboface,combosize;JCheckBox bold,italic;JTextArea text;public GridBagDemo()Container contentPane = getContentPane();GridBagLayout gridbag = new GridBagLayout();GridBagConstraints c = new GridBagConstraints();contentPane.setLayout(gridbag);face = new JLabel(Face:);c.gridx = 0;c.gridy = 0;gridbag.setConstraints(face,c);contentPane.add(face);comboface = new JComboBox();comboface.addItem(Serif);c.gridx = 1;c.gridy = 0;c.ipadx = 60;c.fill = GridBagConstraints.BOTH;gridbag.setConstraints(comboface,c);contentPane.add(comboface);size = new JLabel(Size:);c.ipadx = 0;c.ipady = 0;c.gridx = 0;c.gridy = 1;gridbag.setConstraints(size,c);contentPane.add(size);combosize = new JComboBox();combosize.addItem(18);c.ipadx = 60;c.gridx = 1;c.gridy = 1;c.fill = GridBagConstraints.BOTH;gridbag.setConstraints(combosize,c);contentPane.add(combosize);bold = new JCheckBox(Bold:);c.ipady = 30;c.gridx = 1;c.gridy = 2;c.gridheight = 1;c.anchor = GridBagConstraints.CENTER;gridbag.setConstraints(bold,c);contentPane.add(bold);italic = new JCheckBox(Italic);c.gridx = 1;c.gridy = 3;gridbag.setConstraints(italic,c);contentPane.add(italic);text = new JTextArea();text.setLineWrap(true);JScrollPane scroll = new JScrollPane(text);c.ipadx = 0;c.gridx = 2;c.gridy = 0;c.gridheight = 4;c.gridwidth = 1;gridbag.setConstraints(scroll,c);contentPane.add(scroll);pack();setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);public static void main(String args)new GridBagDemo();弹簧布局nSprintLayout.Constraints getConstraints(Component c)得到给定组件的约束参数:c该布局管理器管理的组件或者容器之一nvoid putConstraint(String endSide,Component end,Sprint s,String startSide,Component Start)nvoid putConstraint(String endSide,Component end,int pad,String startSide,Componet start)设置end组件给定的边为一个弹簧,该弹簧是这样得到的:通过添加弹簧s,或者有pad尺寸的支柱到一个弹簧,此弹簧从end容器的左边到达start容器的给定边参数:endSide,startSideWEST,EAST,NORTH,SOUTH end添加弹簧的组件 s添加的弹簧 pad被加支柱的尺寸 start其他被加弹簧到达的组件nSpring getX()nSpring getY()返回从窗口开始处到达约束组件西边或者北边结束处的弹簧nSpring getWidth()nSpring getHeight()返回跨越约束组件宽度或者高度的弹簧nSpring getConstraint(String side)nvoid setConstraint(String edge,Spring s)得到或者设置从容器开始处到达约束组件给定边界的弹簧参数:sideSprinLayout类的 WEST,EAST,NORTH,SOUTH常量之一 s被设置的弹簧nstatic Spring constant(int preferred)用给定的首选值构造一个支柱.最小和最大值被设置为首选值nstatic Spring constant(int minimum,int preferred,int maximum)用给定的最小值,首选值和最大值构造一个弹簧nstatic Spring sum(Spring s,Spring t)返回弹簧s和t的和nstatic Spring max(Spring s,Spring t)返回弹簧s和t的最大值nstatic Spring minus(Spring s)返回弹簧s的相反值nint getMinimumValue()nint getPreferredvalue()nint getMaximumvalue()返回弹簧的最小值,首选值和最大值nint getValue()nvoid setValue(int newValue)得到或者设置弹簧的值例子: (SpringDemo.java)复杂的布局管理n箱式布局n箱式布局要比网格布局灵活得多,它可以布置单行或单列组件。有一个容器Box类它的默认布局管理器是BoxLayout。nstatic Box CreateHorizontalBox()nstatic Box CreateVerticalBox()创建一个水平或垂直排列其内容的容器nstatic Component createHorizontalGlue()nstatic Component createVerticalGlue()nstatic Component createGlue()创建一个能够在水平、垂直或者两个方向上无限延伸的不可见组件nstatic Component createHorizontalStrut(int width)nstatic Component createVerticalStrut(int height)nstatic Component createRigidArea(Dimension d)创建一个具有固定宽度、固定高度或者固定宽度和高度不可见组件nfloat getAlignmentX()nfloat getAlignmentY()返回x或y轴上的对齐方式,该值介于到之间。代表对齐到顶部或左边;0.5表示中间;代表对齐到底部或右边n例子:package src;import java.awt.*;import javax.swing.*;public class BoxLayoutDemo extends JFrameJLabel lab_name,lab_password;JTextField text_name,text_password;JButton btn_Ok,btn_Cancel;Box box_name,box_pass,box_button,vbox;public BoxLayoutDemo()lab_name = new JLabel(Name);lab_password = new JLabel(Password);text_name = new JTextField(10);text_name.setMaximumSize(text_name.getPreferredSize();text_password = new JTextField(10);text_password.setMaximumSize(text_password.getPreferredSize();btn_Ok = new JButton(OK);btn_Cancel = new JButton(Cancel);box_name = Box.createHorizontalBox();box_name.add(lab_name);box_name.add(Box.createHorizontalStrut(10);box_name.add(text_name);box_pass = Box.createHorizontalBox();box_pass.add(lab_password);box_pass.add(Box.createHorizontalStrut(10);box_pass.add(text_password);box_button = Box.createHorizontalBox();box_button.add(btn_Ok);box_button.add(Box.createGlue();box_button.add(btn_Cancel);vbox = Box.createVerticalBox();vbox.add(box_name);vbox.add(box_pass);vbox.add(Box.createGlue();vbox.add(box_button);Container contentPane = getContentPane();contentPane.add(vbox,BorderLayout.CENTER);pack();setSize(200,200);setVisible(true);public static void main(String args)new BoxLayoutDemo();其它布局n不使用布局管理器n不使用布局管理器可以把一个组件放在一个固定位置上(绝对定位)n绝对定位的步骤:n把布局管理器设为nulln把组件添加到容器中n指定需要的位置和大小nvoid setBounds(int x,int y,int width,int height)移动并缩放一个组件参数:x,y组件左上角的新位置 width,height组件的新尺寸n例子:package src;import java.awt.*;import javax.swing.*;public class LayoutnullDemo extends JFrameJButton first,second,third,fourth;public LayoutnullDemo()Container contentPane = getContentPane();contentPane.setLayout(null);first = new JButton(First);first.setBounds(10,10,70,30);second = new JButton(Second);second.setBounds(120,10,90,30);third = new JButton(Third);third.setBounds(20,50,70,30);fourth = new JButton(Fourth);fourth.setBounds(100,70,90,30);contentPane.add(first);contentPane.add(second);contentPane.add(third);contentPane.add(fourth);pack();setSize(250,150);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);public static void main(String args)new LayoutnullDemo();对话框n选项对话框nSwing提供一些简单对话框用于收集用户的一些简单信息.nJOptionPane有四个静态方法来显示这些简单对话框:nshowMessageDialog:显示一条消息并等待用户点击OKnshowconfirmDialog:显示一条消息并得到确认nshowOptionDialog:显示一条消息并得到用户在一组选项中的选择nshowImputDialog:先是一条消息并得到用户的一行输入n例子:package src;import javax.swing.*;import java.awt.event.*;public class OptionDialogDemoJFrame frame;public OptionDialogDemo()frame = new JFrame();final JButton button = new JButton(Joption);button.addActionListener(new ActionListener()public void actionPerformed(ActionEvent event)JOptionPane.showMessageDialog(frame,This is OptionPane,JOptionPane,JOptionPane.WARNING_MESSAGE););frame.getContentPane().add(button);frame.pack();frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);public static void main(String args)new OptionDialogDemo();n创建对话框n在对话框的构造器中,调用基类JDialog的构造器n添加该对话框的用户界面组件n添加事件处理器n设置对话框的大小例子:(DialogDemo.java)文件对话框nJFileChooser()创建一个可用于多个框架的文件选择对话框nvoid setCurrentDirectory(File dir)为文件对话框设置初始目录nvoid getSelectedFile()nvoid getSelectedFiles()得到用户选择的一个或多个文件(如果用户不做任何选择,则返回null)nstring getName(File f)返回文件f的文件名,或者nulln例子:package src;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class FileChooserDemoJFileChooser filechooser; JFrame frame;public FileChooserDemo()JButton button = new JButton(Chooser);frame = new JFrame();button.addActionListener(new ActionListener()public void actionPerformed(ActionEvent event)filechooser = new JFileChooser();int result = filechooser.showOpenDialog(frame);if (result = filechooser.OPEN_DIALOG)System.out.println(filechooser.getName(filechooser.getSelectedFile(););frame.getContentPane().add(button,BorderLayout.SOUTH);frame.pack();frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);public static void main(String args)new FileChooserDemo();颜色选择器nJColor Chooser()构造一个初始颜色为白色的颜色选择器nColor getColor()nvoid setColor(Color c)得到和设置该颜色选择器的当前颜色nstatic Color showDialog(Component parent,string title,Color initialColor)显示一个包含一个颜色选择器的模式对话框参数:parent 对话框显示在其上的组件 title对话框框架的标题 initialColor显示在颜色选择器中的初始颜色nstatic JDialog createDialog(Component parent,String title,boolean modal,JColorChooser chooser,ActionListener okListener)创建一个包含一个颜色选择器的对话框参数:parent对话框显示在其上的组件 title对话框框架的标题 modal如果该调用应该一直阻塞到对话框被关闭为止,那么该值为false chooser添加到该对话框中的颜色选择器 okListener, cancelListener OK和Cancel按钮的监听器n例子:package src;import java.awt.event.*;import java.awt.*;import javax.swing.*;public class ColorChooserDemoJButton button;JColorChooser colorchooser;JFrame frame;JPanel panel;JDialog dialog;public ColorChooserDemo()frame = new JFrame();panel = new JPanel();button = new JButton(Color);colorchooser = new JColorChooser();dialog = JColorChooser.createDialog(frame,ColorChooser,false,colorchooser,new ActionListener()public void actionPerformed(ActionEvent e)panel.setBackground(colorchooser.getColor(); ,null);button.addActionListener(new ActionListener()public void actionPerformed(ActionEvent event)dialog.show(););panel.setLayout(new GridLayout(2,1);panel.add(button);frame.getContentPane().add(panel);frame.pack();frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);public static void main(String args)new ColorChooserDemo();文本输入JTextField与JTextArean在Java中,有两个组件用于文本输入:文本框和文本区。二者的区别在于文本框只能接受单行文本输入而文本区可以接受多行文本输入。对应单行文本输入的类为JTextField,而对应多行文本的类为JTextArea。nvoid setText(String t)改变一个文本组件中的文本参数:t 新文本nString getText()返回包含在该文本组件中的文本nvoid setEditable(boolean b)决定用户是否能够编辑JTextComponent的内容文本框nJTextField(int cols)参数:cols文本框的列数nJTextField(String text,int cols)使用初始字符串和指定的列数来构造一个新的JTextField参数:text显示的文本 cols文本框的列数nint getLength()返回当前文档中的字符个数nString getText(int offset,int length)返回文档中给定段所包含的文本例:package src;import javax.swing.*;import java.awt.*;public class TextDemo extends JFramepublic TextDemo()Container contentPane = getContentPane();JPanel panel = new JPanel();JTextField text = new JTextField(TextField);panel.add(text);contentPane.add(panel,BorderLayout.CENTER);pack();setSize(100,70);setVisible(true);public static void main(String args)new TextDemo();密码框 JPasswordFieldn密码框是一种特殊的文本框。为了避免有心人看到密码,用户输入的字符实际上并没有显示出来。取代的方法是:每一个输入的字符被回显字符代替,一般是星号“*”。Swing提供的JPasswordField类实现了这种文本框。nJPasswordField(String text,int columns)创建一个新的密码框参数:text显示的文本如果没有则为null columns列数目nvoid setEchoChar(char echo)设置密码框的回显字符nchar getPassword()返回包含在密码框内的文本文本区n在一个文本区组件内,用户可以输入多行文本,换行的办法是使用ENTER键,在Java中每行都以一个n字符作为结尾。nJTextArea(int rows,int cols)构造一个新文本区参数:rows行数 cols列数nJTextArea(String text,int rows,int cols)使用一个初始字符中来构造一个新文本区参数:text初始文本 rows 行数 cols列数nvoid setColumns(int cols)设置文本区应该使用的列数参数:cols列数nvoid setRows(int rows)设置文本区应该使用的列数参数:rows行数nvoid append(String newText)把指定文本追加到文本区文本的末尾参数:newText需要追加的文本nvoid setLineWrap(boolean wrap)打开或关闭换行参数:wrap如果需要换行则为truenvoid setWrapStyleWord(boolean word)如果word为true,那么换行发生在单词边界处。如果它为false,那么换行不考虑单词边界问题nvoid setTabSize(int c)把跳格设为c列参数:c一个跳格的列数nJScrollpane(Component c)创建一个显示指定组件内容的滚动窗格参数:c需要滚动的组件n例子:package src;import java.awt.*;import javax.swing.*;public class TextAreaDemo extends JFramepublic TextAreaDemo()Container contentPane = getContentPane();JTextArea textarea = new JTextArea();textarea.setLineWrap(true);textarea.setRows(5);JScrollPane pane = new JScrollPane(textarea);contentPane.add(pane);pack();setSize(100,100);setVisible(true);public static void main(String args)new TextAreaDemo();标签和标签组件n标签是容纳文本的组件。这种组件没有修饰(例如,没有边界),它们也不响应用户输入。你可以使用一个标签来标识组件。例如,和按钮不同,文本组件没有标签来标识它们。给组件设置标签的方法如下:n使用正确的文本构造一个JLabel组件。n把该标签组件放置到同需要标识的组件足够近的地方,这样用户能够看到该标签标识了哪个组件。nJLabel(String text)使用左对齐字符串来构造一个标签参数:text标签中的文本nJLabel(Icon icon)使用左对齐图标来构造一个标签参数:icon标签中的图标nJLabel(String text,int align)参数:text标签中的文本 align取如下常量之一:SwingConstants.LEFT,SwingConstants.CENTER或者SwingConstants.RIGHTnJLabel(String text,Icon icon,int align)同时使用文本和图标来构造一个标签。图标显示在文本的左侧参数:text标签中的文本 icon标签中的图标 align取如下常量之一: SwingConstants.LEFT,SwingConstants.CENTER或者SwingConstants.RIGHTnvoid setText(String text)参数:text标签中的文本nvoid setIcon(Icon icon)参数:icon标签中的图标复选框nJCheckBox(String label)参数:label复选框上的标签nJCheckBox(String label,boolean state)参数:label复选框上的标签 state该复选框的初始状态nJCheckBox(String label,Icon icon)构造一个初始未被选择的复选框参数:label复选框上的标签 icon复选框上的图标nboolean isSelected()返回复选框的状态nvoid setSelected(boolean state)设置复选框的状态n例子:package temp;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class CheckBoxDemo extends JFrameJCheckBox bold;JCheckBox italic;JLabel label;public CheckBoxDemo()Container contentPane = getContentPane();label = new JLabel(This is CheckBox!);label.setFont(new Font(Serif,Font.PLAIN,15);bold = new JCheckBox(Bold);italic = new JCheckBox(Italic);JPanel panel = new JPanel();contentPane.add(label);panel.add(bold);panel.add(italic);contentPane.add(panel,BorderLayout.SOUTH);pack();setSize(200,100);setVisible(true);ActionListener listener = new ActionListener()public void actionPerformed(ActionEvent event)int mode = 0;if(bold.isSelected()mode += Font.BOLD;if(italic.isSelected()mode += Font.ITALIC;label.setFont(new Font(Serif,mode,15);bold.addActionListener(listener);italic.addActionListener(listener);public static void main(String args)new CheckBoxDemo();单选按钮nJRadioButton(String label,boolean state)参数:label单选按钮上的标签 state单选按钮的初始状态nJRadioButton(String label,Icon icon)构造一个初始未被选择的单选按钮参数: label单选按钮上的标签 icon单选按钮上的图标nButtonGroup()构造一个按钮组nvoid add(AbstractButton b)把按钮添加到组中nButtonModel getSelection()返回被选择按钮的按钮模型nString getActionCommand()返回此按钮模型的动作命令nvoid setActionCommand(String s)为该按钮及其模型设置动作命令n例子:package src;import java.awt.*;import javax.swing.*;import java.awt.event.*;public class RadioDemo extends JFrameJLabel label;JRadioButton radioSmall;JRadioButton radioLarge;ButtonGroup group;public RadioDemo()Container contentPane = getContentPane();JPanel panel = new JPanel();label = new JLabel(This is RadioButton!);label.setFont(new Font(Serif,Font.PLAIN,15);contentPane.add(label);group = new ButtonGroup();radioSmall = new JRadioButton(Small,true);radioLarge = new JRadioButton(Large);group.add(radioSmall);group.add(radioLarge);panel.add(radioSmall);panel.add(radioLarge);contentPane.add(panel,BorderLayout.SOUTH);pack();setSize(200,100);setVisible(true);radioSmall.addActionListener(new ActionListener()public void actionPerformed(ActionEvent event)label.setFont(new Font(Serif,Font.PLAIN,15););radioLarge.addActionListener(new ActionListener()public void actionPerformed(ActionEvent event)label.setFont(new Font(Serif,Font.PLAIN,20););public static void main(String args)new RadioDemo();边界n如果在一个窗口中有多组单选按钮,那么你需要从视觉上说明哪些按钮属于同一组。Swing提供了一组有用的边界来解决该问题。你可以在一个面板周围设置一种边界,然后用其他用户界面元素(如单选按钮)来填充该面板。n有几种不同边界可供选择,使用它们的步骤完全一样:n调用BorderFactory的一个静态方法来创建边界。可选风格如下:n低斜面n凸斜面n蚀刻n直线n不光滑n空(只是在组件周围创建一些空白地方)n给边界添加一个标题BorderFactory.createTitledBorder(String t)n把几种边界组合起来BorderFactory.createTitledBorder(Border b)n把结果边界添加到你的组件中,方法是调用JComponent类中的setBorder方法n例子:package src;import java.awt.*;import javax.swing.*;import javax.swing.border.*;public class BorderDemo extends JFrameJPanel buttonPanel = new JPanel();ButtonGroup group;public BorderDemo()Container contentPane = getContentPane();Border etched = BorderFactory.createEtchedBorder();Border titled = BorderFactory.createTitledBorder(etched,Border);JRadioButton first = new JRadioButton(first,true);JRadioButton second = new JRadioButton(second);JRadioButton third = new JRadioButton(third);group = new ButtonGroup();group.add(first);group.add(second);group.add(third);buttonPanel.add(first);buttonPanel.add(second);buttonPanel.add(third);buttonPanel.setBorder(titled);contentPane.setLayout(new GridLayout(2,1);contentPane.add(buttonPanel);pack();setVisible(true);public static void main(String args)new BorderDemo();组合框nvoid setEditable(boolean b)设置组合框是否可被编辑nvoid addItem(object item)把一个选项添加到选项列表中nvoid insertItemAt(object item,int index)把一个选项插入到选项列表的指定位置nvoid removeItem(object item)从选项列表中删除一个条目nvoid removeItemAt(int index)删除指定位置处的条目nvoid removeAllItems()删除列表中的全部条目nobject getSelectedItem()返回当前被选择的条目n例子:package src;import java.awt.*;import javax.swing.*;import java.awt.event.*;public class ComboDemo extends JFrameJComboBox combobox;JTextField text;JPanel panel;public ComboDemo()Container contentPane = getContentPane();panel = new JPanel();combobox = new JComboBox();combobox.addItem(Serif);combobox.addItem(SansSerif);combobox.addItem(Dialog);combobox.addItem(DialogInput);text = new JTextField();panel.add(combobox);contentPane.add(text,BorderLayout.NORTH);contentPane.add(panel,BorderLayout.CENTER);pack();setVisible(true);combobox.addActionListener(new ActionListener()public void actionPerformed(ActionEvent event)String comstr = combobox.getSelectedItem().toString();text.setText(comstr););public static void main(String args)new ComboDemo();滑块nJSlider()nJSlider(int direction)nJSlider(int min,int max)nJSlider(int min,int max,int initialValue)nJSlider(int direction,int min,int max,int initialValue)使用给定方向、最小值、最大值和初始值来构造一个水平滑块nvoid setPaintTicks(boolean b)设置是否显示标尺nvoid setMaxorTickSpacing(int units)nvoid setMinorTickSpacing(int units)设置滑块的大小标尺间距nvoid setPaintLabels(boolean b)设置是否显示标尺标签nslider.setLableTable(Dictionary table)设置用于标尺标签的组件nvoid setSnapToTicks(boolean b)设置每次调整后滑块是否要对齐到最近的标尺处n例子:package src;import java.awt.*;import javax.swing.*;import java.util.*;import javax.swing.event.*;public class SliderDemo extends JFrameJSlider slider;JTextField text;public SliderDemo()Container contentPane = getContentPane();slider = new JSlider(0,100,0);slider.setPaintLabels(true);slider.setPaintTicks(true);Hashtable labelTable = new Hashtable();labelTable.put(new Integer(0),new JLabel(0);labelTable.put(new Integer(20),new JLabel(20);labelTable.put(new Integer(40),new JLabel(40);labelTable.put(new Integer(60),new JLabel(60);labelTable.put(new Integer(80),new JLabel(80);labelTable.put(new Integer(100),new JLabel(100);slider.setLabelTable(labelTable);text = new JTextField(0);contentPane.add(slider,BorderLayout.NORTH);contentPane.add(text,BorderLayout.SOUTH);pack();setVisible(true);slider.addChangeListener(new ChangeListener()public void stateChanged(ChangeEvent event)text.setText(String.valueOf(slider.getValue(););public static void main(String args)new SliderDemo();JSpinner组件nJSpinner(微调控制器)也是文本框,它在一边带有两个小按钮,可以让你增加或者减少存储在文本框内的值。n在微调控制器中的值可以是数字、日期、来自列表的值和任何可以用前驱后继来决定的序列的值。nJSpinner()n构造一个编辑整数的微量控制器,初始值为0,增加为1,没有边界nJSpinner(SpinnerModel model)n以给定数据模型构造一个微量控制器nobject getValue()得到微量控制器的当前值nvoid setValue(Object value)设置微量控制器的值,如果该值无效则抛出IllegalArgumentException异常nvoid setEditor(JComponent editor)设置用来编辑微量控制器值的组件n例子:package src;import java.awt.*;import javax.swing.*;import javax.swing.event.*;public class SpinnerDemo extends JFrameJSpinner spinner;JTextField text;public SpinnerDemo()Container contentPane = getContentPane();spinner = new JSpinner();text = new JTextField();contentPane.add(spinner,BorderLayout.NORTH);contentPane.add(text,BorderLayout.SOUTH);pack();setVisible(true);spinner.addChangeListener(new ChangeListener()public void stateChanged(ChangeEvent event)text.setText(spinner.getValue().toString(););public static void main(String args)new SpinnerDemo();菜单n创建菜单nJMenu(String label)参数:label菜单栏菜单或父菜单的标签nJMenuItem add(JMenuItem item)添加一个菜单项(或菜单)nJMenuItem add(String label)添加一个菜单项到菜单中参数:label菜单项的标签nJMenuItem add(Action a)添加一个菜单项并且为其关联一个动作参数:a一个封装了名字、可选图标以及监听器的动作nvoid addSeparator()添加一个分隔行到菜单中nJMenuItem insert(JMenuItem menu,int index)把一个菜单项(或者子菜单)添加到菜单的指定位置处参数:menu被添加的菜单 index菜单项添加处的位置nJMenuItem insert(Action a,int index)把一个菜单项添加到菜单的指定位置处并为其关联一个动作参数:a一个封装了名字、可选图标以及监听器的动作 index菜单项添加处的位置nvoid insertSeparator(int index)把一个分隔符添加到菜单中参数:index添加分隔符的位置nvoid remove(int index)从菜单中删除指定菜单项参数:index被删除的菜单项位置nvoid remove(JMenuItem item)从菜单中删除指定菜单项参数:item要删除的菜单项nJMenuItem(String label)参数:label菜单项的标签nJMenuItem(Action a)参数:a 一个封装了名字、可选图标和监听器的动作nvoid setJMenuBar(JMenuBar menubar)为该框架设置菜单栏n菜单中的图标nJMenuItem(String label,Icon icon)参数:label菜单项的标签 icon菜单项的图标nvoid setHorizontalTextPosition(int pos)设置文本和图标的水平相对位置参数:posSwingConstants.RIGHT(文本在图标的右侧)或者SwingConstants.LEFTnAbstractAction(String name,Icon smallIcon)参数:name动作的标签 smallIcon动作的小图标n复选框和单选按钮菜单项nJCheckBoxMenuItem(String label)使用给定的标签来构造一个复选框菜单项nJCheckBoxMenuItem(String label,bolean state)使用给定的标签和初始状态来构造一个复选框菜单项nJRadioButtonMenuItem(String label)使用给定的标签来构造一个单选项按钮nJRadioButtonMenuItem(String label,boolean state)使用给定的标签和初始状态来构造一个单选项按钮nboolean isSeleted()返回该条项的选择状态nvoid setSelected(boolean state)设置该条项的选择状态n弹出菜单n弹出菜单是一种不固定在菜单栏中,但是可随处浮动的菜单nJPopupMenu()创建一个新的弹出菜单nvoid show(Component c,int x,int y)显示弹出菜单参数:c弹出菜单在其内显示的组件 x,y弹出菜单左上角的坐标(使用c的坐标空间)nboolean isPopupTrigger()如果鼠标事件为弹出菜单触发器则返回truen快捷键和加速器nJMenuItem(String label,int mnemonic)参数:label此菜单项的标签 mnemonic该菜单项的快捷字符;该字符会在标签中以下划线形式显示nvoid setAccelerator(KeyStroke k)把k设为该菜单项的加速器nvoid setMnemonic(char mnemonic)为按钮设置快捷字符。该字符会在标签中以下划线形式显示参数:mnemonic按钮的快捷字符n启用和禁用菜单项nvoid setEnable(boolean b)启用或者禁用菜单项nvoid menuSelected(MenuEvent e)在菜单被取消选择并且已被关闭以后被调用nvoid menuDeselected(MenuEvent e)在菜单被取消时被调用n工具栏nJToolBar()nJToolBar(String titleString)nJToolBar(int orientation)nJToolBar(String titleString,int orientation)使用给定的标题字符串和方向构造一个工具栏。orientation取下列常量之一:SwingConstants.HORIZONTAL(默认)和SwingConstants.VERTICAL。nJButton add(Action a)使用给定动作的名字、图标和动作回调来构造一个工具栏中的按钮,并且把此按钮添加到工具栏的末尾。nvoid addSeparator()把一个分隔符加到工具栏的末尾nvoid setToolTipText(String text)设置作为工具提示显示的文本例子: (MenuDemo.java)小结n学习了几中布局管理器 FlowLayout 流 BorderLayout 边框 CardLayout 卡片 GridLayout 网格 BoxLayout GridbagLayout 网袋布局 一些常用的组件、菜单、工具条n以上各组件在PPT中都有例子;n在实际项目中,为了提高生产率,应该使用一种主流的IDE进行SWING界面程序的书写,不要在这里浪花费大量定贵时间。应该尽量将精力放在业务逻辑层。n前提是你对事件机机制十分的了解。练习:n在Jbuilder中设计图示的界面
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号