java中经常使用的Swing组件总结

(一): 基本交互组件:获取用户的输入或者显示状态的简单组件。

1. 按钮(JButton):文本可提示快捷键,可相对图标任意放置,使用ActionListener;

2. 复选框(JCheckBox):可以选中或取消,使用ItemListener,复选框和单选钮都是开关钮JToggleButton的子类。

3. 组合框(JComboBox):可以从多个选项中选择一个或自编辑,可用数组、集合或模型ComboBoxModel构造,通过getSelected(Index|Item)判断选中项,使用ItemListener,如果用户自己编辑内容,则索引会是-1,而元素是用户的输入;可用ListCellRenderer渲染选项(默认是JLabel),用ComboBoxEditor编辑当前项(默认是JTextField)。

4. 列表框(JList):可多列显示setLayoutOrientation,可多项选择setSelectionMode,可用数组、集合或模型ListModel构造(可动态增减),使用ListSelectionListener(getValueIsAdjusting为假时),用ListCellRenderer渲染,用ensureIndexIsVisible使索引可见。

5. 菜单项(JMenuItem):菜单栏JMenuBar包含多个菜单JMenu,菜单可以有子菜单JMenu、菜单项JMenuItem、分组栏JSeparator、复选菜单JCheckBoxMenuItem、单选菜单JRadioButtonMenuItem,菜单可以有文本(字体颜色、大小、样式)和图标。

6. 单选钮(JRadioButton):通常用ButtonGroup组合起来(操作模型ButtonModel),每组单选钮只能选中一个,使用ActionListener。

7. 滑块(JSlider):有水平或垂直样式,有大小标尺及标签,使用ChangeListener(当getValueIsAdjusting为假时),用setLabelTable(HashTable<Integer,JLabel>)自定义标签,或使用createStandardLabels创建等距标签,通常滑块和JFormattedTextField配对而精确定位数值(NumberFormatter(NumberFormat.getIntegerInstance()))。

8. 微调(JSpinner):用SpinnerModel构造(数字范围SpinnerNumberModel、日期跨度SpinnerDateModel、数组集合SpinnerListModel),各模型有对应的编辑器和组件,使用ChangeListener。

9. 文本框(JTextField):有初始串和列宽,用getText获得文本,使用ActionListener。

10. 密码框(JPasswordField):用setEchoChar设置回显字符,用getPassword获得密码。

(二): 不可编辑组件:用于显示信息或提示。

11. 标签(JLabel):显示文本和图标,用setDisplayedMnemonic和setLabelFor为目标设置快捷键,用set(Vertical|Horizontal)(Alignment|TextPosition)设置图标和文字位置,可以使用HTML显示多行超文本。

12. 进度条(JProgressBar):可用值范围构建JProgressBar,用setValue和setString更改进度和文字,用setStringPainted显示文字;进度条可能是不确定的,等到可以确定时用setIndeterminate变回来(适合于复杂控制、多进度条、重用的场合);高级进度监视器ProgressMonitor,用parent、title、note和min、max构建,用setProgress和setNote更新状态,isCanceled判断是否取消,setMillisToPopup显示延迟时间(适合于简单提示、易于取消的场合);另外还有ProgressMonitorInputStream包装流,如果读取费时超过延迟时间会显示进度框;

13. 工具提示(JToolTip):任何JComponent都可以setTooltipText设置工具提示;对于JTabbedPane可以对每个标签设置setTooltipTextAt或在addTab时提供对应参数;对于JTable和JTree可用cell renderer实现,渲染器是JComponent,对其调用函数setTooltipText即可,或者覆盖getTooltipText(MouseEvent),定位到行列位置,返回生成的提示即可;对于自定义组件可继承JComponent并实现getTooltipText即可;JTooltip组件由JComponent.createTooltip使用和创建;

(三): 通用容器组件:用于布局常规组件

14. 通用面板(JPanel):默认不透明setOpaque,可设边框setBorder;手动布局组件时配置合适的布局管理器,对于FlowLayout、BoxLayout、GridLayout和SpringLayout直接添加add即可,对于BorderLayout需提供方位参数,对于GridBagLayout需提供单元限制参数GridBagConstraints;对于CardLayout需提供key用于切换显示;

