我已经研究这个问题有一段时间了,我越来越困惑了。我想要完成几件事:
向 JTextField 1 添加 2 个标签。第一个标签要求他们输入电子邮件。第二个表明@address.com 已经为他们输入。
我很困惑如何传递字符串变量,也许我应该只有一种方法?
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
最佳答案
您的代码在声明和访问变量的位置存在一些问题。 sMessage
和 sOutput
从未在任何地方声明或赋予值。另外,您尝试在 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/