Swing 学习

Java Swing 图形界面学习杂记
 概念一:图形用户界面(Graphics User Interface,GUI),用户和程序之间可以方便地进行交互。
  1.早期用户界面设计使用的是AWT就是Abstract Window Toolkit(抽象窗口工具包)的缩写。Java早期的java.awt包中的类创建的组件习惯上称为重组件。
      必须很好的理解两个概念:容器类(Container)和组件类(Component)。向容器添加组件直接用add().
      注意:每当容器添加新的组件或移掉组件时,应该让容器调用validate()方法,以保证容器中的组件能正确显示出来。
     javax.Swing包中有4个最重要的类:Japplet,JFrame,JDialog,JComponent。其中JComponent类的子类都是轻组件。而其他3个是重组件。
 组件:JFrame窗体默认布局是BorderLayout布局。
          特常用的方法:public void setBounds(int x, int y,int width, int height)移动组件并调整其大小。由 x 和 y 指定左上角的新位置,由 width 和 height 指定新的大小。
                                     public void setVisible(boolean b)根据参数 b 的值显示或隐藏此 Window。
                                      public void validate()验证此容器及其所有子组件。
                                      public void setDefaultCloseOperation(int operation)设置用户在此窗体上发起 "close" 时默认执行的操作。
            菜单组件 JMenuBar菜单条  、JMenu菜单、JMenuItem菜单项(JMenu类是JMenuItem类的子类,因此菜单项本身还可以是一个菜单,这样的菜单项叫做子菜单)
P197 代码示例:
****************************************************************************************
            布局设计:1)FlowLayout() 构造一个新的 FlowLayout,它是居中对齐的,默认的水平和垂直间隙是 5 个单位。
                             重设对齐方式:setAlignment(int align) 设置此布局的对齐方式。
 void setHgap(int hgap) 设置组件之间以及组件与 Container 的边之间的水平间隙。
 void setVgap(int vgap)设置组件之间以及组件与 Container 的边之间的垂直间隙。
自己设置组件的大小,调用JComponet类的方法:public void setPreferredSize(Dimension preferredSize)设置此组件的首选大小。如果 preferredSize 为 null,则要求 UI 提供首选大小。
 setSize()方法无效。   例子:myjbutton.setPreferredSize(new Dimension(20,2000));
                             2)BorderLayout()这是一个布置容器的边框布局,它可以对容器组件进行安排,并调整其大小,使其符合下列五个区域:北、南、东、西、中。
                    注意:每个区域只能放一个组件。   它是Window容器的默认布局。JFrame、JDialog类都是Window类的间接子类。故不用我说也知道怎么回事了吧。
                             3)CardLayout()
                           
                   默认了该布局的一个组件,选项卡窗格。JTabbedPane,它允许用户通过单击具有给定标题和/或图标的选项卡,在一组组件之间进行切换。
                  add(Component component, Object constraints)  将一个 component 添加到选项卡窗格中。
                          4)GridLayout(int rows, int cols)创建具有指定行数和列数的网格布局。
                    注意:布局中每个网格都是相同大小,并且强制组件与网格的大小相同。为了克服这个缺点,可以使用容器嵌套。例如:一个容器使用GridLayout布局,将容器分为三行一列,那么可以把另一个容器CarderLayout布局或BorderLayout布局添加到每个网格中。利用这种方法可以设计出符合一定需要的布局。
                          5)public BoxLayout(Container target, int axis)创建一个将沿给定轴放置组件的布局管理器。
                    参数:
                      target - 需要布置的容器
                      axis - 布置组件时使用的轴。它可以是以下值之一:BoxLayout.X_AXIS、BoxLayout.Y_AXIS、BoxLayout.LINE_AXIS 或 BoxLayout.PAGE_AXIS
                   这是盒式布局。默认盒式布局的类有Box,即Box盒式容器。
                     Box类常用的方法:
                     Box.createHorizontalBox() 创建一个从左到右显示其组件的 Box。
                     Box.createVerticalBox()  创建一个从上到下显示其组件的 Box。