15. 滚动面板(JScrollPane):构建时提供目标对象,或使用getViewport().(set|get)View诶子客户对象;滚动栏JScrollBar通过get(Horizontal|Vertical)ScrollBar获取,有滚动策略(按需、总有、总无),滚动距离set(Unit|Block)Increment,值域(范围和当前值),使用AdjustmentListener;滚动面板包括中心、四边、四角九个区域,角需要两临边可见时才可见,可用set(Column|Row)HeaderView设置行列边头,用setCorner设置角组件;目标对象改变时调用revalidate即可;

16. 分割面板(JSplitPane):使用分割策略setOrientation和两个子面板set(Left|Right) Component构建,可以嵌套或包含滚动面板,可以设置分割栏位置大小和靠边特性setDivider(Location|Size)(如果仅添加add了一个组件则分割栏会粘至边上),缩放比例setResizeWeight为0.0时表示左上组件的大小是固定的;组件大小改变后需要使用resetToPreferedSizes更新分割面板,调整时即时显示用setContinuousLayout,用PropertyChangeListener监听属性DIVIDER_LOCATION_PROPERTY;

17. 标签面板(JTabbedPane):构建时可指定标签位置setTabPlacement(四方)和摆放策略setTabLayoutPolicy(多行回绕还是滚动延长);使用addTab或insertTab添加标签,需提供title、icon、component、tip、index,可通过索引index配置标签的相关信息,indexOfTab等可通过相关信息获取标签索引,tabComponent是标签标题的渲染器;setSelected(Index|Component)设置当前标签,使用ChangeListener监听;

18. 工具栏(JToolBar):容器为BorderLayout且仅有一个子组件时,再添加的工具栏可以随意拖动到四方(更改用setFloatable),用setRollover(true)设置当鼠标经过时才显示边框;添加分割栏用addSeparator,也可以添加按钮之外的组件,方向设置用setOrientation,组件方向用setAlignment(X|Y),如TOP_ALIGNMENT;

(四): 顶层窗口组件:可以独立显示的组件(其他组件必须有顶层窗口为根,且只能被包含在一个容器中),有菜单栏和内容窗格,不是线程安全的。

19. 小程序(JApplet):它的init、start、stop、destroy被普通线程调用,所以为线程安全可用invokeAndWait调用实际初始化函数;可用Timer和SwingWorker来分配定时和耗时任务;嵌入页面用applet元素,可包含菜单等。

20. 对话框(JDialog):对话框在显示和销毁上依赖于Frame,有模式modal的概念;简单标准对话框可使用JOptionPane,消息类型分错误、警告、信息、提问、普通,选项类型分默认、是否、是否取消、确定取消(仅用于showConfirmDialog,结果分是、否、确定、取消、关闭),输入框可提供数组供选择,选项框可自定义文字;

21. 主窗口(JFrame):标题修饰可由系统或外观提供setDefaultLookAndFeelDecorated,也可以没有setUndecorated;有title、icon、size、location属性,关闭时可以隐藏、销毁、退出或自定义的WindowAdapter。

(五): 高级交互组件

22. 颜色选择(JColorChooser):可以添加至容器或调出颜色选择窗口showDialog,使用ColorSelectionModel管理颜色并通知ChangeListener,再通过getColor获得所选颜色(取消为null);通过setPreviewPanel和setChooserPanels更改预览和选择面板;

23. 文件选择(JFileChooser):添加至容器或调出文件选择窗口show(Open|Save)Dialog,返回APPROVE_OPTION后用getSelectedFile获取所选文件,可以多选或选择目录setFileSelectionMode,隐藏文件setFileHiddenEnabled,过滤文件setFileFilter,多个过滤器addChoosableFileFilter,所有文件setAcceptAllFileFilterUsed,自定义文件视图setFileView提供图标和描述等信息,附加缩略图setAccessory组件通过成为PropertyChangeListener监听文件选择的改变。

24. 多行文本(JTextArea):构建时提供行列数set(Rows|Columns),自动换行和截取单词setLineWrap、setWrapStyleWord,滚动至末尾setCaretPosition,添加文本append,插入文本insert,替换文本replace,全选文本selectAll,某行索引getLineStartOffset。

25. 格式文本(JTextPane):简单显示网页可用JEditorPane.setPage,自定义格式编辑器StyledEditorKit可用JTextPane.registerEditorKitForContentType,通过StyleConstants设置格式,使用StyledDocument更改已有文字格式,使用StyledEditorKit配置后面的输入格式。

