java swing 组件大全
- 格式:doc
- 大小:49.00 KB
- 文档页数:10
JavaSwing组件⼤全实例演⽰⼀抛砖引⽟ 本⽂指在利⽤⼀个⼩”Swing 组件⼤全”来引导⼤家学习这门语⾔,熟悉Java Swing的各个组件。
并在学习过程中参考作者这⼀程序的⽅法和思想,最终形成⾃⼰的思维⽅式和学习⽅式。
你能举⼀返三是作者最开⼼的事情。
⼩程序演⽰了Java Swing⼤部分组件。
最后附上了全部代码及详细的注释说明。
希望本⽂能对⼤家学习Java有所帮助。
随着Java风潮席卷国内,学习Java的⽅法和路径越来越多。
⽽在⼤量的书本前,在Java庞⼤的类库前⼤⼤家都有点迷失⽅向的感觉,是学 J2EE,J2ME还是。
然⽽所有的这些都或多或少的离不开J2SE。
万丈⾼楼平地起。
J2SE是整个Java的基础,学好了这个对Java的各个⽅向都是很有利的。
⽽学习J2SE的最初点就在界⾯设计,因为界⾯编程是你来感觉最直接的⼿段,是提⾼⼤家编程兴趣的很好开始,因为你写完程序编译后可马上看到⾃⼰的成果。
⽽不像后台编程做完了都感受不到效果。
⽽好的界⾯也是你测试你其他程序的基础。
界⾯设计!不就是拖拉操作吗?如果是VB,VC等可视化的编程,的确只是⼀些拖拉操作,由于Java语⾔的设计中所有的东西都是程序代码,在 Java中如果想要设计⼀个好的界⾯,可不是简单的拖拉操作能完成的。
即使使⽤了如JBuilder这么强⼤的可视化⼯具,你也得亲⾃动⼿写⼀些界⾯设计代码才能很好的完成你的任务。
如果你能在此基础上理解Java界⾯设计的思想,对你学习这门语⾔将有莫⼤的帮助。
Java界⾯设计主要涉及Awt,Swing两⼤类库,Swing是Awt的扩展和功能加强。
下⾯我们就以Swing为基础来说说整个Java的界⾯设计。
⼆感受效果 在开始之前,让我们看看这篇⽂章要达到的效果,有了⽬标和成果才有学习的兴趣,起码我是这样认为和学习的。
如下图所⽰,这就是我们设计的界⾯,它包括了Swing中⼤部分常⽤的组件。
有些功能界⾯上反映不出来,⼤家可尝试编译源代码点南击各个部分,看看它们的响应事件。
在Java1.0中,已经有一个用于GUI编程的类库AWT(Abstract Window Toolkit),称之为抽象窗口工具箱。
遗憾的是,AWT中的组件(例如按钮,类名为Button)在实现中使用了本地代码(Native Code),这些组件的创建和行为是由应用程序所在平台上的本地GUI工具来处理的。
因此,AWT组件要在不同的平台上提供给用户一致的行为就受到了很大的限制。
同时,AWT组件中还存在很多bug,这就使得使用AWT来开发跨平台的GUI应用程序困难重重。
1996年,SUN公司和Netsacpe公司在一个称为Swing的项目中合作完善了Netsacpe公司原来开发的一套GUI库,也就是现在所谓的Swing组件。
Swing组件和原来的AWT组件完全不同,最大的区别就是Swing组件的实现中没有使用本地代码,这样对底层平台的依赖型就大为降低,并且可以给不同平台的用户一致的感觉。
此外,和原来的AWT相比,Swing 中提供了内容更多、使用更为方便的组件。
在阅读一些书籍时,常会遇到名词JFC(Java Foundation Class)。
JFC的概念是在1997年的JavaOne开发者大会上首次提出的,是指用于构建GUI的一组API。
实际上,Swing只是JFC的一部分,其它的还有二维图形(Java 2D)API以及拖放(Drag and Drop)API等等。
Swing并不是完全取代了AWT,Swing只是使用更好的GUI组件(如JButton)代替AWT 中相应的GUI组件(如Button),并且增加了一些AWT中原来所没有的GUI组件。
并且,Swing 仍使用AWT 1.1的事件处理模型。
虽然现在AWT组件仍得到支持,但是建议在你的应用程序中尽量使用Swing组件和1.1的事件模型。
1.标签(JLabel)标签(JLabel)通常是用来标识另外一个组件的含义。
以在标签上显示文字、图象或是文字图象的组合。
一抛砖引玉本文指在利用一个小程序”Swing 组件大全”来引导大家学习Java这门语言,熟悉Ja va Swing的各个组件。
并在学习过程中参考作者设计这一程序的方法和思想,最终形成自己的思维方式和学习方式。
你能举一返三是作者最开心的事情。
小程序演示了Java Swing 大部分组件。
最后附上了全部代码及详细的注释说明。
希望本文能对大家学习Java有所帮助。
随着Java风潮席卷国内,学习Java的方法和路径越来越多。
而在大量的书本前,在J ava庞大的类库前大大家都有点迷失方向的感觉,是学J2EE,J2ME还是。
然而所有的这些都或多或少的离不开J2SE。
万丈高楼平地起。
J2SE是整个Java的基础,学好了这个对Java的各个方向都是很有利的。
而学习J2SE的最初点就在界面设计,因为界面编程是你来感觉最直接的手段,是提高大家编程兴趣的很好开始,因为你写完程序编译后可马上看到自己的成果。
而不像后台编程做完了都感受不到效果。
而好的界面也是你测试你其他程序的基础。
界面设计!不就是拖拉操作吗?如果是VB,VC等可视化的编程,的确只是一些拖拉操作,由于Java语言的设计中所有的东西都是程序代码,在Java中如果想要设计一个好的界面,可不是简单的拖拉操作能完成的。
即使使用了如JBuilder这么强大的可视化工具,你也得亲自动手写一些界面设计代码才能很好的完成你的任务。
如果你能在此基础上理解Java界面设计的思想,对你学习这门语言将有莫大的帮助。
Java界面设计主要涉及Awt,Swing两大类库,Swing是Awt的扩展和功能加强。
下面我们就以Swing为基础来说说整个Java的界面设计。
二感受效果在开始之前,让我们看看这篇文章要达到的效果,有了目标和成果才有学习的兴趣,起码我是这样认为和学习的。
如下图所示,这就是我们设计的界面,它包括了Swing中大部分常用的组件。
有些功能界面上反映不出来,大家可尝试编译源代码点南击各个部分,看看它们的响应事件。
swing 组价和容器——java swing 组件和技术(中)一、swing组件和容器概览1.顶层容器(JFrame,JDialog,JApplet)JFrame—框架,主要用来设计应用程序的图像界面JDialog—对话框,通常用来设计具有依赖关系的窗口JApplet—小应用程序,主要用来设计嵌入网页中运行的java程序2.一般容器普通容器(JPanel、JScrollPane、JToolbar、JSplitPane、JTabbedPane) JPanel—面板,通常只有背景颜色的普通容器JScrollPane—滚动窗格,具有滚动条JToolbar—工具条,通常将多个组件排成一排或者一列JSplitPane—分裂窗格,用来装两个组件的容器JTabbedPane—选项卡窗格,允许多个组件共享相同的界面空间专用容器(JLayeredPane、JRootPane 、JInternalFrame)JLayeredPane—分层窗格,给窗格增加了深度的概念JRootPane—根窗格,一般是自动创建的容器JInternalFrame—内部窗格,可以在一个窗口内显示若干个类似于框架的窗口3.基本控件(JButton、JCombobox、JList、JMenu、JSlider、JTextField)4.不可编辑信息组件(JLabel、JProgressBar、JToolTip等)5.可编辑组件(JColorChooser、JFileChooser、Jtabel、JTextArea、JTree等)二、常用的swing组件和容器1.JFrame✧顶层容器,默认不可见;默认布局方式为BorderLayout✧构造函数:●JFrame()●JFrame(String title)//title 为框架的标题内容✧JFrame常用方法●setDefaultCloseOperation(int operation)—设置关闭框架的行为参数operation一般是JFrame. EXIT_ON_CLOSE,表示关闭框架时,则退出程序●setSize(int width, int height)—设置框架的大小●setVisible(boolean b)—设置框架是否可见,默认为false●getContentPane()—获取顶层容器的内容面板●add(Component comp)—往内容面板添加组件●setLayout(LayoutManagermgr)—设置布局方式,默认为BorderLayoutexample:JDialog 和JOptionPane的demo2.JDialog 和JOptionPanea)JDialog✧在已有的窗口上创建对话框,可以使用此类创建自定义的对话框✧构造函数:⏹JDialog(Dialog owner, String title, boolean modal)⏹JDialog(Frame owner, String title, boolean modal)owner—指定对话框的父窗口title—对话框的标题modal—对话框的模式(true为“有模式对话框”,false为“无模式对话框”✧JDialog常用方法⏹setSize(int width, int height)—设置对话框的大小⏹getContentPane()—获取顶层容器的内容面板⏹add(Component comp)—往内容面板添加组件⏹setLayout(LayoutManagermgr)—设置布局方式,默认为BorderLayoutb)JOptionPane✧提供一些现成的、各种常用的标准对话框(有模式的对话框)✧JOptionPane类里静态方法众多,但几乎所有静态方法都遵循showXxxDialog()的形式,如下:这四种方法的参数都遵循一致的模式:①ParentComponent:指示对话框的父窗口对象,一般为当前窗口。
swing组件及其用法Swing组件是用于创建图形用户界面的Java库。
它提供了丰富的界面元素和布局管理器,可以实现各种图形界面应用程序。
下面是一些常用的Swing组件及其用法:1. JFrame:顶层窗口组件,用于创建一个窗口。
用法示例:```javaJFrame frame = new JFrame("My Frame");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(500, 300);frame.setVisible(true);```2. JPanel:容器组件,用于组织其他组件。
用法示例:```javaJPanel panel = new JPanel();panel.setLayout(new FlowLayout());panel.add(new JButton("Button 1"));panel.add(new JButton("Button 2"));```3. JButton:按钮组件,用于触发动作。
用法示例:```javaJButton button = new JButton("Click me");button.addActionListener(e -> System.out.println("Buttonclicked"));```4. JLabel:标签组件,用于显示文本或图像。
用法示例:```javaJLabel label = new JLabel("Hello, world!");label.setIcon(new ImageIcon("image.png"));```5. JTextField:文本输入框组件,用于接收用户输入。
import javax.swing.*;import java.awt.*;import java.awt.event.*;import javax.swing.tree.*;import javax.swing.event.*;import javax.swing.border.*;import javax.swing.table.*;/*** Swing 组件测试程序* 测试Swing所有组件及其相应的事件* @author 天翼.李 2003.4.17 晚23:14* @link * @link robococde@*/public class SwingT est extends JFrame{/*** 主模块,初始化所有子模块,并设置主框架的相关属性 */public SwingTest(){// 初始化所有模块MenuTest menuTest = new MenuTest();LeftPanel leftPanel = new LeftPanel();RightPanel rightPanel = new RightPanel();BottomPanel bottomPanel = new BottomPanel();CenterPanel centerPanel = new CenterPanel();// 设置主框架的布局Container c = this.getContentPane();// c.setLayout(new BorderLayout())this.setJMenuBar(menuTest);c.add(leftPanel,BorderLayout.WEST);c.add(rightPanel,BorderLayout.EAST);c.add(centerPanel,BorderLayout.CENTER);c.add(bottomPanel,BorderLayout.SOUTH);// 利用无名内隐类,增加窗口事件this.addWindowListener(new WindowAdapter(){public void WindowClosing(WindowEvent e){// 释放资源,退出程序dispose();System.exit(0);}});setSize(700,500);setTitle("Swing 组件大全简体版");// 隐藏frame的标题栏,此功暂时关闭,以方便使用window事件// setUndecorated(true);setLocation(200,150);show();}/////////////////////////////////////////////////////////////////////////////*** 菜单栏处理模块* JMenuBar --+* --JMenu--+* --JMenuItem --ActionListener**/class MenuTest extends JMenuBar{private JDialog aboutDialog;/*** 菜单初始化操作*/public MenuTest(){JMenu fileMenu = new JMenu("文件");JMenuItem exitMenuItem = new JMenuItem("退出",KeyEvent.VK_E);JMenuItem aboutMenuItem = new JMenuItem("关于...",KeyEvent.VK_A);fileMenu.add(exitMenuItem);fileMenu.add(aboutMenuItem);this.add(fileMenu);aboutDialog = new JDialog();initAboutDialog();// 菜单事件exitMenuItem.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();System.exit(0);}});aboutMenuItem.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){// "关于"对话框的处理aboutDialog.show();}});}/*** 返回关于对话框*/public JDialog getAboutDialog(){return aboutDialog;}/*** 设置"关于"对话框的外观及响应事件,操作和JFrame一样都是在内容 * 框架上进行的*/public void initAboutDialog(){aboutDialog.setTitle("关于");Container con =aboutDialog.getContentPane();// Swing 中使用html语句Icon icon = new ImageIcon("smile.gif");JLabel aboutLabel = new JLabel("<html><b><font size=5>"+"<center>Swing 组件大全简体版!"+"<br>天翼.李",icon,JLabel.CENTER);//JLabel aboutLabel = new JLabel("Swing 组件大全简体版!",icon,JLabel.CENTER);con.add(aboutLabel,BorderLayout.CENTER);aboutDialog.setSize(450,225);aboutDialog.setLocation(300,300);aboutDialog.addWindowListener(new WindowAdapter(){public void WindowClosing(WindowEvent e){dispose();}});}}/////////////////////////////////////////////////////////////////////////////*** 最左边模块,继承JPanel,初始化内容为JTree* JPanel--+* --JTree*/class LeftPanel extends JPanel{private int i = 0;public LeftPanel(){DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");DefaultMutableTreeNode child = new DefaultMutableTreeNode("Child");DefaultMutableTreeNode select = new DefaultMutableTreeNode("select");DefaultMutableTreeNode child1 = new DefaultMutableTreeNode(""+i);root.add(child);root.add(select);child.add(child1);JTree tree = new JTree(root);tree.getSelectionModel().setSelectionMode(TreeSelectionModel.DISCONTIGUO US_TREE_SELECTION);// 每个节点的行高tree.setRowHeight(20);tree.addTreeSelectionListener(new TreeSelectionListener (){public void valueChanged(TreeSelectionEvent e){// 内隐类不能直接引用外部类tree,1.外部变量可申明为final 2.新建外部类的对象JTree tree =(JTree)e.getSource();DefaultMutableTreeNode selectNode = (DefaultMutableTreeNode)tree.getLa stSelectedPathComponent();i++;selectNode.add(new DefaultMutableTreeNode(""+i));}});tree.setPreferredSize(new Dimension(100,300));// tree.setEnabled(true);JScrollPane scrollPane = new JScrollPane(tree);//scrollPane.setSize(100,350);this.add(scrollPane);}}/////////////////////////////////////////////////////////////////////////////*** 最下面层模块,继承JPanel,初始化内容为进度条,并由定时器控制* JPanel--+* --JProcessBar --Timer*/class BottomPanel extends JPanel{private JProgressBar pb;//////////////////////////////////////////public class//////////////////////////////public BottomPanel(){pb = new JProgressBar();pb.setPreferredSize(new Dimension(680,20));// 设置定时器,用来控制进度条的处理Timer time = new Timer(1,new ActionListener()int counter = 0;public void actionPerformed(ActionEvent e){counter++;pb.setValue(counter);Timer t = (Timer)e.getSource();// 如果进度条达到最大值重新开发计数if (counter == pb.getMaximum()){t.stop();counter =0;t.start();}}});time.start();pb.setStringPainted(true);pb.setMinimum(0);pb.setMaximum(1000);pb.setBackground(Color.white);pb.setForeground(Color.red);this.add(pb);}/*** 设置进度条的数据模型*/public void setProcessBar(BoundedRangeModel rangeModel){pb.setModel(rangeModel);}}/////////////////////////////////////////////////////////////////////////////*** 最右边模块,继承JPanel,初始化各种按钮* JPanel--+* --JButton --JToggleButton -- JList -- JCombox --JCheckBox .... */class RightPanel extends JPanel{public RightPanel(){this.setLayout(new GridLayout(8,1));// 初始化各种按钮JCheckBox checkBox = new JCheckBox("复选按钮");JButton button = new JButton("打开文件");button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){JFileChooser file = new JFileChooser();int result = file.showOpenDialog(new JPanel());if (result ==file.APPROVE_OPTION){String fileName = file.getSelectedFile().getName();String dir = file.getCurrentDirectory().toString();JOptionPane.showConfirmDialog(null,dir+"\\"+fileName,"选择的文件",JOptionPane.YES_OPTION);}}});//////////////////////////////////////////public//////////////////////////////////////////JToggleButton toggleButton = new JToggleButton("双态按钮");ButtonGroup buttonGroup = new ButtonGroup();JRadioButton radioButton1 = new JRadioButton("单选按钮1",false);JRadioButton radioButton2 = new JRadioButton("单选按钮2",false);// 组合框的处理JComboBox comboBox = new JComboBox();comboBox.setToolTipText("点击下拉列表增加选项");comboBox.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){JComboBox comboBox =(JComboBox)e.getSource();comboBox.addItem("程序员");comboBox.addItem("分析员");}});// 列表框的处理DefaultListModel litem = new DefaultListModel();litem.addElement("香蕉");litem.addElement("水果");JList list = new JList(litem);list.addListSelectionListener(new ListSelectionListener (){public void valueChanged(ListSelectionEvent e){JList l = (JList)e.getSource();Object s= l.getSelectedValue();JOptionPane.showMessageDialog(null,s,"消息框",JOptionPane.YES_OPTION);}});// 增加按钮组buttonGroup.add(radioButton1);buttonGroup.add(radioButton2);// 增加各种按钮到JPanel中显示add(button);add(toggleButton);add(checkBox);add(radioButton1);add(radioButton2);add(comboBox);add(list);this.setBorder(new EtchedBorder(EtchedBorder.LOWERED,Color.LIGHT_GRAY, Color.blue));}}/////////////////////////////////////////////////////////////////////////////*** 中间层模块,继承JPanel,初始化页签,并在页签中设置文本区,表格,* 文本区上下用分隔条分隔* JPanel--+* -JTabbedPane--+* --Draw --JTable -JTextAreas -JText --JPopupMenu*/class CenterPanel extends JPanel{public CenterPanel(){JTabbedPane tab = new JTabbedPane(JTabbedPane.TOP);JTextField textField = new JTextField("文本域,点击打开<文件按钮>可选择文件"); textField.setActionCommand("textField");JTextPane textPane = new JTextPane();textPane.setCursor(new Cursor(Cursor.TEXT_CURSOR));textPane.setText("编辑器,试着点击文本区,试着拉动分隔条。