GUI 图形用户界面
swing
指的是javax.swing包
此包放的都是用来实现界面的类
所有的类都可以成为组件
● swing 是一个为Java设计的GUI工具包javax.swing,该包中包括了图形用户界面
的各种组件支持。
● 一个 Java 的图形界面,由各种不同类型的“元素”组成,这些“元素”被称为
组件(Component)。
● swing中的组件可以分为两大类:容器(如窗口,对话框,面板)和功能组件(如按钮,输
入框,菜单等)
组件
容器组件
功能组件不能独立地显示出来,必须将组件放在一定的容器(container)中才可以显示出来。
容器可以容纳多个组件,通过调用容器的add(Component comp)方法向容器中添加组件。
窗口(JFrame)和面板(JPanel)是最常用的两个容器。
窗口 (JFrame)
JFrame类用来创建窗体;
我们的类可以直接继承该类,实现窗体制作.
设置窗体的常用方法
-
setSize(int width, int height)
:设置窗体 的宽度和高度。 -
setVisible(boolean b)
:设置窗体是否可见,true 表示可见,false 表示不可见。 -
setTitle(String title)
:设置窗体的标题。 -
setResizable(boolean resizable)
:设置窗体是否可调整大小,true 可调整,false 不可调整。 -
setLocation(int x, int y)
:设置窗体在屏幕上的位置坐标(x 轴和 y 轴坐标)。 -
setLocationRelativeTo(null)
:通常用于将窗体相对于其他组件进行定位,如果参数为 null 一般会将窗体显示在屏幕中央。 -
setDefaultCloseOperation(int operation)
:设置窗体关闭时的操作,比如正常关闭程序等。 -
dispose()
:释放窗体及其相关资源。
-
JFrame.HIDE_ON_CLOSE: 当用户关闭窗口时隐藏窗口,但程序仍在运行。
-
JFrame.DISPOSE_ON_CLOSE: 用户关闭窗口时释放窗口资源,但程序仍在运行。
-
JFrame.DO_NOTHING_ON_CLOSE: 忽略关闭操作,程序继续运行,需要开发者自己实现关闭窗口的逻辑。
-
JFrame.EXIT_ON_CLOSE: 用户关闭窗口时自动结束程序。
JFrame.DO_NOTHING_ON_CLOSE选项表示在用户关闭窗口时不做任何操作,窗口不会随之关闭,程序将继续运行。
-
JFrame.EXIT_ON_CLOSE: 指定当用户关闭窗口时自动结束程序。
-
JFrame.HIDE_ON_CLOSE: 指定当用户关闭窗口时隐藏窗口,但程序仍在运行。
-
JFrame.DISPOSE_ON_CLOSE: 指定当用户关闭窗口时释放窗口资源,但程序仍在运行。
每种选项都有不同的行为,开发者可以根据自己的需求选择合适的选项。
面板 (JPanel)
Jpanel
• JPanel面板,它是轻量级的容器;
• 面板中可以添加其它组件,也可以设置布局,我们一般使用面板来实现布局嵌套;
构 造 方 法
JPanel() 创建一个空面板
JPanel(LayoutManaer layout) 创建带有指定布局的面板
自己创建Jpanel面板对象,把JPanel作为一个组件添加到窗口或某个面板中.
//常用方法: void setBackground(Color bg)//设置面板的背景色,由参数bg指定颜色 void setLayout(LayoutManager mgr)//设置面板的布局,参数是布局管理器 Component add(Component comp)//往面板中添加一个组件
swing中,提供了布局管理器类的对象可以管理
● 每个Jpanel都有一个布局管理器对象,
当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器,调用Jpanel的setLayout方法改变其布局管理器对象或通过构造方法设置。
布局管理器
Java中的图形界面在布局管理上采用容器和布局管理相分离的方案,也
就是说容器只是把组件放进来,但它不管怎样放置。至于如何放置需要
用到布局管理器(Container) 。Java中有几种常用的布局管理器,分
别是:FlowLayout , BorderLayout, GridLayout。
流式布局(默认)
FlowLayout
FlowLayout布局管理器是流式布局管理器,它将组件按照从左到右、从上到下的顺序来安排,
并在默认情况下使组件尽量居中放置。
this.setLayout(new FlowLayout());
FlowLayout布局管理器对组件逐行定位,行内从左到右,一行排满后换行。
不改变组件的大小,按组件原有尺寸显示组件,可设置不 同的组件间距,行距以及对齐方式。
构造方法
new FlowLayout(FlowLayout.RIGHT,20,40);右对齐,组件之间水平间距20个像素,垂直间距40个像素。
new FlowLayout(FlowLayout.LEFT);左对齐,水平和垂直间距为缺省值(5)。
new FlowLayout();使用缺省的居中对齐方式,水平和垂直间距为缺省值(5)。
边界布局:
● BorderLayout
BorderLayout布局管理器只允许在容器内放置5个组件,这5个组件的位置是由BorderLayout类中
的North、South、East、West和Center5个常量来确定的,他们对应着容器中的上下左右中,用法
如下:
this.add(new Button(“按钮”) ,BorderLayout.NORTH);
this.add(new Button(“按钮”) ,BorderLayout.CENTER);
组件在BorderLayout中的大小都是可以改变的。一般情况下可以让中间区域大一些,而且可以只用其
中几个区域。
● BorderLayout将整个容器的布局划分成东(EAST)西(WEST)南(SOUTH)北(NORTH)中
(CENTER)五个区域,组件只能被添加到指定的区域。
● 如不指定组件的加入部位,则默认加入到CENTER区。
● 每个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖。
网格布局:
GridLayout
● GridLayout布局管理器是矩形网格,在网格中放置组件,每个网格的高度和宽
度都相等,组件随着网格的大小而在水平和垂直方向上拉伸,网格的大小是由容器的
大小和创建网格的多少来确定的。其用法如下:
this.setLayout(new GridLayout(2 , 3)); //创建一个2行3列的网格
this.add(new Button(“按钮”));
● 在 GridLayout 构造方法中指定分割 的行数和列数.
标签(JLabel)
标签是容纳文本和图标的控件,通常用来在界面中标识别的控件。
构造函数: JLabel() //创建一个空的标签 JLabel(String text) // 创建一个带文本的标签 方法: void setText(String text) //设置标签上的文本 String getText() // 获得标签上的文本 setFont(new Font(“宋体”,Font.BOLD, 18)); //设置字体
常用组件
单行文本(JTextField)
//JTextField的构造函数: JTextField(int columns) 方法: void setText(String text) //设置文本框中的文本 String getText() //获得文本框中的文本 append(String text):在文本框末尾添加指定的文本内容。 1. setText(String text): 用于设置文本框的文本内容。 2. getText(): 用于获取文本框中的文本内容。 3. setEditable(boolean editable): 用于设置文本框是否可编辑。 4. setEnabled(boolean enabled): 用于设置文本框是否可用。 5. setToolTipText(String text): 用于设置文本框的工具提示文本。 6. getToolTipText(): 用于获取文本框的工具提示文本。 7. setCaretPosition(int position): 用于设置文本框中光标的位置。 8. requestFocus(): 用于请求焦点给文本框。 9. addActionListener(ActionListener listener): 用于添加动作监听器,监听文本框的事件。 10. setHorizontalAlignment(int alignment): 用于设置文本框中文本的水平对齐方式。
多行文本框(JTextArea)
构造函数: JTextArea(int rows, int columns)//创建一个指定行数和列数的空文本域 方法: void setText(String text)//设置文本域中的文本 String getText() //获得文本域中的文本 void setFont(Font font) //设置文本域中文本的字体 void setLineWrap(boolean wrap) //是否自动换行,默认false jTextArea.setEditable(false);//内容只能看,不能改
//如果需要文本区自动出现滚动条,可将文本区对象放入滚动窗格(JScrollPane)中: JScrollPane scrollPane = new JScrollPane(txtArea); add(scrollPane );
密码框:JPasswordField
构造函数: JPasswordField(String text) JPasswordField(String text, int columns) 方法: char[] getPassword()
JScrollPane
是 Java 中的一个 Swing 组件,它提供了一个可滚动的视图,用于显示一个组件或一组组件。通常用于显示大量内容,这些内容可能无法适应窗口或面板的可见区域。
JScrollPane 可以添加到任何扩展了 JComponent 的容器中,如 JPanel 或 JFrame,并且在需要时会自动提供水平和/或垂直滚动条。
要使用 JScrollPane,只需创建一个实例,然后使用 setViewportView() 方法将要滚动的组件或组件添加到 JScrollPane 中。可以使用JScrollPane类提供的各种方法定制滚动条的行为和外观。
总的来说,JScrollPane 是一个用于创建需要在有限空间中显示大量内容的用户界面的有用组件。
JScrollPane jScrollPane1 = new JScrollPane(jTextArea1); //此行代码是创建一个滚动面板(JScrollPane)并将文本区域(jTextArea1)放入其中。滚动面板可以让用户在文本区域内容超出可视区域时通过滚动条进行查看。
JScrollPane里面常用的方法包括: setViewportView(Component view):设置JScrollPane的视口视图,即将需要滚动的组件(例如JTextArea、JTable等)放置在视口视图内。 getViewport():返回表示JScrollPane的视口的JViewport对象,可以通过该方法获取视口对象进行进一步的操作。 setHorizontalScrollBarPolicy(int policy):设置水平滚动条的显示策略,可选值为 //JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED, 表示水平滚动条仅在视口的视图宽度大于视口宽度时显示。 //JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS, 表示水平滚动条始终显示,无论视口的视图宽度与视口宽度的比较结果如何。 //JScrollPane.HORIZONTAL_SCROLLBAR_NEVER。表示不显示水平滚动条,即使视口的视图宽度大于视口宽度。 setHorizontalScrollBarPolicy(int policy):要取消JScrollPane的水平滚动条,可以使用并将参数设置为JScrollPane.HORIZONTAL_SCROLLBAR_NEVER。 setVerticalScrollBarPolicy(int policy):设置垂直滚动条的显示策略,可选值为JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.VERTICAL_SCROLLBAR_NEVER。 setPreferredSize(Dimension preferredSize):设置JScrollPane的首选大小。 setViewportViewPosition(Point p):设置视口的当前显示位置,使视口显示指定的位置。参数p指定视口中视图标和视口的左上角之间的偏移。 getHorizontalScrollBar():返回水平滚动条的JScrollBar对象。 getVerticalScrollBar():返回垂直滚动条的JScrollBar对象。 getViewportBorder():返回当前边框,如果没有边框,则为null。 setViewportBorder(Border viewportBorder):设置JScrollPane的视口边框。
JScrollPane是Swing组件中用于包装其他组件,当组件内容超出容器大小,就可以通过滚动条来查看被遮盖的部分。
使用JScrollPane的基本步骤如下:
-
创建需要放置在JScrollPane中的组件(例如JTextArea、JTable等)。
-
创建JScrollPane对象,将步骤1中的组件传入JScrollPane的构造函数中。
-
将JScrollPane添加到容器中显示出来。
示例代码如下:
import javax.swing.*; import java.awt.*; public class ScrollPaneExample { public static void main(String[] args) { JFrame frame = new JFrame("Scroll Pane Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 创建一个文本区域 JTextArea textArea = new JTextArea(10, 30); textArea.setText("This is a JTextArea with a JScrollPane."); // 创建一个滚动面板,并将文本区域放入其中 JScrollPane scrollPane = new JScrollPane(textArea); // 将滚动面板添加到主容器中 frame.add(scrollPane, BorderLayout.CENTER); // 设置窗口属性并显示窗口 frame.setSize(300, 200); frame.setVisible(true); } }
运行该示例代码,会显示一个带有滚动条的文本区域。当文本内容超出文本区域的大小时,可以通过滚动条来查看被遮盖的部分。
按钮(JButton)
构造方法: JButton(String text) //创建一个带文本的标签 方法: void setBackground(Color bg) //设置按钮的背景色 void setEnabled(boolean b) //设置启用(或禁用)按钮,由参数b决定 void setToolTipText(String text) //设置按钮的悬停提示信息
菜单栏,菜单,菜单项
菜单栏组件: //构造方法: JMenuBar(); //方法: add(menu); //向菜单栏添加菜单 *********************************************** 菜单组件: //构造方法: JMenu(“菜单名称"); //方法: add(menuItem); //向菜单添加菜单选项 *********************************************** 菜单项组件: //构造方法: JMenuItem(“菜单项名称"); //方法: setJMenuBar(menuBar);//将菜单栏添加到窗口
事件处理
● 对于采用了图形用户界面的程序来说,事件控制是非常重要的;到目前为止,我们编写的图形用户界面程序都仅仅只是完成了界面,而没有任何实际的功能,要实现相应的功能,必须进行事件处理;
● 用户与GUI组件进行交互就会发生事件,如:按下一个按钮、用键盘输入一个字符、点击鼠标等等;
● 当前我们要关注的并不是“事件是如何产生的” ,而是讨论当发生事件后,我们应当“如何处理” 。
● Java中,事件处理的基本思路如下:
● 一个事件源产生一个事件并把它送到监听器那里,监听器一直等待,直到它收到一个事件,一旦事件被接受,监听器将处理这些事件;
● 添加事件监听器(此处即为匿名类)
按钮对象.addActionListener(new ActionListener() { // 事件处理 @Override public void actionPerformed(ActionEvent e) { //执行操作 } }
对话框
JOptionPane是Java Swing库中的一个类,用于显示简单的对话框和弹出窗口,可以用于与用户进行简单的交互。通过JOptionPane,可以在应用程序中显示消息框、确认框、输入框等不同类型的对话框。
在使用JOptionPane时,可以选择不同的对话框类型(如消息框、确认框、输入框等)以及对话框内容(如消息文本、按钮等)。可以使用JOptionPane提供的静态方法来显示不同类型的对话框,例如:
-
showMessageDialog:显示一个带有消息内容和确定按钮的消息框。
-
showConfirmDialog:显示一个带有确认按钮和取消按钮的确认框。
-
showInputDialog:显示一个带有输入框和确定按钮的输入框。
-
showOptionDialog:显示一个带有自定义按钮和选项的对话框。
通过调用不同的静态方法,并传入对应的参数,可以方便地创建不同类型的对话框并进行交互。例如,可以使用showMessageDialog方法显示一个简单的消息框:
JOptionPane.showMessageDialog(null, "Hello, World!", "Message", JOptionPane.INFORMATION_MESSAGE);
在上面的代码中,第一个参数指定父组件(如果为null,则将消息框显示在默认屏幕中央),第二个参数为消息内容,第三个参数为对话框标题,第四个参数为消息框的类型(INFORMATION_MESSAGE表示信息消息类型)。通过调用showMessageDialog方法可以显示一个带有指定消息和标题的消息框。
总之,JOptionPane是一个方便易用的类,可以用于在Java应用程序中显示各种类型的对话框,为用户提供简单的交互功能。
当使用JOptionPane类时,可以通过调用其不同的静态方法来显示不同类型的对话框。以下是一些常用的方法及其用法:
-
showMessageDialog:显示一个带有消息内容和确定按钮的消息框。
JOptionPane.showMessageDialog(null, "Hello, World!", "Message", JOptionPane.INFORMATION_MESSAGE);
-
showConfirmDialog:显示一个带有确认按钮和取消按钮的确认框。
int result = JOptionPane.showConfirmDialog(null, "Are you sure?", "Confirmation", JOptionPane.YES_NO_OPTION); if (result == JOptionPane.YES_OPTION) { System.out.println("User clicked Yes"); } else { System.out.println("User clicked No"); }
-
showInputDialog:显示一个带有输入框和确定按钮的输入框,并接收用户输入的内容。
String input = JOptionPane.showInputDialog(null, "Please enter your name:", "Input", JOptionPane.PLAIN_MESSAGE); System.out.println("User entered: " + input);
-
showOptionDialog:显示一个带有自定义按钮和选项的对话框,并根据用户选择执行相应的操作。
Object[] options = {"Option 1", "Option 2", "Option 3"}; int choice = JOptionPane.showOptionDialog(null, "Choose an option:", "Options", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]); switch (choice) { case 0: System.out.println("Option 1 selected"); break; case 1: System.out.println("Option 2 selected"); break; case 2: System.out.println("Option 3 selected"); break; }
除了上面列出的几种常用方法外,JOptionPane类还提供了其他方法用于显示不同类型的对话框,比如显示错误消息框、警告框等。通过选择合适的方法和参数,可以根据需要创建不同类型的对话框,并与用户进行交互。JOptionPane类提供了一种简单而方便的方式来处理和显示对话框,是Java Swing GUI编程中常用的工具之一。
JOptionPane对话框 showMessageDialog()://消息对话框 主要有五种消息类型,类型不同,图标不同: ERROR_MESSAGE //错误消息提示 INFORMATION_MESSAGE //信息提示 WARNING_MESSAGE //警告提示 QUESTION_MESSAGE //问题提示 PLAIN_MESSAGE //简洁提示 showConfirmDialog()://确认对话框 主要有四种消息类型,类型不同,图标不同: DEFAULT_OPTION //默认选项 YES_NO_OPTION //是/否选项 YES_NO_CANCEL_OPTION //是/否/取消选项 OK_CANCEL_OPTION //确定/取消