(总结)Swing组件的使用
- 格式:doc
- 大小:17.92 KB
- 文档页数:19
Swing的用法以及实例使用swing时首先要导入一些相关的包:01//首先导入Swing 需要的包02 import javax.swing.*;03 import java.awt.*;04 import java.awt.event.*;05 //创建HelloWorld类06 public class HelloWorld {07 //创建主方法08 public static void main(String[] args) {09 try { //try语句块,监视该段程序10 //设置窗口风格11 UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());12 } catch (Exception e) { //捕获异常13 e.printStackTrace(); //异常信息输出14 }15 JFrame frame = new JFrame("Swing 第一个示例");//创建顶层容器并初始化16 Container c = frame.getContentPane(); //获取面板容器17 JPanel pane = new JPanel(); //创建面板panel 并初始化18 c.add(pane); //将面板添加到窗口19 pane.setLayout(new FlowLayout()); //设置布局管理器FlowLayout20 final JLabel label = new JLabel(); //创建标签label 并初始化21 JButton button = new JButton("按钮"); //创建button 并初始化22 pane.add(label); //向容器中添加组件label23 pane.add(button); //向容器中添加组件button24 //对按钮事件的处理方法25 button.addActionListener(new ActionListener() {26 public void actionPerformed(ActionEvent e) {27 label.setText("HelloWorld!"); //设置label 显示的内容28 }29 });30 //窗口设置结束,开始显示31 frame.addWindowListener(new Window32 //匿名类用于注册监听器33 public void windowClosing(WindowEvent e) {34 System.exit(0);} //程序退出35 });36 frame.setSize(300,240); //设置窗口大小37 frame.setVisible(true); //显示窗口38 }39 }以上程序中完全按照前面所介绍到的流程,首先是将Swing 所需要的包导入(第1~4 行,然后在主方法中创建顶层容器frame 并初始化(第15 行)。
(总结)Swing组件的使用Swing 的组件与AWT 组件相似,但又为每一个组件增添了新的方法,并提供了更多的高级组件.Swing 的基本组件:1.按钮(JButton):Swing 中的按钮可以显示图像,并且可以将按钮设置为窗口的默认图标,而且还可以将多个图像指定给一个按钮。
(1).JButton 常用的构造方法。
JButton(String text):按钮上显示字符。
JButton(Icon icon) :按钮上显示图标。
JButton(String text, Icon icon):按钮上既显示图标又显示字符。
(2).常用方法:b1.setEnabled(false); //使按钮当前不可用b1.setToolTipText("..."): //设置按钮提示文本b1.setMnemonic(KeyEvent.VK_D);// 将b1邦定alt+D键(3).案例代码:[java] view plain copy print?public class JButtonExample3 extends JPanel implements ActionListener{ protected JButton b1, b2, b3; public JButtonExample3() { ImageIconleftButtonIcon = createImageIcon("right.gif");ImageIcon middleButtonIcon =createImageIcon("middle.gif"); ImageIcon rightButtonIcon = createImageIcon("left.gif");b1 = new JButton("失效中间按钮(D)", leftButtonIcon);b1.setVerticalTextPosition(AbstractButton.CENTER);// 水平中间对齐b1.setHorizontalTextPosition(AbstractButton.LEADING);// 相当于LEFTb1.setMnemonic(KeyEvent.VK_D);// 将b1邦定alt+D键b1.setActionCommand("disable");b2 = new JButton("M中间按钮", middleButtonIcon);b2.setVerticalTextPosition(AbstractButton.BOTTOM);b2.setHorizontalTextPosition(AbstractButton.CENTER);b2.setMnemonic(KeyEvent.VK_M);// 将b2邦定alt+M键b3 = new JButton("E激活中间按钮", rightButtonIcon);b3.setMnemonic(KeyEvent.VK_E);// 将b3邦定alt+E键b3.setActionCommand("enable");b3.setEnabled(false); // 给1和3添加事件监听b1.addActionListener(this);b3.addActionListener(this); // 设置按钮提示文本b1.setToolTipText("点击这个按钮,将使中间的按钮失效!"); b2.setToolTipText("点击这个按钮,没有任何的事件发生!");b3.setToolTipText("点击这个按钮,将使中间的按钮有效"); // 将按钮添加到JPanel中add(b1);add(b2); add(b3); } public void actionPerformed(ActionEvent e) { if ("disable".equals(e.getActionCommand())){ b2.setEnabled(false);b1.setEnabled(false);b3.setEnabled(true); } else{ b2.setEnabled(true);b1.setEnabled(true);b3.setEnabled(false); } }protected static ImageIcon createImageIcon(String path) { .URL imgURL =JButtonExample3.class.getResource(path); if (imgURL != null) { return newImageIcon(imgURL); } else{ System.err.printl n("Couldn′t find file: " + path); return null; } } public static void main(String[] args) { // 设置使用新的swing界面//提供一个关于新创建的JFrame 是否应该具有当前外观为其提供的Window 装饰(如边框、关闭窗口的小部件、标题等等)的提示。
java-Swing控件的用法和范例类JTableJTable用来显示和编辑规则的二维单元表。
JTable有很多用来自定义其呈现和编辑的设施,同时提供了这些功能的默认设置,从而可轻松地设置简单表。
例如,要设置一个10行10列的表:TableModel dataModel=new AbstractTableModel(){public int getColumnCount(){return10;}public int getRowCount(){return10;}public Object getValueAt(int row,int col){return new Integer(row*col);} };JTable table=new JTable(dataModel);JScrollPane scrollpane=new JScrollPane(table);注意,如果要在单独的视图中(在JScrollPane外)使用JTable并显示表标题,则可以使用getTableHeader()获取并单独显示它。
设计使用JTable的应用程序时,要严格注意用来表示表数据的数据结构。
DefaultTableModel 是一个模型实现,它使用一个Vector来存储所有单元格的值。
该Vector由包含多个Object 的Vector组成。
除了将数据从应用程序复制到DefaultTableModel中之外,还可以TableModel接口的方法来包装数据,这样可将数据直接传递到JTable,如以上示例所示。
这通常可以提高应用程序的效率,因为模型可以自由选择最适合数据的内部表示形式。
在决定使用AbstractTableModel还是使用DefaultTableModel方面有一个好的实践经验,即在创建子类时使用AbstractTableModel作为基类,在不需要创建子类时则使用DefaultTableModel。
主要参考文现:[美]Herbert Schildt 著 鄢爱兰 鹿江春译 《java 参考大全 J2SE 》 清华大学出版社 2006年1月孙卫琴 《Java 面向对象编程》 出版社及日期不详java API 开发人员文档本文作者:黄邦勇帅本文的说明:本文主要讲解了对大学初学Swing 时对根面板JRootPane ,内容面板containPane ,层面板JLayeredPane ,玻璃面板glassPnae 的困惑,本文对各种面板作了详尽的讨论,让读者能真正的明白根面板,内容面板,层面板到底是什么,他们在程序中的作用,以及他们之间的关系,透明性,可见性,作了讲解。
本文内容完全属于个人见解与参考文现的作者无关,其中难免有误解之处,望指出更正。
Swing 组件的各种面板(JRootPane 根面板,JLayeredPane 层面板等)第一部分:JFrame 中各面板间的关系,透明性与可见性问题注:在某些地方把面板也叫做窗格,比如根面板,也叫根窗格,层面板也叫分层窗格等。
注意窗格与窗体是不一样的。
在Swing 中的JFrame 窗体与AWT 中的Frame 窗体有一些不同。
JFrame 由他的窗体本身加上其上的JRootPane 根面板,JLayeredPane 层面板,containPane 内容面板,glassPane 玻璃面板,JMenuBar 菜单栏(可选,不包括在内)四部分组成。
其中根面板在JRootPane 类中实现,层面板在JLayeredPane 类中实现,他们都是JComponent 的子类。
而containPane 和glassPane 没有专门对应的类。
1、各种面板(或称窗格)的关系及作用:JRootPane 根面板:该面板是在JFrame 窗体创建时就默认添加进来的,是所有其他面板的载体或父级,他覆盖窗体的除标题栏和边条之外的整个表面。
根面板默认是不可见的。
根面板负责管理其他面板(层面板,玻璃面板),如使其他面板覆盖整个JFrame 窗体等。
界面开发的流程:继承JFrame;创建组建设置布局管理器添加组建设置窗体属性显示窗体Swing的常用组建JPanel 用于处理三大布局管理器无法处理的较复杂的布局面板组建、非顶层容器;一个界面只能有一个窗体,但是可以有多个JPanel组建,而在JPanel上可以使用三大布局管理器这样可以组合较复杂的布局;package com.jiemiankaifa;import java.awt.*;import javax.swing.*;public class MyFrame4 extends JFrame{/*** @param args*///定义组建JPanel jp1,jp2,jp3;//定义面板组件JButton jb1,jb2,jb3,jb4,jb5,jb6//定义按钮组件public static void main(String[] args) {// TODO Auto-generated method stubMyFrame4 m=new MyFrame4();}public MyFrame4(){//创建组建jp1=new JPanel();jp2=new JPanel();jb1=new JButton("陕西");jb2=new JButton("甘肃");jb3=new JButton("宁夏");jb4=new JButton("新疆");jb5=new JButton("青海");jb6=new JButton("西藏");//添加组建//向面板组件中添加按钮组件jp1.add(jb1);jp1.add(jb2);jp2.add(jb3);jp2.add(jb4);jp2.add(jb5);//向窗体上添加面板组件,并指明添加的位置(窗体未声明则默认为边界组件)this.add(jp1, BorderLayout.NORTH);this.add(jp2, BorderLayout.SOUTH);this.add(jb6, BorderLayout.CENTER);//设置窗体的标题this.setTitle("复杂布局的案例");//设置窗体的大小this.setSize(200,300);//设置窗体在电脑桌面上的位置this.setLocation(200, 200);//设置窗体关闭时,jvm也关闭this.setDefaultCloseOperation(MyFrame4.EXIT_ON_CLOSE); //显示窗体this.setVisible(true);}}执行结果:会员登录界面的编制文本框 JTextField密码框JPasswordField标签JLabelpackage com.jiemiankaifa;import java.awt.*;import javax.swing.*;public class MyFrame5 extends JFrame{/*** @param args*///定义组件JPanel jp1,jp2,jp3;//定义面板组件JLabel jlb1,jlb2;//定义标签组件JButton jb1,jb2;//定义按钮组件JTextField jtf;//定义文本框组件JPasswordField jpf;//定义密码框组件public static void main(String[] args) { // TODO Auto-generated method stubMyFrame5 m=new MyFrame5();}public MyFrame5(){//创建组件//创建面板组件jp1=new JPanel();jp2=new JPanel();jp3=new JPanel();//创建标签组件jlb1=new JLabel("姓名");jlb2=new JLabel("密码");//创建按钮组件jb1=new JButton("登录");jb2=new JButton("重置");//创建文本框组件jtf=new JTextField(10);//创建密码框组件jpf=new JPasswordField(10);//添加组件//向面板jp1中添加标签组件、文本框组件jp1.add(jlb1);jp1.add(jtf);//向面板jp2添加标签组件、密码框组件jp2.add(jlb2);jp2.add(jpf);//向面板jp3中添加按钮组件jp3.add(jb1);jp3.add(jb2);//向窗体中添加面板组件this.add(jp1);this.add(jp2);this.add(jp3);//设置窗体的布局为网格布局,JPanel的布局默认为流式布局this.setLayout( new GridLayout(3,1));//设置窗体的标题this.setTitle("登录框");//设置窗体的大小this.setSize(300,200);//设置窗体在电脑桌面上的位置this.setLocation(200, 200);//关闭窗体时,也关闭jvmthis.setDefaultCloseOperation(MyFrame5.EXIT_ON_CLOSE); //显示窗体this.setVisible(true);}}执行结果:复选框、单选框package com.jiemiankaifa;import java.awt.*;import javax.swing.*;public class MyFrame6 extends JFrame{/*** @param args*///定义组建JPanel jp1,jp2,jp3;JLabel jlb1,jlb2;JButton jb1,jb2;JCheckBox jcb1,jcb2,jcb3;JRadioButton jrb1,jrb2;ButtonGroup bg;public static void main(String[] args) {// TODO Auto-generated method stubMyFrame6 m=new MyFrame6();}//创建组建public MyFrame6(){jp1=new JPanel();jp2=new JPanel();jp3=new JPanel();jb1=new JButton("注册用户");jb2=new JButton("取消注册");jlb1=new JLabel("你喜欢的运动");jlb2=new JLabel("你的性别");jcb1=new JCheckBox("足球");jcb2=new JCheckBox("网球");jcb3=new JCheckBox("排球");jrb1=new JRadioButton("男");jrb2=new JRadioButton("女");ButtonGroup bg=new ButtonGroup();bg.add(jrb1);bg.add(jrb2);jp1.add(jlb1);jp1.add(jcb1);jp1.add(jcb2);jp1.add(jcb3);jp2.add(jlb2);jp2.add(jrb1);jp2.add(jrb2);jp3.add(jb1);jp3.add(jb2);this.setLayout( new GridLayout(3,1));this.add(jp1);this.add(jp2);this.add(jp3);this.setSize(300,200);this.setLocation(200, 200);this.setDefaultCloseOperation(MyFrame6.EXIT_ON_CLOSE); this.setVisible(true);}}执行结果:(注:可编辑下载,若有不当之处,请指正,谢谢!)。
java图形化⼯具Swing基本使⽤Swing介绍:使⽤Swing开发图形界⾯⽐AWT更加优秀,因为Swing是⼀种轻量级组件,它采⽤100% Java实现,不再依赖于本地平台的图形界⾯,所以可以在所有平台上保持相同的运⾏效果,对跨平台⽀持⽐较出⾊,实现了真正的⼀次编写处处运⾏。
除此之外,Swing提供了⽐AWT更多的图形界⾯组件,因此可以开发出更美观的图形界⾯。
Swing组件的基本使⽤⼤部分Swing组件都是JComponent抽象类的直接或间接⼦类,JComponent类定义了所有⼦类组件的通⽤⽅法。
JComponent类是AWT中java.awt.Container类的⼦类,这也是AWT和Swing的联系之⼀。
绝⼤部分Swing组件类继承了Container类,所以Swing组件都可作为容器使⽤。
Swing的继承关系结构如下:上⾯的深⾊部分都是可以在AWT找到对应组件的。
⽐如我们的JButton就和我们Awt中的Button很相似。
这些和Awt有关联的组件就是在原来Awt组件的名字前⾯加了⼀个J。
但是还是有⼏个例外:JComboBox: 对应AWT⾥的Choice组件,但⽐Choice组件功能更丰富JFileChooser: 应于AWT⾥的FileDialog组件JScrollBar: 对应于AWT⾥的Scrollbar组件,注意两个组件类名中字母的⼤⼩写差别。
JCheckBox 对应于AWT⾥的checkbox组件,注意两个组件类名中字母的⼤⼩写差JCheckBoxMenuitem: 对应于AWT⾥的CheckboxMenuItem 组件,注意两个组件类名中字母的⼤⼩写差别。
在AWT中的东西,除了Canvas之外,别的所有的Awt组件都提供了相应的实现,Swing组件⽐AWT组件的功能更加强⼤。
相对于AWT组件,Swing组件具有如下4个额外功能。
(1),可以为Swing组件设置提⽰信息。
(总结)Swing组件的使用Swing 的组件与AWT 组件相似,但又为每一个组件增添了新的方法,并提供了更多的高级组件.Swing 的基本组件:1.按钮(JButton):Swing 中的按钮可以显示图像,并且可以将按钮设置为窗口的默认图标,而且还可以将多个图像指定给一个按钮。
(1).JButton 常用的构造方法。
JButton(String text):按钮上显示字符。
JButton(Icon icon) :按钮上显示图标。
JButton(String text, Icon icon):按钮上既显示图标又显示字符。
(2).常用方法:b1.setEnabled(false); //使按钮当前不可用b1.setToolTipText("..."): //设置按钮提示文本b1.setMnemonic(KeyEvent.VK_D);// 将b1邦定alt+D键(3).案例代码:[java] view plain copy print?public class JButtonExample3 extends JPanel implements ActionListener{ protected JButton b1, b2, b3; public JButtonExample3() { ImageIconleftButtonIcon = createImageIcon("right.gif");ImageIcon middleButtonIcon =createImageIcon("middle.gif"); ImageIcon rightButtonIcon = createImageIcon("left.gif");b1 = new JButton("失效中间按钮(D)", leftButtonIcon);b1.setVerticalTextPosition(AbstractButton.CENTER);// 水平中间对齐b1.setHorizontalTextPosition(AbstractButton.LEADING);// 相当于LEFTb1.setMnemonic(KeyEvent.VK_D);// 将b1邦定alt+D键b1.setActionCommand("disable");b2 = new JButton("M中间按钮", middleButtonIcon);b2.setVerticalTextPosition(AbstractButton.BOTTOM);b2.setHorizontalTextPosition(AbstractButton.CENTER);b2.setMnemonic(KeyEvent.VK_M);// 将b2邦定alt+M键b3 = new JButton("E激活中间按钮", rightButtonIcon);b3.setMnemonic(KeyEvent.VK_E);// 将b3邦定alt+E键b3.setActionCommand("enable");b3.setEnabled(false); // 给1和3添加事件监听b1.addActionListener(this);b3.addActionListener(this); // 设置按钮提示文本b1.setToolTipText("点击这个按钮,将使中间的按钮失效!"); b2.setToolTipText("点击这个按钮,没有任何的事件发生!");b3.setToolTipText("点击这个按钮,将使中间的按钮有效"); // 将按钮添加到JPanel中add(b1);add(b2); add(b3); } public void actionPerformed(ActionEvent e) { if ("disable".equals(e.getActionCommand())){ b2.setEnabled(false);b1.setEnabled(false);b3.setEnabled(true); } else{ b2.setEnabled(true);b1.setEnabled(true);b3.setEnabled(false); } }protected static ImageIcon createImageIcon(String path) { .URL imgURL =JButtonExample3.class.getResource(path); if (imgURL != null) { return newImageIcon(imgURL); } else{ System.err.printl n("Couldn′t find file: " + path); return null; } } public static void main(String[] args) { // 设置使用新的swing界面//提供一个关于新创建的JFrame 是否应该具有当前外观为其提供的Window 装饰(如边框、关闭窗口的小部件、标题等等)的提示。
JFrame.setDefaultLookAndFeelDecorated(true);// 创建一个窗体JFrame frame = new JFrame("小龙按钮");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E); // 创建一个面板JButtonExample3 newContentPane = new JButtonExample3();newContentPane.setOpaque(true);frame.setContentPane(newContentPane); // 显示窗体frame.pack();frame.setLocation(300, 200);frame.setVisible(true); } }运行截图:(说明:以下关于列表框内容部分出自此处:点击打开链接,特此声明!2.组合框(JComboBox):组合框(下拉列表JComboBox)使用方法及示例详解:构造方法:* JComboBox() 建立一个JComboBox组件.* JComboBox(ComboBoxModel model) 根据model建立一个JComboBox组件.* JComboBox(Objext[] items) 利用数组对象建立一个JComboBox组件.* JComboBox(Vector items) 利用Vector对象建立一个JComboBox组件.常用方法:....综合示例:[java] view plain copy print?<spanstyle="background-color: rgb(255, 255, 255);">import java.awt.*; /* 包含用于创建用户界面和绘制图形图像的所有类。
*/ import javax.swing.*; /* 提供一组"轻量级"组件,尽量让这些组件在所有平台上的工作方式都相同*/public class JComboBoxDemo extends JFrame{ public JComboBoxDemo() { /** Container是所有容器的父类,又是Java语言的组件类Component的子类. 容器是一种具有容纳其他组件和容器的功能的组件* 一个Java的图形用户界面的最基本元素是组件,组件是可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,如一个按钮,一个文本框等.* 在Java中,通常将组件放在一定的容器内使用this.getContentPane()方法返回此窗体的contentPane 对象*/ Container contentPane =this.getContentPane(); /* 创建一个面板对象,指定布局管理器为GridLayout,1行2列.Jpanel的默认版面管理为FlowLayout */ JPanel jPanel1 = new JPanel(new GridLayout(1, 2)); // 利用String数组建立JComboBox String[] fruit = { "苹果", "香蕉", "桔子", "梨", "芒果" };JComboBox jComboBox1 = new JComboBox(fruit); jComboBox1.addItem("其他"); // 在列表框选项的最后再添加一个"其他"选项// 设置jList1对象的带标题边框jComboBox1.setBorder(BorderFactory.createTitledBorder( "您最喜欢的水果:")); // 添加列表框jComboBox1至面板jPanel1.add(jComboBox1);// 利用ComboBoxModel建立JComboBox ComboBoxModel myModel = new MyModel(); JComboBox jComboBox2 = new JComboBox(myModel); // 设置jList1对象的带标题边框jComboBox2.setBorder(BorderFactory.createTitledBorder( "您最喜欢的水果:")); // 添加列表框jComboBox2至面板jPanel1.add(jComboBox2);// 添加面板至父容器contentPane.add(jPanel1); // 设置本窗体的标题this.setTitle("JComboBoxDemo"); // 设置本窗体显示的初始大小this.setSize(350, 90);this.setLocation(300, 200); // 设置本窗体初始可见this.setVisible(true); } class MyModel extends DefaultComboBoxModel{ String[] fruit = { "苹果", "香蕉", "桔子", "梨", "芒果" }; MyModel() { for (int i = 0;i < fruit.length; i++) { /* addElement()方法用于向列表框添加选项元素*/this.addElement(fruit[i]); } }} public static void main(String args[]){ JComboBoxDemo test = new JComboBoxDemo(); } }</span> 截图:3.列表框(JList):列表框的功能与下拉列表框相似,也是让用户在几个条目中做出选择,但又有一些区别,它提供给用户的选择模式更为多样,分别是单一选择、连续选择、多项选择,对应于ListSelectionModel 中的3个常量:(1) static int SINGLE_SELECTION 只能选择一条。