java - 需要传递变量和标记 JPanel 的帮助

标签 java swing global-variables jpanel joptionpane

我已经研究这个问题有一段时间了,我越来越困惑了。我想要完成几件事:

  1. 向 JTextField 1 添加 2 个标签。第一个标签要求他们输入电子邮件。第二个表明@address.com 已经为他们输入。

  2. 我很困惑如何传递字符串变量,也许我应该只有一种方法?

    import javax.swing.*;
    import java.awt.*;
    
    public class Email {
    
        public static void main(String[] args) {    //main method
    
            //get user input
            JPanel panel = new JPanel();  //create new JPanel
    
            JTextField field1 = new JTextField(20);  //create a field for email and show 20 characters
            panel.add(field1);
    
            JTextField field2 = new JTextField(6); //create a field for grade and show to 6 characters
            panel.add(field2);
    
            int iValue = JOptionPane.showConfirmDialog (
            null,
            panel,
            "Please enter students email adress and test grade",
            JOptionPane.OK_OPTION); //create button in panel
    
            if (iValue == JOptionPane.OK_OPTION) {
    
                //capture email address as String
                String sEmail = field1.getText() + "@address.com"; 
    
                //capture numerical grade input and convert it to a float    
                float fGrade = Float.parseFloat(field2.getText());
            }
        } //end main
    
    
        public void convertGrades(float fGrade) {
    
            /***"shortcut if" grade conversion***********
            String sLetterGrade =    (fGrade >= 97) ? "A+" :
            (fGrade >= 94) ? "A" :
            (fGrade >= 90) ? "A-" :
            (fGrade >= 87) ? "B+" : 
            (fGrade >= 84) ? "B" :
            (fGrade >= 80) ? "B-" :
            (fGrade >= 77) ? "C+" :
            (fGrade >= 74) ? "C" :
            (fGrade >= 70) ? "C-" :
            (fGrade >= 67) ? "D+" :
            (fGrade >= 64) ? "D" :
            (fGrade >= 60) ? "D-" : "F";
            *************************************************************************/
    
    
            //experimental grade conversion
            // Determine letter grade
            String sAlphaGrade =    (fGrade >= 90) ? "A" :
            (fGrade >= 80) ? "B" :
            (fGrade >= 70) ? "C" :
            (fGrade >= 60) ? "D" : "F";
            //determine + or -
            if (fGrade >= 60) {
                float fGradeModifier = (fGrade % 10); 
                String sAlphaModifier = (fGradeModifier >= 7) ? "+" :
                (fGradeModifier >= 4)? "" : "-";
    
                //concatenate letter grade and modifier
                String sLetterGrade = sAlphaGrade + sAlphaModifier;
    
            } // end if
    
    
            String sResults =    getInput.sEmail  + "\n" +
            sMessage + "\n" +
            "your test score is: " + fGrade + "\n" + 
            "your letter grade is: " + sLetterGrade;
    
    
            JOptionPane.showMessageDialog(null, sOutput,"Email and Grade",
            JOptionPane.INFORMATION_MESSAGE);
    
        } //end convertGrades
    } //end class Email
    

最佳答案

您的代码在声明和访问变量的位置存在一些问题。 sMessagesOutput 从未在任何地方声明或赋予值。另外,您尝试在 convertGrades 方法中访问已在 main 中声明的 sEmail,并尝试访问 sLetterGrade 位于声明它的 if block 之外。

如果您想在 convertGrades 方法中使用 sEmail,则需要在调用该方法时将其传递给该方法。 sLetterGrade 必须在 if block 之外声明,以便稍后使用。此外,您实际上从未从 main 方法中调用 convertGrades,因此这些代码都不会执行。

要标记您的 JTextField,我建议将所有标签和字段放在 Box 中。 。这将确保它们都以正确的顺序排列在一起。

