Java Swing编写样例

  1. 编写满足以下要求的GUI程序。
    ① 顶部两个文本框只接受大于0小于11的整数。
    ② 文本框数字改变时,自动刷新下部网格区域的按钮。
    ③ 鼠标进入按钮时,在该按钮上显示“*”。
    ④ 鼠标移出按钮时,隐藏该按钮上的文字。

源码:

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

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

class CustomJFrame extends JFrame {

    private JPanel root;
    private JPanel northOfRoot;
    private JPanel buttonsPanel;
    private JTextField rowTextField;
    private JTextField colTextField;

    public CustomJFrame() {

        setTitle("Custom JFrame Test");
        setSize(300, 400);
        // setLayout(null);

        init();

        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    void init() {
        root = new JPanel();
        root.setLayout(new BorderLayout());

        add(root);

        northOfRoot = new JPanel();
        northOfRoot.setLayout(new FlowLayout());
        root.add(northOfRoot, BorderLayout.NORTH);

        JLabel rowText = new JLabel("行数: ");
        northOfRoot.add(rowText);

        rowTextField = new JTextField(5);
        rowTextField.addActionListener(new CustomActionListener(e -> generate()));
        rowTextField.addKeyListener(new CustomLimitKeyInputListener());
        northOfRoot.add(rowTextField);

        JLabel colText = new JLabel("列数: ");
        northOfRoot.add(colText);

        colTextField = new JTextField(5);
        colTextField.addActionListener(new CustomActionListener(e -> generate()));
        colTextField.addKeyListener(new CustomLimitKeyInputListener());
        northOfRoot.add(colTextField);

        // JButton generateButton = new JButton("生成");
        // generateButton.addActionListener(new CustomActionListener(e -> {
        //
        // }));
        // northOfRoot.add(generateButton);



    }

    void generate() {
        String _rowText = rowTextField.getText();
        String _colText = colTextField.getText();
        try {
        	//将String转化为int类型
            int row = Integer.parseInt(_rowText);
            int col = Integer.parseInt(_colText);
            //判断数字是否超出要求
            row = isValidParams(row) ? row : 10;
            col = isValidParams(col) ? col : 10;
            rowTextField.setText(String.valueOf(row));
            colTextField.setText(String.valueOf(col));
            drawButtonPanel(row, col);
        } catch (NumberFormatException n) {
        	//这里其实无法到达,因为前面有CustomLimitKeyInputListener监听器限制了输入只能是数字,锁有不会出现这个异常,没删掉因为懒得删
            JOptionPane.showMessageDialog(root, "输入应为0-11", "warn", JOptionPane.WARNING_MESSAGE);
        }
    }

    boolean isValidParams (int param) {
        if (param <= 0 || param >= 11) {
            return false;
        }
        return true;
    }

    void drawButtonPanel(int row, int col) {

        if (buttonsPanel == null) {
            buttonsPanel = new JPanel();
            root.add(buttonsPanel, BorderLayout.CENTER);
        } else {
            buttonsPanel.removeAll();
        }
        buttonsPanel.setLayout(new GridLayout(row, col));
		
		//渲染按钮
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                JButton jButton = new JButton();
                buttonsPanel.add(jButton);
                jButton.addMouseListener(new MouseAdapter() {
                    @Override
                    public void mouseEntered(MouseEvent e) {
                        jButton.setText("*");
                    }

                    @Override
                    public void mouseExited(MouseEvent e) {
                        jButton.setText("");
                    }
                });
            }
        }
        SwingUtilities.updateComponentTreeUI(buttonsPanel);

    }

}

@FunctionalInterface
interface DealHandler {
    void deal(Object something);
}

class CustomActionListener implements ActionListener {

    private DealHandler dealHandler;

    public CustomActionListener(DealHandler dealHandler) {
        this.dealHandler = dealHandler;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        dealHandler.deal(e);
    }
}

class CustomLimitKeyInputListener extends KeyAdapter {
    @Override
    public void keyTyped(KeyEvent e) {
        if (!Character.isDigit(e.getKeyChar())) {
            //不是数字限制传递
            e.consume();
        }
    }
}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个使用Java Swing编写的大学社团管理系统的示例: ```java import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; public class MainFrame extends JFrame implements ActionListener { private JButton addButton; private JButton deleteButton; private JList<String> activityList; public MainFrame() { // 设置窗口标题 setTitle("大学社团管理系统"); // 创建按钮和列表 addButton = new JButton("添加社团"); deleteButton = new JButton("删除社团"); activityList = new JList<>(); // 设置布局管理器 setLayout(new BorderLayout()); // 添加按钮和列表到窗口 add(addButton, BorderLayout.NORTH); add(deleteButton, BorderLayout.SOUTH); add(new JScrollPane(activityList), BorderLayout.CENTER); // 添加按钮的点击事件监听器 addButton.addActionListener(this); deleteButton.addActionListener(this); // 设置窗口大小和可见性 setSize(400, 300); setVisible(true); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == addButton) { // 处理添加社团按钮点击事件 String activityName = JOptionPane.showInputDialog("请输入社团名称:"); // 在这里执行添加社团的逻辑 } else if (e.getSource() == deleteButton) { // 处理删除社团按钮点击事件 String selectedActivity = activityList.getSelectedValue(); // 在这里执行删除社团的逻辑 } } public static void main(String[] args) { // 获取社团信息 List<Activity> activities = new ActivityDao().getInformation(pr.getAdmin_academy(), pr.getAdmin_major(), pr.getAdmin_class()); // 创建主窗口 MainFrame mainFrame = new MainFrame(); // 将社团信息显示在列表中 DefaultListModel<String> model = new DefaultListModel<>(); for (Activity activity : activities) { model.addElement(activity.getName()); } mainFrame.activityList.setModel(model); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值