您的位置:首页 > 游戏 > 游戏 > JAVA基础 - 图形页面

JAVA基础 - 图形页面

2024/10/5 17:25:51 来源:https://blog.csdn.net/Cx20190420/article/details/140792713  浏览:    关键词:JAVA基础 - 图形页面

目录

一. 简介

二. Swing 技术基础

三. 事件处理模型

四. 适配器

五. 布局管理

六. 可视化工具



一. 简介

Java 图形用户界面技术主要有: AWT Applet 、 Swing和 JavaFX

AWT(Abstract Window Toolkit,抽象窗口工具包)

AWT 是 Java 最早的用于创建图形用户界面(GUI)的工具包。它提供了基本的窗口、按钮、文本框等组件。然而,AWT 的组件依赖于本地操作系统的原生组件,这导致了界面在不同操作系统上可能会有外观和行为的差异,并且在一些情况下性能不是很好。

Applet

Applet 是一种可以嵌入到网页中的 Java 程序。它通过浏览器运行,能够与用户进行交互,并执行一些简单的任务。但由于安全限制和浏览器技术的发展,Applet 的使用已经逐渐减少。

Swing

Swing 是建立在 AWT 之上的一套更强大和灵活的 GUI 工具包。Swing 组件不依赖于本地操作系统的原生组件,而是由 Java 自己绘制,因此具有更好的跨平台一致性和可定制性。Swing 提供了丰富的组件,如各种按钮、文本域、列表、表格等,并且支持自定义组件的外观和行为。

JavaFX

JavaFX 是 Java 平台上较新的用于创建富客户端应用程序的图形和多媒体框架。它具有更现代化的设计和更强大的功能,支持 2D 和 3D 图形、动画、多媒体等。JavaFX 的组件和布局方式更加灵活和易于使用,并且与现代的开发理念和技术更加契合。

二. Swing 技术基础

Swing 是 Java 中用于构建图形用户界面(GUI)的一套工具库。

Swing 的特点

  1. 跨平台性:可以在不同操作系统上保持相似的外观和行为。
  2. 丰富的组件:提供了多种组件满足各种界面需求。

容器组件

  1. JFrame:顶层窗口容器,通常作为应用程序的主窗口。可以设置大小、位置、标题等属性。
  2. JPanel:通用的面板容器,用于组织和分组其他组件。
  3. JScrollPane:当组件内容超出显示区域时,提供滚动条。

常用组件

  1. JButton:按钮,可响应点击事件。
  2. JTextField:单行文本输入框。
  3. JTextArea:多行文本输入区域。
  4. JLabel:用于显示文本或图像的标签。
  5. JCheckBox:复选框。
  6. JRadioButton:单选按钮。
  7. JComboBox:下拉列表框。

布局管理器
用于管理容器内组件的排列方式,常见的有:

  1. FlowLayout:组件按照从左到右的顺序排列,满一行后换行。
  2. BorderLayout:将容器分为东、西、南、北和中心五个区域。
  3. GridLayout:以网格形式排列组件。

例如,使用 BorderLayout 布局创建一个包含按钮和文本区域的窗口:

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;public class SwingExample {public static void main(String[] args) {JFrame frame = new JFrame("Swing Example");frame.setLayout(new BorderLayout());JButton button = new JButton("Click Me");frame.add(button, BorderLayout.NORTH);JTextArea textArea = new JTextArea();frame.add(textArea, BorderLayout.CENTER);frame.setSize(400, 300);frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}
}

总之,Swing 提供了丰富的功能和组件,通过合理选择容器、组件和布局管理器,可以创建出功能丰富、界面友好的图形界面应用程序。

三. 事件处理模型

在 Java 的 Swing 中,事件处理模型用于处理用户与界面组件的交互操作所产生的事件。

事件源:产生事件的组件,如按钮、文本框等。

事件:用户操作(如点击按钮、输入文本等)所触发的对象,表示发生的具体事情。

事件监听器:用于监听特定类型事件的接口实现。

Swing 中的事件处理通常遵循以下步骤:

  1. 定义事件监听器接口的实现类,实现相应的方法来处理事件。

    • 例如,对于按钮的点击事件,可以实现 ActionListener 接口。
  2. 将事件监听器注册到事件源上。

    • 通过组件的 addXXXListener 方法,将监听器对象添加到组件。

下面是一个简单的示例,展示了如何处理按钮的点击事件:

import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class EventHandlingExample {public static void main(String[] args) {JFrame frame = new JFrame("Event Handling");JButton button = new JButton("Click Me");// 创建事件监听器对象ActionListener listener = new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("Button clicked!");}};// 将监听器注册到按钮button.addActionListener(listener);frame.add(button);frame.setSize(300, 200);frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}
}

在上述示例中,创建了一个匿名内部类作为 ActionListener 的实现,当按钮被点击时,会输出相应的消息。

除了 ActionListener ,Swing 还提供了许多其他的事件监听器接口,如 MouseListener (处理鼠标事件)、KeyListener (处理键盘事件)等,以满足不同类型的交互需求。

四. 适配器

在 Java 的 Swing 事件处理中,有时可能不需要实现事件监听器接口中的所有方法,这时可以使用适配器类。

适配器类是为事件监听器接口提供的空实现类。通过继承适配器类,只需要重写实际需要处理的事件方法,而无需为接口中的其他方法提供空实现。

例如,对于鼠标事件监听器 MouseListener,可以使用 MouseAdapter 类:

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;public class AdapterExample extends JFrame {public AdapterExample() {JPanel panel = new JPanel();panel.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {System.out.println("鼠标点击");}});add(panel);setSize(400, 400);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setVisible(true);}public static void main(String[] args) {new AdapterExample();}
}

在上述示例中,通过继承 MouseAdapter 类并只重写 mouseClicked 方法来处理鼠标点击事件,而无需为其他鼠标事件方法(如 mousePressed 、 mouseReleased 等)提供实现。

类似的,对于其他事件监听器接口,如 KeyAdapter 用于键盘事件、 WindowAdapter 用于窗口事件等,也可以采用相同的方式来简化事件处理代码。

五. 布局管理

在 Java 的 Swing 中,布局管理器用于控制组件在容器中的排列方式和位置。以下是一些常见的布局管理器:

  1. FlowLayout(流式布局):
    • 组件按照从左到右的顺序排列,当一行排满后,会自动换行到下一行。
    • 示例代码:
    import javax.swing.JFrame;import javax.swing.JButton;import java.awt.FlowLayout;public class FlowLayoutExample {public static void main(String[] args) {JFrame frame = new JFrame("FlowLayout Example");frame.setLayout(new FlowLayout());JButton button1 = new JButton("Button 1");JButton button2 = new JButton("Button 2");JButton button3 = new JButton("Button 3");frame.add(button1);frame.add(button2);frame.add(button3);frame.setSize(300, 200);frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}
  1. BorderLayout(边界布局):
    • 将容器划分为东(EAST)、西(WEST)、南(SOUTH)、北(NORTH)和中(CENTER)五个区域。
    • 每个区域只能放置一个组件,如果添加多个组件,只有最后添加的那个组件会显示。
    • 示例代码:
    import javax.swing.JFrame;import javax.swing.JButton;import java.awt.BorderLayout;public class BorderLayoutExample {public static void main(String[] args) {JFrame frame = new JFrame("BorderLayout Example");frame.setLayout(new BorderLayout());JButton northButton = new JButton("North");JButton southButton = new JButton("South");JButton eastButton = new JButton("East");JButton westButton = new JButton("West");JButton centerButton = new JButton("Center");frame.add(northButton, BorderLayout.NORTH);frame.add(southButton, BorderLayout.SOUTH);frame.add(eastButton, BorderLayout.EAST);frame.add(westButton, BorderLayout.WEST);frame.add(centerButton, BorderLayout.CENTER);frame.setSize(300, 200);frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}
  1. GridLayout(网格布局):
    • 将容器划分为指定行数和列数的网格,组件按照从左到右、从上到下的顺序依次放入网格中。
    • 示例代码:
    import javax.swing.JFrame;import javax.swing.JButton;import java.awt.GridLayout;public class GridLayoutExample {public static void main(String[] args) {JFrame frame = new JFrame("GridLayout Example");frame.setLayout(new GridLayout(3, 2));  // 3 行 2 列JButton button1 = new JButton("Button 1");JButton button2 = new JButton("Button 2");JButton button3 = new JButton("Button 3");JButton button4 = new JButton("Button 4");JButton button5 = new JButton("Button 5");JButton button6 = new JButton("Button 6");frame.add(button1);frame.add(button2);frame.add(button3);frame.add(button4);frame.add(button5);frame.add(button6);frame.setSize(300, 200);frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}
  1. CardLayout(卡片布局):

    • 可以将多个组件层叠放置,每次只显示其中一个组件,通过切换来显示不同的组件。
    • 常用于实现选项卡式的界面。
  2. BoxLayout(箱式布局):

    • 按照水平或垂直方向排列组件,可以设置组件之间的间距。

选择合适的布局管理器取决于具体的界面设计需求。有时也可以结合使用多个容器,并为每个容器设置不同的布局管理器,以实现更复杂的界面布局。

六. 可视化工具

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com