以下是经过编辑以包含所有这些更改的代码:

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

    public class Email {

        public static void main(String[] args) {    //main method

            //get user input
            JPanel panel = new JPanel();  //create new JPanel


            Box field1Box = Box.createHorizontalBox(); // Box to hold field1 and its labels
            field1Box.add(new JLabel("Enter email: ")); // JLabels can be added directly; we don't need to keep a reference
            JTextField field1 = new JTextField(20);  //create a field for email and show 20 characters
            field1Box.add(field1);
            field1Box.add(new JLabel("@address.com"));
            panel.add(field1Box); // Adds the Box containing field1 and the two labels to panel


            JTextField field2 = new JTextField(6); //create a field for grade and show to 6 characters
            panel.add(field2);

            int iValue = JOptionPane.showConfirmDialog (
            null,
            panel,
            "Please enter student's email adress and test grade",
            JOptionPane.OK_OPTION); //create button in panel

            if (iValue == JOptionPane.OK_OPTION) {

                //capture email address as String
                String sEmail = field1.getText() + "@address.com"; 

                //capture numerical grade input and convert it to a float    
                float fGrade = Float.parseFloat(field2.getText());

                //call convertGrades to display the results
                convertGrades(fGrade, sEmail);
            }
        } //end main


        // convertGrades must be static to be called from main
        public static void convertGrades(float fGrade, String sEmail) {

            /***"shortcut if" grade conversion***********
            String sLetterGrade =    (fGrade >= 97) ? "A+" :
            (fGrade >= 94) ? "A" :
            (fGrade >= 90) ? "A-" :
            (fGrade >= 87) ? "B+" : 
            (fGrade >= 84) ? "B" :
            (fGrade >= 80) ? "B-" :
            (fGrade >= 77) ? "C+" :
            (fGrade >= 74) ? "C" :
            (fGrade >= 70) ? "C-" :
            (fGrade >= 67) ? "D+" :
            (fGrade >= 64) ? "D" :
            (fGrade >= 60) ? "D-" : "F";
            *************************************************************************/


            //experimental grade conversion
            // Determine letter grade
            String sAlphaGrade =    (fGrade >= 90) ? "A" :
            (fGrade >= 80) ? "B" :
            (fGrade >= 70) ? "C" :
            (fGrade >= 60) ? "D" : "F";
            String sLetterGrade; // This needs to be visible outside of the if
            //determine + or -
            if (fGrade >= 60) {
                float fGradeModifier = (fGrade % 10); 
                String sAlphaModifier = (fGradeModifier >= 7) ? "+" :
                (fGradeModifier >= 4)? "" : "-";

                //concatenate letter grade and modifier
                sLetterGrade = sAlphaGrade + sAlphaModifier;

            } // end if
            else {
                // sLetterGrade still needs to get a value
                sLetterGrade = sAlphaGrade;
            }


            String sResults =    sEmail  + "\n" +
            // sMessage has been commented out so the program will compile and run
            // Uncomment it if you declare it and give it a value somewhere.
            // sMessage + "\n" +
            "your test score is: " + fGrade + "\n" + 
            "your letter grade is: " + sLetterGrade;


            // Assuming sOutput was meant to mean sResults
            JOptionPane.showMessageDialog(null, sResults,"Email and Grade",
            JOptionPane.INFORMATION_MESSAGE);

        } //end convertGrades
    } //end class Email

关于java - 需要传递变量和标记 JPanel 的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15467830/

相关文章:

java - 如何找到字符串中单词的精确匹配

java - 在 Linux 下提取 Lotus Notes NSF 文件

java - 如何使某个 JFrame 具有与其他 JFrame 不同的 LAF?

java - 从另一个类的事件运行新的 GUI 窗口

ruby-on-rails - 如何在 Ruby on Rails 中处理全局变量

ArrayUtils.isNotEmpty 的 Javadoc 有问题吗?

java - 如何在 Eclipse mars 中为 php 打开 Java 透视图?

java 。如何等待?

variables - 如何访问过程之外的变量

python - 全局变量和局部变量的区别