您好,我正在这个项目中存储学生姓名并记录他们的成绩。我已经规划了整个程序,现在要做的就是记录用户输入中的整数和字符串,并从不同的类调用它。我对此有麻烦。我是否使用数组?我怎么从另一个班级打来电话?谢谢。

    package gradebook;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.util.Scanner;
import java.awt.event.ActionEvent;
import javax.swing.JTextArea;

public class Student extends JFrame {
    private JFrame studentFrame;
    private JPanel contentPane;
    private JTextField studentNameTextField;
    protected Component frame;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Student frame = new Student();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Student() {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel gradebookLabel = new JLabel("Gradebook");
        gradebookLabel.setBounds(189, 6, 68, 16);
        contentPane.add(gradebookLabel);

        JLabel lblPleaseEnterThe = new JLabel("Please enter the student name");
        lblPleaseEnterThe.setBounds(130, 105, 194, 16);
        contentPane.add(lblPleaseEnterThe);

        studentNameTextField = new JTextField("Enter here");
        String stdname = studentNameTextField.getText();
        studentNameTextField.setBounds(130, 133, 194, 26);
        contentPane.add(studentNameTextField);
        studentNameTextField.setColumns(10);

        JButton continueButton = new JButton("Continue");
        continueButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent a) {
                if(continueButton.isEnabled()){
                Student.this.dispose();
                    Student studentScreen = new Student();
                    studentScreen.dispose();

                    AddGrades addGradesScreen = new AddGrades();
                    addGradesScreen.setVisible(true);


                }
            }
        });
        continueButton.setBounds(327, 243, 117, 29);
        contentPane.add(continueButton);

        JButton cancelButton = new JButton("Cancel");
        cancelButton.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent a) {


                if(cancelButton.isEnabled()){




                    MainScreen mainScreenScreen = new MainScreen();
                    mainScreenScreen.setVisible(true);
                    contentPane.setVisible(false);
                    contentPane.disable();


                }
            }
        });


        cancelButton.setBounds(207, 243, 117, 29);
        contentPane.add(cancelButton);
    }

    private void initizalize() {
        // TODO Auto-generated method stub

    }
}


这是否符合要求?

studentNameTextField = new JTextField("Enter here");
        String stdname = studentNameTextField.getText();


我知道这将存储它,但是如何在不同的类中调用它,以便使它出现在不同的Frame上?

更新:好的,我已经完成了

Student frame = new Student();
        String stdname = frame.studentNameTextField.getText();
        JLabel addgradesLabel = new JLabel("Add grades for" + frame.studentNameTextField);
        addgradesLabel.setBounds(139, 34, 167, 29);
        contentPane.add(addgradesLabel);


而且仍然无法正常工作。我相信我没有正确执行此操作。我正在尝试使用用户输入的名称来为标签加上标题。因此,它只能使用“为...添加成绩” + stdname,但调用方式不正确。我怎样才能解决这个问题?

这是我的AddStudentName类的代码

studentNameTextField = new JTextField();
        studentNameTextField.setBounds(130, 133, 194, 26);
        contentPane.add(studentNameTextField);
        studentNameTextField.setColumns(10);

        JButton continueButton = new JButton("Continue");
        continueButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent a) {
                if(continueButton.isEnabled()){
                Student.this.dispose();
                    Student studentScreen = new Student();
                    studentScreen.dispose();


                    AddGrades addGradesScreen = new AddGrades();
                    addGradesScreen.setVisible(true);




                }
            }
        });


我应该在此处添加什么以保存用户输入到JTextField中的输入?谢谢您的帮助

这是这些类的完整代码:

package gradebook;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.util.Scanner;
import java.awt.event.ActionEvent;
import javax.swing.JTextArea;

public class Student extends JFrame {
    private JFrame studentFrame;
    private JPanel contentPane;
    public JTextField studentNameTextField;
    protected Component frame;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Student frame = new Student();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Student() {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel gradebookLabel = new JLabel("Gradebook");
        gradebookLabel.setBounds(189, 6, 68, 16);
        contentPane.add(gradebookLabel);

        JLabel lblPleaseEnterThe = new JLabel("Please enter the student name");
        lblPleaseEnterThe.setBounds(130, 105, 194, 16);
        contentPane.add(lblPleaseEnterThe);


        JTextField studentNameTextField = new JTextField();

        studentNameTextField.setBounds(130, 133, 194, 26);
        contentPane.add(studentNameTextField);
        studentNameTextField.setColumns(10);

        JButton continueButton = new JButton("Continue");
        continueButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent a) {
                if(continueButton.isEnabled()){

                    Student studentScreen = new Student();
                    studentScreen.dispose();

                    AddGrades addGradesScreen = new AddGrades();
                    addGradesScreen.setVisible(true);



                }
            }
        });


        continueButton.setBounds(327, 243, 117, 29);
        contentPane.add(continueButton);

        JButton cancelButton = new JButton("Cancel");
        cancelButton.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent a) {


                if(cancelButton.isEnabled()){




                    MainScreen mainScreenScreen = new MainScreen();
                    mainScreenScreen.setVisible(true);
                    contentPane.setVisible(false);
                    contentPane.disable();


                }
            }
        });


        cancelButton.setBounds(207, 243, 117, 29);
        contentPane.add(cancelButton);
    }

    private void initizalize() {
        // TODO Auto-generated method stub

    }
}