static Component createVerticalGlue()
          创建一个纵向 glue 组件。
static Component createVerticalStrut(int height)
          创建一个不可见的、固定高度的组件。
实例:p202
                   6)null布局。 p是某个容器。p.setLayout(null);
                  使用方法public void setBounds(int x, int y,int width, int height)移动组件并调整其大小。来定位。
****************************************************************************************
2.中间容器
       我们都知道轻组件都是容器,但仍有一些经常用来添加组件的轻容器,相对于底层重容器而言,我们习惯称这些轻容器为中间容器。JPanel(面板)、JScrollPane(滚动窗格)
、JSplitPane(拆分窗格)和JLayeredPane(分层窗格)。
       注意:JPanel:JPanel默认是FlowLayout布局。
                   把一个组件放到JScrollPane中,即为组件添加了滚动条。 如 JScrollPane(new JTextArea(3,4));
                  JScrollPane:拆分窗格就是被分成两部分的容器。它怎么说还是容器来的。如:
                  JSplitPane:JSplitPane(int newOrientation, Component newLeftComponent, Component newRightComponent) 创建一个具有指定方向和不连续重绘的指定组件的新 JSplitPane。
                 JLayeredPane:JLayeredPane 为 JFC/Swing 容器添加了深度,允许组件在需要时互相重叠。
 实例p204

****************************************************************************************
3.文本组件。 JTextField、JPasswordField
      JTextField的默认按enter便可触发事件。
 ActionEvent类
public class ActionEventextends AWTEvent指示发生了组件定义的动作的语义事件。当特定于组件的动作(比如被按下)发生时,由组件(比如 Button)生成此高级别事件。事件被传递给每一个 ActionListener 对象,这些对象是使用组件的 addActionListener 方法注册的,用以接收这类事件。
注:要使用键盘在 Button 上触发 ActionEvent,请使用空格键。
实现 ActionListener 接口的对象在发生事件时获取此 ActionEvent。因此,侦听器不必处理个别鼠标移动和鼠标单击的细节,而是可以处理像“按下按钮”这样的“有意义”(语义)事件。
     常用方法:
     public Object getSource()最初发生 Event 的对象。 返回该对象的引用。
     public String getActionCommand() 获取发生ActionEvent事件时与该事件相关的一个命令字符串。对于文本框,发生ActionEvent事件时,用户在文本框中输入的文本字符串就是就是和该事件相关的一个命令字符串。


           ===发生ActionEvent的有:菜单项、===
****************************************************************************************
     4.JTextArea文本区
常用方法:
append(String str)  将给定文本追加到文档结尾
setWrapStyleWord(boolean word)设置换行方式(如果文本区要换行)。
setLineWrap(boolean wrap)设置文本区的换行策略。
实例:p211
文本区的DucumentEvent事件。
实例:p212  注意一下 向文档注册监视器。
=====================================================================
   5、JButton按钮
         public void setMnemonic(int mnemonic)设置当前模型上的键盘助记符。助记符是某种键,它与外观的无鼠标修饰符(通常是 Alt)组合时(如果焦点包含在此按钮祖先窗口中的某个地方)将激活此按钮【java.awt.event.KeyEvent 中定义的 VK_XXX 键代码之一指定】
        用鼠标氨基按钮或按钮获得焦点时按下空格键(Space键),就发生ActionEvent事件。
=====================================================================
  6、JLabel标签
   7、JCheckBox复选框  
   发生ItemEvent事件,addItemListener(ItemListener l)
 实例10-13
  8、JRadioButton单选按钮
   发生ItemEvent事件,addItemListener(ItemListener l)
     ButtonGroup一起使用。 new ButtonGroup().add(new JRadioButton("hi"));//实现多选一
=====================================================================
 9.列表组件
 下拉列表JComboBox
