Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

JavaFX && JFrame(含知识点)

一、总概述

JavaFX 和 JFrame 是两个不同的框架,用于创建图形用户界面(GUI)。JavaFX 是一个用于创建丰富客户端应用程序的现代框架,而 JFrame 是 Swing 框架的一部分,Swing 是 Java 早期的 GUI 框架。

在 JavaFX 中,没有直接等价于 JFrame 的类。

但是,JavaFX 提供了一个名为 `Stage` 的类,它可以用作应用程序的主窗口。`Stage` 类提供了类似于 JFrame 的功能,如设置标题、大小、位置等。

** 以下是一个简单的 JavaFX 应用程序示例,它创建了一个类似于 JFrame 的窗口: **

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class JavaFXExample extends Application {

    @Override
    public void start(Stage stage) {
        // 创建一个标签
        Label label = new Label("Hello, JavaFX!");

        // 创建一个布局容器并添加标签
        StackPane root = new StackPane();
        root.getChildren().add(label);

        // 创建一个场景
        Scene scene = new Scene(root, 300, 200);

        // 设置场景到舞台
        stage.setScene(scene);

        // 设置窗口标题
        stage.setTitle("JavaFX Example");

        // 显示窗口
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

这个示例创建了一个简单的 JavaFX 应用程序,它显示一个包含 "Hello, JavaFX!" 文本的窗口。

虽然这个示例没有直接使用 JFrame,但它展示了如何使用 JavaFX 创建类似的窗口。

如果你需要在 JavaFX 应用程序中使用 Swing 组件,可以使用 `SwingNode` 类将 Swing 组件嵌入到 JavaFX 场景中。

二、JFrame知识点

1. 创建 JFrame:要创建一个 JFrame,只需实例化一个 JFrame 对象并设置相关属性,如标题、大小等。

JFrame frame = new JFrame("My JFrame");

//设置尺寸
frame.setSize(400, 300);

//设置关闭样式
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//可视化
frame.setVisible(true);

2. 设置窗口属性:可以设置 JFrame 的各种属性,如标题、大小、位置、图标等。

frame.setTitle("My JFrame");

frame.setSize(400, 300);

//设置位置
frame.setLocation(100, 100);

//引入图片
frame.setIconImage(new ImageIcon("icon.png").getImage());

3. 设置关闭操作:可以设置 JFrame 的默认关闭操作,如隐藏、退出等。

frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

4. 添加组件:可以向 JFrame 添加 Swing 组件,如按钮、文本框等。

通常需要使用布局管理器(如 BorderLayout、FlowLayout 等)来管理组件的位置和大小。

JButton button = new JButton("Click me");

frame.getContentPane().add(button, BorderLayout.SOUTH);

5. 事件处理:可以为 JFrame 或其组件添加事件监听器,以响应用户操作。

button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("Button clicked");
    }
});

6. 设置菜单栏:可以为 JFrame 设置菜单栏,包括菜单和菜单项。

JMenuBar menuBar = new JMenuBar();

JMenu fileMenu = new JMenu("File");

JMenuItem exitItem = new JMenuItem("Exit");

fileMenu.add(exitItem);

menuBar.add(fileMenu);

frame.setJMenuBar(menuBar);

7. 设置状态栏:可以为 JFrame 设置状态栏,用于显示应用程序状态信息。

JLabel statusLabel = new JLabel("Ready");

frame.getContentPane().add(statusLabel, BorderLayout.SOUTH);

8. 设置图标:可以为 JFrame 设置图标,以便在任务栏或窗口标题栏中显示。

frame.setIconImage(new ImageIcon("icon.png").getImage());

9. 设置透明度:可以设置 JFrame 的透明度,使其半透明或完全透明。

frame.setBackground(new Color(0, 0, 0, 0));
frame.setOpacity(0.5f);

10. 设置全屏模式:可以设置 JFrame 以全屏模式显示。

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setUndecorated(true);

三、JFrame(paint)重点介绍:

在 JFrame 中,`paint` 方法是用于绘制组件内容的方法

当 JFrame 需要重绘其内容时,例如在窗口大小改变、最小化后恢复等情况下,`paint` 方法会被自动调用。

要在 JFrame 中绘制自定义内容,可以重写 `paint` 方法并在其中使用 `Graphics` 对象进行绘制。

import javax.swing.JFrame;
import java.awt.Graphics;
import java.awt.Color;

public class CustomJFrame extends JFrame {

    public CustomJFrame() {
        setTitle("Custom JFrame");
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    @Override
    public void paint(Graphics g) {
        // 调用父类的 paint 方法以绘制默认内容
        super.paint(g);

        // 设置绘制颜色
        g.setColor(Color.RED);

        // 绘制一个矩形
        g.fillRect(50, 50, 100, 100);
    }

    public static void main(String[] args) {
        new CustomJFrame();
    }
}

在这个示例中,我们创建了一个自定义的 JFrame 类 `CustomJFrame`,并重写了 `paint` 方法。

在 `paint` 方法中,我们首先调用了父类的 `paint` 方法以绘制默认内容,然后设置了绘制颜色为红色,并绘制了一个矩形。

需要注意的是,直接重写 `paint` 方法并进行绘制可能会导致性能问题,特别是在需要频繁重绘的情况下。为了提高性能,可以考虑使用 `paintComponent` 方法进行绘制,这需要创建一个继承自 `JPanel` 的自定义面板类,并在该类中重写 `paintComponent` 方法。然后将自定义面板添加到 JFrame 中即可。以下是使用 `paintComponent` 方法的示例:

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Color;

public class CustomJFrame extends JFrame {

    public CustomJFrame() {
        setTitle("Custom JFrame");
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 创建一个自定义面板并添加到 JFrame 中
        CustomPanel panel = new CustomPanel();
        getContentPane().add(panel);

        setVisible(true);
    }

    public static void main(String[] args) {
        new CustomJFrame();
    }
}

class CustomPanel extends JPanel {

    @Override
    protected void paintComponent(Graphics g) {
        // 调用父类的 paintComponent 方法以绘制默认内容
        super.paintComponent(g);

        // 设置绘制颜色
        g.setColor(Color.RED);

        // 绘制一个矩形
        g.fillRect(50, 50, 100, 100);
    }
}

在实例中创建了一个自定义的 JPanel 类 `CustomPanel`,并重写了 `paintComponent` 方法。

在 `paintComponent` 方法中,我们首先调用了父类的 `paintComponent` 方法以绘制默认内容,

然后设置了绘制颜色为红色,并绘制了一个矩形。

最后,我们将自定义面板添加到 JFrame 中。这种方法更推荐,因为它可以提高性能并更好地支持 Swing 的事件处理机制

添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值