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

Java Swing GUI窗口创建代码编译错误求助(附代码及错误日志)

Java Swing GUI编译错误修复方案

问题背景

在VS Code中开发一个简单Java Swing窗口,需求是包含「OK」「Clear」两个按钮,以及FirstName、LastName两行输入框,但代码出现编译错误。

错误信息

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
 at JavaProjectTest.src.MainFrame.main(MainFrame.java:83)

原代码

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

      public class MainFrame extends JFrame{
           final private Font mainFont = new Font("Segoe print", Font.BOLD, 18);
           JTextField tfFirstName, tfLastName;
           JLabel lbWelcome;

      public void initialize(){
    /********** Form Panel ***************/
    JLabel lbFirstName = new JLabel("First Name");
    lbFirstName.setFont(mainFont);

    tfFirstName = new JTextField();
    tfFirstName.setFont(mainFont);

    JLabel lbLastName = new JLabel("Last Name");
    lbLastName.setFont(mainFont);

    tfLastName = new JTextField();
    tfLastName.setFont(mainFont);

    JPanel formPanel = new JPanel();
    formPanel.setLayout(new GridLayout(4, 1, 5, 5));
    formPanel.add(lbFirstName);
    formPanel.add(tfFirstName);
    formPanel.add(lbLastName);
    formPanel.add(tfLastName);

    /********** Welcome Label ***************/
    lbWelcome = new JLabel();
    lbWelcome.setFont(mainFont);

    /********** Button Panel ***************/
    JButton btnOK = new JButton("OK");
    btnOK.setFont(mainFont);
    btnOK.addActionListener(new ActionListener(){
          
        @Override
        public void actionPerformed(ActionEvent e){
            // TODO Auto-generated method stub
            String firstName = tfFirstName.getText();
            String lastName = tfLastName.getText();
            lbWelcome.setText("Hello " + firstName + " " + lastName);
        }
    });

    JButton btnClear = new JButton("Clear");
    btnClear.setFont(mainFont);
    btnClear.addActionListener(new ActionListener(){

        @Override
        public void actionPerformed(ActionEvent e){
            tfFirstName.setText("");
            tfLastName.setText("");
            lbWelcome.setText("");
        }
    });

    JPanel buttonsPanel = new JPanel();
    buttonsPanel.setLayout(new BorderLayout());
    mainPanel.setBackground(new Color(128, 128, 255));
    mainPanel.add(formPanel, BorderLayout.NORTH);
    mainPanel.add(lbWelcome, BorderLayout.CENTER);
    mainPanel.add(buttonsPanel, BorderLayout.SOUTH);

    add(mainPanel);

    JPanel mainPanel = new JPanel();
    mainPanel.setLayout(new BorderLayout());
    mainPanel.setBackground(new Color(128, 128, 255));
    mainPanel.add(formPanel, BorderLayout.NORTH);
    mainPanel.add(lbWelcome, BorderLayout.CENTER);

    setTitle("Welcome");
    setSize(500, 600);
    setMinimumSize(new Dimension(300, 400));
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    setVisible(true);
}

public static void main(String[] args) {
    MainFrame myFrame = new MainFrame();
    myFrame.initialize();
}
}

问题分析

  1. 导入错误:错误导入了JavaFX的javafx.event.ActionEvent,Swing应使用java.awt.event.ActionEvent,同时缺少ActionListener的导入
  2. 变量使用顺序错误:mainPanel未声明就被调用设置背景、添加组件,直接导致编译报错
  3. 按钮面板未添加按钮:创建了buttonsPanel但未将OK、Clear按钮加入,且BorderLayout不适合放置并排按钮,改用FlowLayout更合理
  4. 重复创建mainPanel:代码中两次实例化mainPanel,前面对mainPanel的操作完全无效

修复后的代码

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

public class MainFrame extends JFrame{
    final private Font mainFont = new Font("Segoe print", Font.BOLD, 18);
    JTextField tfFirstName, tfLastName;
    JLabel lbWelcome;

    public void initialize(){
        /********** Form Panel ***************/
        JLabel lbFirstName = new JLabel("First Name");
        lbFirstName.setFont(mainFont);

        tfFirstName = new JTextField();
        tfFirstName.setFont(mainFont);

        JLabel lbLastName = new JLabel("Last Name");
        lbLastName.setFont(mainFont);

        tfLastName = new JTextField();
        tfLastName.setFont(mainFont);

        JPanel formPanel = new JPanel();
        formPanel.setLayout(new GridLayout(4, 1, 5, 5));
        formPanel.add(lbFirstName);
        formPanel.add(tfFirstName);
        formPanel.add(lbLastName);
        formPanel.add(tfLastName);

        /********** Welcome Label ***************/
        lbWelcome = new JLabel();
        lbWelcome.setFont(mainFont);
        lbWelcome.setHorizontalAlignment(JLabel.CENTER);

        /********** Button Panel ***************/
        JButton btnOK = new JButton("OK");
        btnOK.setFont(mainFont);
        btnOK.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                String firstName = tfFirstName.getText();
                String lastName = tfLastName.getText();
                lbWelcome.setText("Hello " + firstName + " " + lastName);
            }
        });

        JButton btnClear = new JButton("Clear");
        btnClear.setFont(mainFont);
        btnClear.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                tfFirstName.setText("");
                tfLastName.setText("");
                lbWelcome.setText("");
            }
        });

        JPanel buttonsPanel = new JPanel();
        buttonsPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 10));
        buttonsPanel.add(btnOK);
        buttonsPanel.add(btnClear);

        /********** Main Panel ***************/
        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BorderLayout(10, 10));
        mainPanel.setBackground(new Color(128, 128, 255));
        mainPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
        mainPanel.add(formPanel, BorderLayout.NORTH);
        mainPanel.add(lbWelcome, BorderLayout.CENTER);
        mainPanel.add(buttonsPanel, BorderLayout.SOUTH);

        add(mainPanel);

        setTitle("Welcome");
        setSize(500, 600);
        setMinimumSize(new Dimension(300, 400));
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            MainFrame myFrame = new MainFrame();
            myFrame.initialize();
        });
    }
}

修复后效果

修复后窗口效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:05:20