You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Eclipse中让Java家务表代码在JFrame上运行并实现GUI交互?

问题描述

我正在开发一个Java程序,想要实现一个GUI界面:提示用户输入星期几,显示当日家务清单,还能通过复选框标记完成状态。目前代码在控制台可正常运行(无复选框功能),但不知道如何将业务逻辑迁移到JFrame上执行。我知道可以用可视化方式给JFrame添加标签、按钮、文本框等组件,但不运行代码就看不到窗口,无法进行可视化编辑。以下是当前代码:

/**
 * @author AMoore
 * @date 4/4/24
 * The purpose of this program  is to prompt a user to enter a day of the week, give them  the daily chores, and allow them to check them off. 
 * 
 */

import java.util.Scanner;
import javax.swing.JFrame;

public class ChoreChartBuilder {
    
    JFrame frame;
    
    public ChoreChartBuilder() {
        initComponenent();
    }
    
    public void initComponenent() {
        frame = new JFrame("Daily Chore Chart");
        frame.setSize(600,600);
        frame.setVisible(true);
    }
    
    public static void main(String[] args) {
        new ChoreChartBuilder();
        
        Scanner input = new Scanner(System.in);
        
        String mon = "Monday";
        String tue = "Tuesday";
        String wed = "Wednesday";
        String thu = "Thursday";
        String fri = "Friday";
        String sat = "Saturday";
        String sun = "Sunday";
        
        System.out.println("");
        System.out.println("Please enter the day of the week: ");
        
        String day = input.nextLine();
        
        input.close();
        
        if (day.equalsIgnoreCase(mon)) {
            System.out.println("Monday Chores: ");
        }
        else if (day.equalsIgnoreCase(tue)) {
            System.out.println("Tuesday Chores: ");
        }
        else if (day.equalsIgnoreCase(wed)) {
            System.out.println("Wednesday Chores: ");
        }
        else if (day.equalsIgnoreCase(thu)) {
            System.out.println("Thursday Chores: ");
        }
        else if (day.equalsIgnoreCase(fri)) {
            System.out.println("Friday Chores: ");
        }
        else if (day.equalsIgnoreCase(sat)) {
            System.out.println("Saturday Chores: ");
        }
        else if (day.equalsIgnoreCase(sun)) {
            System.out.println("Sunday Chores: ");
        }
        else {
            System.out.println("A day of the week was not entered. Goodbye.");
        }
    }
}
解决方案

核心修改方向

  • 移除控制台输入逻辑,改用GUI组件(文本框+按钮)接收用户输入
  • 给JFrame添加家务展示面板,用复选框承载家务项
  • 给按钮绑定事件监听器,触发对应星期的家务渲染逻辑

修改后的完整代码

/**
 * @author AMoore
 * @date 4/4/24
 * 程序功能:提示用户输入星期几,显示当日家务并允许标记完成状态
 */

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

public class ChoreChartBuilder {
    JFrame frame;
    JTextField dayInput;
    JPanel chorePanel;

    public ChoreChartBuilder() {
        initComponent();
    }

    public void initComponent() {
        frame = new JFrame("Daily Chore Chart");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 600);
        frame.setLayout(new FlowLayout());

        // 添加输入提示标签
        JLabel promptLabel = new JLabel("请输入星期几:");
        frame.add(promptLabel);

        // 添加输入文本框
        dayInput = new JTextField(15);
        frame.add(dayInput);

        // 添加确认按钮并绑定事件
        JButton confirmBtn = new JButton("确认");
        confirmBtn.addActionListener(this::showChoresByInput);
        frame.add(confirmBtn);

        // 家务展示面板,支持滚动
        chorePanel = new JPanel();
        chorePanel.setLayout(new BoxLayout(chorePanel, BoxLayout.Y_AXIS));
        frame.add(new JScrollPane(chorePanel));

        frame.setVisible(true);
    }

    private void showChoresByInput(ActionEvent e) {
        String day = dayInput.getText().trim();
        // 清空旧的家务内容
        chorePanel.removeAll();

        // 根据输入的星期渲染对应家务
        switch (day.toLowerCase()) {
            case "monday", "周一":
                addChore("扫地");
                addChore("倒垃圾");
                break;
            case "tuesday", "周二":
                addChore("擦桌子");
                addChore("整理衣柜");
                break;
            case "wednesday", "周三":
                addChore("拖地");
                addChore("洗碗");
                break;
            case "thursday", "周四":
                addChore("擦窗户");
                addChore("浇花");
                break;
            case "friday", "周五":
                addChore("洗衣服");
                addChore("擦油烟机");
                break;
            case "saturday", "周六":
                addChore("大扫除");
                addChore("采购日用品");
                break;
            case "sunday", "周日":
                addChore("整理书房");
                addChore("休息(可选)");
                break;
            default:
                chorePanel.add(new JLabel("输入无效,请输入正确的星期名称!"));
                break;
        }

        // 更新面板显示
        chorePanel.revalidate();
        chorePanel.repaint();
    }

    private void addChore(String choreName) {
        JCheckBox choreBox = new JCheckBox(choreName);
        chorePanel.add(choreBox);
    }

    public static void main(String[] args) {
        // 在Swing事件调度线程启动GUI,保证线程安全
        SwingUtilities.invokeLater(ChoreChartBuilder::new);
    }
}

关键说明

  1. 线程安全启动:用SwingUtilities.invokeLater启动GUI,符合Swing线程规范,避免界面异常
  2. 布局适配:整体用FlowLayout排列输入组件,家务面板用BoxLayout垂直排列复选框,搭配滚动面板适配多内容场景
  3. 交互逻辑:按钮点击触发家务渲染,每次先清空旧内容再加载新项,保证界面整洁
  4. 输入兼容:支持中英文星期输入,提升用户体验

内容的提问来源于stack exchange,提问作者abbey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 11:17:03