26. 表格(JTable):表格可用Object[][]data+Object[]column或Vector data+Vector column构造,或扩展AbstractTableModel提供行数、列数及列名、单元可编辑性和单元数据即可;添加到JScrollPane后通过setPreferredScrollableViewportSize指定可视范围,对于其他容器要手动添加table.getTableHeader至NORTH;用setSelectionModel指定选择模式,用ListSelectionListener监听用户选择,当evt.getValueIsAdjusting()为否时用getMinSelectionIndex获得所选,任意多选时可用getMaxSelectionIndex和isSlectedIndex综合判断找出所有选择行;用getColumnClass返回单元具体类型以便JTable查找默认的渲染器和编辑器,用TabColumn.setCell(Renderer|Editor)指定列渲染器和编辑器(DefaultCellEditor可包装JCheckBox、JComboBox和JTextField),编辑器如用JFormattedTextField可有校验输入功能,若列数据类型可用字符串构造则默认的编辑器就够用了,用JTable.setDefault(Editor|Renderer)(class,editor)可为某数据类型指定默认编辑器或渲染器;用renderer.setTooltipText可设提示,自定义渲染器在getTableCellRendererComponent里可根据单元内容设提示,扩展JTable覆盖getTooltip(MouseEvent)定位单元后返回提示也可以;用TablerHeader.setTooltipText可为表头设提示,还可覆盖JTable.createDefaultTableHeader里的JTableHeader的getTooltipText(MouseEvent)定位列索引后返回提示;用TableMap+TableSorter或者TableRowSorter+JTable.setRowSorter可以排序表格,选择方式可以是行、列、单元。

27. 树(JTree):以DefaultMutableTreeNode为根节点层次构建,或DefaultTreeModel模型才能通知TreeModelListener、JTree等监听器更新显示;TreeSelectionModel的setSelectionModel和addTreeSelectionListener可设选择方式和监听器,用tree. getLastSelectedPathComponent获得节点并getUserObject,根据节点类型isLeaf就知道用户数据是什么类型了;用setRootVisible隐藏根节点,用setShowRootHandles显示根节点的手柄,用tree.putClientProperty(“JTree.lineStyle”,”Angled”)设置线型,用setCellRenderer设置渲染器DefaultTreeCellRenderer(在set(Leaf|Open|Closed)Icon里设置节点图标,在getTreeCellRendererComponent里用setTooltipText设提示,同时需要注册ToolTipManager.sharedInstance().registerComponent(tree));添加节点到getSelectionPath().getLastPathComponent()用treeModel.inserNodeInto(new node(data), parent,parent.getChildCount()),用scrollPathToVisible(childNode.getPath())显示节点;用TreeSelectionListner和Tree[WillExpand|Expansion]Listener监听树的选择和展开,用setEditable使树可编辑,用setDragEnabled和setTransferHandler设置拖动特性,用(expand|collapse)Path(TreePath)展开或收缩分支。

(六): 特殊用途容器

28. 内部窗口(JInternalFrame):通常添加至JDesktopPane中,它不是顶层窗口(不能是组件层次的根,产生InternalFrameEvent),却是平台无关的(可编程最小化、主图标、标题栏修饰);需要用set(Size|Bounds)或pack设大小否则不可见,可用setLocation设相对位置,组件可添加至其内容窗格中,内部对话框用JOptionPane.showInternal等函数,desktop.setDragMode(OUTLINE_DRAG_MODE)启用边框拖动模式可提高效率。

29. 层次窗格(JLayeredPane):为容器增加了第三维度Z-Order,被用在JRootPane中;用add(Componet,Integer)添加指定层次的组件(层次高的在前面),用setLayer更改组件的层次,用setPosition或moveTo(Front|Bach)调整层次内的上下位置;组件可用setBounds设定大小和位置,现有的LayoutManager只会把所有组件看作一层而布局;用(lowest|highest)Layer和getComponent(s|Count)InLayer获得所有组件。

30. 根窗格(JRootPane):用于顶层容器中,包含玻璃窗格(getGlassPane,默认透明,用于拦截输入事件)、层次窗格(getLayeredPane,放置菜单栏和内容窗格)、内容窗格(getContentPane,放置组件)、菜单栏(setJMenuBar,主菜单);使用setDefaultButton可设默认按钮。

原文地址:https://www.cnblogs.com/ltb6w/p/8438207.html

时间: 2024-10-09 20:23:54

java中经常使用的Swing组件总结的相关文章

java中解决组件重叠的问题(例如鼠标移动组件时)

