java禁用按钮,并在ArrayList迭代结束时在文本字段中显示消息
我正在写一个测验程序,它会打开一个包含问题和答案的文本文件。问题和答案被放入数组中,并在点击按钮时放入文本字段。打开文件将启用Q按钮
页面底部的计数器显示文件中的问题总数,以及每个问题的计数
当你点击“Q”按钮时,问题被放置在Q文本字段中,Q按钮被禁用,回答按钮(“A”)被启用,“currentQuestion”计数器上升1。单击A按钮时,答案显示在“答案”字段中,A按钮被禁用,Q按钮被启用。再次按下Q按钮将清除上一个问题的答案文本,启用A按钮,并禁用其自身。它像这样来回移动,直到到达arraylist中的最后一个问题和答案
在显示最后一个问题和答案后,我需要能够再次按下Q按钮并显示文本“这就是所有人!”在问题文本字段中,同时禁用Q和A按钮
我已经设法使用一个方法getEndStatus()(这个布尔方法是作业的一个要求)来检查最后一个问题是否已经解决。我可以用它把文本放在问题文本字段中。然而,我似乎不知道如何禁用这两个按钮。我在Q button click上尝试了表单源代码中的一个if语句(也尝试了一个button click),在getEndStatus()方法返回true时禁用按钮,但在生成最终消息的最后一次单击之前禁用按钮
我还需要让对JFileChooser的每次后续调用都从上次用于查找文件的同一文件夹开始。我不知道该怎么做
非常感谢您的帮助!提前谢谢
下面是类构造函数的源代码::
package business;
import java.io.*;
import java.util.ArrayList;
public class Quiz {
private ArrayList<String> questions, answers;
private int qCount, qNumber;
private String errmsg, actmsg;
public Quiz(String fn){
//fn = file name with full path
this.qCount = 0;
this.qNumber = 0;
this.errmsg = "";
this.actmsg = "";
try{
BufferedReader in = new BufferedReader(
new FileReader(fn));
questions = new ArrayList<String>();
answers = new ArrayList<String>();
String s = in.readLine();
while (s != null){
qCount++;
questions.add(s); //put question in array list
answers.add(in.readLine()); //read and post answer
s = in.readLine(); //next question
}//end while loop
in.close();
}catch (Exception e){
errmsg = "Error opening file: " + e.getMessage();
}//end try catch
if (qCount > 0){
qNumber =1;
actmsg = "Quiz file read. Next number = " + qNumber;
}//end if statement
}//end of constructor
public int getQuizCount(){
return this.qCount;
}//end getQuizCount()
public String getActionResult(){
if (qNumber < qCount){
actmsg = "Quiz file read. Next number = " + qNumber;
}else if(getEndStatus()){
actmsg = "That's all Folks!";
}else{
actmsg = "Quiz file read. Next number = " + qCount;
}
return this.actmsg;
}//end getActionResult()
public String getErrorMsg(){
return this.errmsg;
}//end getErrorMsg()
public String getQuestion(){
if (qNumber == 0){
return "No Questions on File.";
}else if(getEndStatus()){
return "That's All Folks!";
}else{
qNumber++;
return this.questions.get(qNumber-2);
}
}//end getQuestion()
public String getAnswer(){
if(qNumber == 0){
return "No Answers on File.";
}
return this.answers.get(qNumber-2);
}
public int getCurrCount(){
return qNumber-1;
}
public boolean getEndStatus(){
if(qNumber <= qCount){
return false;
}
return true;
}
}//end class()
以下是表单视图中的相关源代码:
private void jmnuOpenActionPerformed(java.awt.event.ActionEvent evt) {
statusMessageLabel.setText("");
JFileChooser f = new JFileChooser(".");
f.setDialogTitle("Select Quiz File");
FileNameExtensionFilter filter =
new FileNameExtensionFilter("Text Files (*.txt)","txt");
f.setFileFilter(filter);
JDialog dg = new JDialog();
int rval = f.showOpenDialog(dg);
if (rval == JFileChooser.CANCEL_OPTION){
jtxtFile.setText("");
statusMessageLabel.setText("Open Canceled.");
}else {
jtxtFile.setText(f.getSelectedFile().getAbsolutePath());
q = new Quiz(f.getSelectedFile().getAbsolutePath());
if (q.getErrorMsg().isEmpty()){
jtxtTotQ.setText(String.valueOf(q.getQuizCount()));
jbtnQ.setEnabled(true);
statusMessageLabel.setText(q.getActionResult());
}else{
statusMessageLabel.setText(q.getErrorMsg());
jtxtTotQ.setText("");
jtxtCurrQ.setText("");
}//end if else
}//end if else
jtxtQ.setText("");
jtxtA.setText("");
}
private void jbtnQActionPerformed(java.awt.event.ActionEvent evt) {
jtxtQ.setText(q.getQuestion());
jtxtCurrQ.setText(String.valueOf(q.getCurrCount()));
statusMessageLabel.setText(q.getActionResult());
jtxtA.setText("");
jbtnQ.setEnabled(false);
if (q.getEndStatus()){
jbtnA.setEnabled(false);
}else{
jbtnA.setEnabled(true);
}
}
private void jbtnAActionPerformed(java.awt.event.ActionEvent evt) {
jtxtA.setText(q.getAnswer());
jbtnA.setEnabled(false);
jbtnQ.setEnabled(true);
}
共 (0) 个答案