和:

package gradebook;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class AddGrades extends JFrame {

    private JPanel contentPane;
    private JTextField Assignment1;
    private JTextField Assignment2;
    private JTextField Assignment3;
    private JTextField Assignment4;
    private JLabel testsLabel;
    private JTextField Test1;
    private JTextField Test2;
    public JTextField Test3;
    public JTextField Test4;

    /**
     * Launch the application.
     */
    public JFrame frame;
    public JButton continueButton;
    public JButton exitButton;
    public static void main(String[] args) {
        AddGrades frame = new AddGrades();
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    AddGrades frame = new AddGrades();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public AddGrades() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel gradebookLabel = new JLabel("Gradebook");
        gradebookLabel.setBounds(189, 6, 68, 16);
        contentPane.add(gradebookLabel);


        JLabel addgradesLabel = new JLabel("Add grades for" + stdname);
        addgradesLabel.setBounds(139, 34, 167, 29);
        contentPane.add(addgradesLabel);

        JLabel assignmentsLabel = new JLabel("Assignments:");
        assignmentsLabel.setBounds(19, 75, 86, 16);
        contentPane.add(assignmentsLabel);

        Assignment1 = new JTextField();
        Assignment1.setBounds(54, 91, 130, 26);
        contentPane.add(Assignment1);
        Assignment1.setColumns(10);

        Assignment2 = new JTextField();
        Assignment2.setBounds(54, 129, 130, 26);
        contentPane.add(Assignment2);
        Assignment2.setColumns(10);

        Assignment3 = new JTextField();
        Assignment3.setBounds(54, 167, 130, 26);
        contentPane.add(Assignment3);
        Assignment3.setColumns(10);

        Assignment4 = new JTextField();
        Assignment4.setBounds(54, 205, 130, 26);
        contentPane.add(Assignment4);
        Assignment4.setColumns(10);

        testsLabel = new JLabel("Tests:");
        testsLabel.setBounds(243, 75, 38, 16);
        contentPane.add(testsLabel);

        Test1 = new JTextField();
        Test1.setBounds(262, 91, 130, 26);
        contentPane.add(Test1);
        Test1.setColumns(10);

        Test2 = new JTextField();
        Test2.setBounds(262, 129, 130, 26);
        contentPane.add(Test2);
        Test2.setColumns(10);

        Test3 = new JTextField();
        Test3.setBounds(262, 167, 130, 26);
        contentPane.add(Test3);
        Test3.setColumns(10);

        Test4 = new JTextField();
        Test4.setBounds(262, 205, 130, 26);
        contentPane.add(Test4);
        Test4.setColumns(10);

        continueButton = new JButton("Continue");
        continueButton.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent a){
                if (continueButton.isEnabled()){

                    MainScreen mainScreenScreen = new MainScreen();
                    mainScreenScreen.setVisible(true);

                }


            }
        });
        continueButton.setBounds(327, 243, 117, 29);
        contentPane.add(continueButton);

        exitButton = new JButton("Exit");

        exitButton.setBounds(208, 243, 117, 29);
        contentPane.add(exitButton);
    }
}


我正在尝试从JTextField中获取输入

JTextField studentNameTextField = new JTextField();


并设置在标签上

JLabel addgradesLabel = new JLabel("Add grades for" + stdname);


其中stdname是JTextField的用户输入。

现在我收到错误消息

public static void main(String[] args) {
        AddGrades frame = new AddGrades();
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    AddGrades frame = new AddGrades();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }


AddGrades框架=新的AddGrades();给我错误添加参数以匹配AddGrades(String)

构造函数AddGrades()未定义

最佳答案

编辑:做到这一点的最佳方法是将参数传递给新创建的AddGrades类。见下文:

public AddGrades(String stdname) {
    JLabel addgradesLabel = new JLabel("Add grades for " + stdname);
}


无论您在何处创建字符串,都需要修改代码以将字符串传递给AddGrades类:

JButton continueButton = new JButton("Continue");
continueButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent a) {
        if(continueButton.isEnabled()){

            Student studentScreen = new Student();
            studentScreen.dispose();

            AddGrades addGradesScreen = new AddGrades(studentNameTextField.getText());
            addGradesScreen.setVisible(true);
        }
    }
});


这对我有用-我下载了您的代码并对其进行了测试。

07-25 22:45