欢迎访问宙启技术站
智能推送

使用javax.swing开发跨平台应用程序

发布时间:2023-12-23 02:42:49

javax.swing是Java语言中用于开发图形用户界面(GUI)的标准库之一。它提供了一系列的类和方法,用于创建和管理窗口、按钮、文本框、列表、菜单等GUI组件。使用javax.swing可以开发跨平台的应用程序,因为它是基于Java虚拟机运行的,可以在不同操作系统上运行。

下面是一个使用javax.swing开发的简单计算器的例子:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Calculator extends JFrame implements ActionListener {
    // GUI组件
    private JTextField textField;
    private JButton[] numberButtons;
    private JButton[] functionButtons;
    private JButton addButton, subButton, mulButton, divButton;
    private JButton decButton, equButton, delButton, clrButton;
    private JPanel panel;

    // 计算器变量
    private double num1 = 0, num2 = 0, result = 0;
    private char operator;

    public Calculator() {
        // 设置窗口属性
        this.setSize(300, 400);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("Calculator");

        // 创建GUI组件
        textField = new JTextField();
        numberButtons = new JButton[10];
        functionButtons = new JButton[8];
        addButton = new JButton("+");
        subButton = new JButton("-");
        mulButton = new JButton("*");
        divButton = new JButton("/");
        decButton = new JButton(".");
        equButton = new JButton("=");
        delButton = new JButton("Delete");
        clrButton = new JButton("Clear");

        // 设置布局
        panel = new JPanel();
        panel.setLayout(new GridLayout(4, 4));

        // 添加组件到面板
        panel.add(numberButtons[1]);
        panel.add(numberButtons[2]);
        panel.add(numberButtons[3]);
        panel.add(addButton);

        panel.add(numberButtons[4]);
        panel.add(numberButtons[5]);
        panel.add(numberButtons[6]);
        panel.add(subButton);

        panel.add(numberButtons[7]);
        panel.add(numberButtons[8]);
        panel.add(numberButtons[9]);
        panel.add(mulButton);

        panel.add(decButton);
        panel.add(numberButtons[0]);
        panel.add(equButton);
        panel.add(divButton);

        // 设置监听器
        addButton.addActionListener(this);
        subButton.addActionListener(this);
        mulButton.addActionListener(this);
        divButton.addActionListener(this);
        decButton.addActionListener(this);
        equButton.addActionListener(this);
        delButton.addActionListener(this);
        clrButton.addActionListener(this);

        // 添加组件到窗口
        this.add(textField, BorderLayout.NORTH);
        this.add(panel, BorderLayout.CENTER);
        this.add(delButton, BorderLayout.WEST);
        this.add(clrButton, BorderLayout.EAST);

        // 显示窗口
        this.setVisible(true);
    }

    public static void main(String[] args) {
        // 在事件调度线程中创建和显示GUI
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new Calculator();
            }
        });
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // 处理按钮事件
        Object source = e.getSource();

        for (int i = 0; i < 10; i++) {
            if (source == numberButtons[i]) {
                textField.setText(textField.getText() + i);
            }
        }

        if (source == decButton) {
            textField.setText(textField.getText() + ".");
        }

        if (source == addButton) {
            num1 = Double.parseDouble(textField.getText());
            operator = '+';
            textField.setText("");
        }

        if (source == subButton) {
            num1 = Double.parseDouble(textField.getText());
            operator = '-';
            textField.setText("");
        }

        if (source == mulButton) {
            num1 = Double.parseDouble(textField.getText());
            operator = '*';
            textField.setText("");
        }

        if (source == divButton) {
            num1 = Double.parseDouble(textField.getText());
            operator = '/';
            textField.setText("");
        }

        if (source == equButton) {
            num2 = Double.parseDouble(textField.getText());

            switch (operator) {
                case '+':
                    result = num1 + num2;
                    break;
                case '-':
                    result = num1 - num2;
                    break;
                case '*':
                    result = num1 * num2;
                    break;
                case '/':
                    result = num1 / num2;
                    break;
            }

            textField.setText(String.valueOf(result));
        }

        if (source == clrButton) {
            textField.setText("");
        }

        if (source == delButton) {
            String str = textField.getText();
            textField.setText("");
            
            for (int i = 0; i < str.length() - 1; i++) {
                textField.setText(textField.getText() + str.charAt(i));
            }
        }
    }
}

这个例子创建了一个简单的计算器应用程序。用户可以在文本框中输入数字和运算符,然后通过按下等号按钮执行计算。计算结果会显示在文本框中。

这个例子演示了如何使用javax.swing创建窗口、文本框和按钮,并且如何给按钮添加点击事件的监听器。在点击事件的处理方法中,我们可以通过判断事件源来执行不同的逻辑,比如处理数字按钮、运算符按钮等。这个例子还演示了如何处理简单的算术运算。

通过javax.swing和Java语言的特性,我们可以方便地开发出漂亮、易用的跨平台的应用程序。无论是在Windows、Mac还是Linux系统上运行,用户都可以得到一致的使用体验。