java中解决组件覆盖的问题!     有时候在移动组件的时候会出现两个组件覆盖的情况,但是你想让被覆盖的组件显示出来或者不被覆盖! 在设计GUI时已经可以定义组件的叠放次序了(按摆放组件的先后顺序). 真正麻烦的是响应哪个组件,这就要创建一个链表,把组件对象按顺序存起来,响应事件时扫描这个链表,按 链表中的先后顺序选择响应组件对象.     所以要想满足自己的需求,那么在添加组件的时候就要注意顺序就好了! 另外如果不想用上面的方法,那么你就采用JLayeredPane这个类,分层面板可以帮助你

java Swing组件之JSplitPane使用

使用 JSplitPane.HORIZONTAL_SPLIT 可让分隔窗格中的两个 Component 从左到右排列,或者使用 JSplitPane.VERTICAL_SPLIT 使其从上到下排列.改变 Component 大小的首选方式是调用 setDividerLocation,其中 location 是新的 x 或 y 位置,具体取决于 JSplitPane 的方向. 要将 Component 调整到其首选大小,可调用 resetToPreferredSizes. 1.常见构造方法 JSp

Java使用swing组件实现简易计算器

本文记录了笔者的第一个Java程序,基于Java抽象窗口工具(abstract window toolkit , AWT)和Swing(Swing属于Java Foundation Classes的一部分)实现的建议计算器,由于笔者经验有限,初学Java,代码略带bug,无法实现7+5×8之类式子的计算,只能实现算术运算符按从高到低的式子运算,部分代码略显冗杂,希望大家在评论区积极讨论完善代码! 计算器示意图 一.代码相关知识简介 JFrame(框架) 使用JFrame frame = new

JAVA Swing 组件演示***

下面是Swing组件的演示: package a_swing; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Cursor; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.Ac

【Java基础学习笔记】Java中Socket+Swing设计简单通信

在<Java从入门到精通(第3版)>的原书中,客户端仅能发送一次数据,我在此基础上修改了一点点,实现了多次发送数据的单向通讯. 1. 服务器端 package Tcp_IP; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import java.sq

ZeroMQ(java)中组件间数据传输(Pipe的实现)

在ZeroMQ(java)中,整个IO的处理流程都是分层来进行的,当然处于最下端的肯定是前面介绍过的poller以及StreamEngin了....涉及到上层的话就还有session,以及socket,先用一张图来大概的描述一下整个层次关系吧.. 整个分层的结构大概就是这样吧,其中poller与StreamEngin是怎么交互的,这个就不说饿了吧,然后Session这个怎么与session之间交互呢,这个以后再说吧,其实在streamEngin里面有自己的session引用..反正这里没啥意思.

16)JAVA实现回调(Android,Swing中各类listener的实现)

? ?????熟悉MS-Windows和X Windows事件驱动设计模式的开发人员,通常是把一个方法的指针传递给事件源,当某一事件发生时来调用这个方法(也称为"回调").Java的面向对象的模型目前不支持方法指针,似乎不能使用这种方便的机制.?????Java支持interface,通过interface可以实现相同的回调.其诀窍就在于定义一个简单的interface,申明一个被希望回调的方法.?????例如,假定当某一事件发生时会得到通知,我们可以定义一个interface:???

Java中的事件监听机制

鼠标事件监听机制的三个方面: 1.事件源对象: 事件源对象就是能够产生动作的对象.在Java语言中所有的容器组件和元素组件都是事件监听中的事件源对象.Java中根据事件的动作来区分不同的事件源对象,动作发生在哪个组件上,那么该组件就是事件源对象 2.事件监听方法: addMouseListener(MouseListener ml) ;该方法主要用来捕获鼠标的释放,按下,点击,进入和离开的动作:捕获到相应的动作后,交由事件处理类(实现MouseListener接口)进行处理. addAction

java中并发集合

在 Java 编程的早期阶段,位于 Oswego 市的纽约州立大学(SUNY) 的一位教授决定创建一个简单的库,以帮助开发人员构建可以更好地处理多线程情况的应用程序.这并不是说用现有的库就不能实现,但是就像有了标准网络库一样,用经过调试的.可信任的库更容易自己处理多线程.在 Addision-Wesley 的一本相关书籍的帮助下,这个库变得越来越流行了.最终,作者 Doug Lea 决定设法让它成为 Java 平台的标准部分 -- JSR-166.这个库最后变成了 Tiger 版本的 java.