实例10-14
=====================================================================
10 表格组件 JTable
JTable(Object[][] rowData, Object[] columnNames)构造一个 JTable 来显示二维数组 rowData 中的值,其列名称为 columnNames。
实例10-15
=====================================================================
11 树组件
    JTree类的实例称为树组件。它由节点构成。
    public JTree(TreeNode root)返回 JTree,指定的 TreeNode 作为其根,它显示根节点。默认情况下,树可以将叶节点定义为不带子节点的任何节点
    public DefaultMutableTreeNode(Object userObject)创建没有父节点和子节点、但允许有子节点的树节点,并使用指定的用户对象对它进行初始化。
  public boolean isLeaf()如果此节点没有子节点,则返回 true。要区分没有子节点的节点和不能 拥有子节点的节点(例如,区分空目录中的文件),请将此方法与 getAllowsChildren 联合使用 。
实例10-16
=====================================================================
12 进度条组件JProgressBar
public JProgressBar(int min,int max)创建具有指定最小值和最大值的水平进度条。
通过setValue(int n)来填充,通过setStringPainted(true)来设置进度条使用百分数或字符串表示进度条的进度情况。
实例10-17

带进度条的输入流
public ProgressMonitorInputStream(Component parentComponent,Object message,InputStream in)构造一个对象,以监视输入流的进度。
   课本解释:该方法创建的输入流在读取文件时会弹出一个显示读取速度的进度条,进度条在参数C指定的组件的正前方显示,若该参数取null,则屏幕的正前方显示。

学习Java Swing可以通过以下步骤进行: 1. 了解Swing的基本概念和特点。Swing是一个用于开发Java应用程序用户界面的开发工具包,它是由纯Java实现的,并且不依赖于操作系统的支持。与AWT组件相比,Swing提供了更丰富、灵活的功能和模块化组件,可以创建优雅的用户界面。 2. 学习Swing的组件和包。Swing提供了近100个类和几十个接口,主要包含在javax.swing包中。除了JTableHeader类和JTextComponent类分别在swing.table包和swing.text包中,几乎所有的Swing组件都在javax.swing包中。此外,还有一些其他的相关包,如javax.swing.event、javax.swing.table、javax.swing.tree、javax.swing.filechooser、javax.swing.border等,它们提供了不同类型的组件和功能。 3. 熟悉Swing事件处理机制。Swing事件处理机制与AWT的事件处理机制类似,都是通过事件类和监听器接口来实现。了解如何使用Swing事件处理机制可以帮助你对用户界面的交互做出响应。 4. 编写基于Swing的应用程序GUI。你可以创建一个继承自javax.swing.JFrame类的JFrame对象作为应用程序的主窗口。在构造函数中设置窗体的属性,如窗体的名称、大小、可见性和关闭操作。然后,你可以在窗体中添加各种Swing组件,如按钮、文本框、标签等,以构建你想要的用户界面。 下面是一个使用继承javax.swing.JFrame类创建JFrame对象的示例代码: ```java import javax.swing.JFrame; import javax.swing.WindowConstants; public class JFrameDemo extends JFrame { public JFrameDemo() { super("JFrameDemo"); // 设置窗体名称 this.setSize(500, 500); // 设置窗体宽高 this.setVisible(true); // 设置窗体显示 this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 设置窗体关闭操作 } public static void main(String\[\] args) { new JFrameDemo(); // 创建JFrameDemo对象 } } ``` 通过学习Swing的基本概念、组件和包,以及掌握Swing事件处理机制,你可以开始编写基于Swing的应用程序GUI。 #### 引用[.reference_title] - *1* [Java Swing学习](https://blog.csdn.net/weixin_44247784/article/details/102767655)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [JavaSwing学习总结](https://blog.csdn.net/qq_27862695/article/details/48036983)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [java学习——Swing](https://blog.csdn.net/Asugsal/article/details/88825420)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值