001 package com.croftsoft.apps.quiz;
002
003 import java.awt.*;
004 import java.awt.event.*;
005 import javax.swing.*;
006
007 // import com.croftsoft.core.gui.LabeledFieldsJPanel;
008 import com.croftsoft.core.gui.ButtonPanel2;
009 import com.croftsoft.core.lang.NullArgumentException;
010
011 /*********************************************************************
012 *
013 * <p />
014 *
015 * @version
016 * 2001-10-03
017 * @since
018 * 2001-07-10
019 * @author
020 * <a href="https://www.croftsoft.com/">David Wallace Croft</a>
021 *********************************************************************/
022
023 public final class QuizTakePanel
024 extends JPanel
025 implements ActionListener
026 //////////////////////////////////////////////////////////////////////
027 //////////////////////////////////////////////////////////////////////
028 {
029
030 private final QuizModel quizModel;
031
032 //
033
034 private final JTextArea questionTextArea;
035
036 private final JTextArea guessTextArea;
037
038 private final JTextArea answerTextArea;
039
040 private final JTextArea referenceTextArea;
041
042 private final JButton nextJButton = new JButton ( "Next" );
043
044 private final JButton answerButton = new JButton ( "Answer" );
045
046 private final JButton prevJButton = new JButton ( "Previous" );
047
048 private final JButton [ ] jButtons
049 = new JButton [ ] { prevJButton, answerButton, nextJButton };
050
051 //
052
053 private QuizItem [ ] quizItems;
054
055 private int quizItemIndex;
056
057 //////////////////////////////////////////////////////////////////////
058 //////////////////////////////////////////////////////////////////////
059
060 public QuizTakePanel ( QuizModel quizModel )
061 //////////////////////////////////////////////////////////////////////
062 {
063 super ( new BorderLayout ( ), true ); // isDoubleBuffered
064
065 NullArgumentException.check ( this.quizModel = quizModel );
066
067 JPanel textAreaPanel
068 = new JPanel ( new GridLayout ( 4, 1, 2, 2 ), true );
069
070 textAreaPanel.add ( new JScrollPane (
071 questionTextArea = new JTextArea ( ) ) );
072
073 textAreaPanel.add ( new JScrollPane (
074 guessTextArea = new JTextArea ( ) ) );
075
076 textAreaPanel.add ( new JScrollPane (
077 answerTextArea = new JTextArea ( ) ) );
078
079 textAreaPanel.add ( new JScrollPane (
080 referenceTextArea = new JTextArea ( ) ) );
081
082 add ( textAreaPanel, BorderLayout.CENTER );
083
084 //
085
086 questionTextArea.setEditable ( false );
087
088 guessTextArea.setEditable ( true );
089
090 answerTextArea.setEditable ( false );
091
092 referenceTextArea.setEditable ( false );
093
094 //
095
096 ButtonPanel2 buttonPanel2 = new ButtonPanel2 ( jButtons );
097
098 for ( int i = 0; i < jButtons.length; i++ )
099 {
100 JButton jButton = jButtons [ i ];
101
102 jButton.setEnabled ( false );
103
104 jButton.addActionListener ( this );
105 }
106
107 add ( buttonPanel2, BorderLayout.SOUTH );
108
109 reset ( );
110 }
111
112 //////////////////////////////////////////////////////////////////////
113 //////////////////////////////////////////////////////////////////////
114
115 public synchronized void actionPerformed ( ActionEvent actionEvent )
116 //////////////////////////////////////////////////////////////////////
117 {
118 Object source = actionEvent.getSource ( );
119
120 if ( source == nextJButton )
121 {
122 if ( quizItemIndex < quizItems.length - 1 )
123 {
124 quizItemIndex++;
125
126 setQuizItem ( quizItemIndex );
127 }
128
129 nextJButton.setEnabled ( quizItemIndex < quizItems.length - 1 );
130
131 prevJButton.setEnabled ( true );
132 }
133 else if ( source == prevJButton )
134 {
135 if ( quizItemIndex > 0 )
136 {
137 quizItemIndex--;
138
139 setQuizItem ( quizItemIndex );
140 }
141
142 prevJButton.setEnabled ( quizItemIndex > 0 );
143
144 nextJButton.setEnabled ( true );
145 }
146 else if ( source == answerButton )
147 {
148 answerButton.setEnabled ( false );
149
150 answerTextArea.setEnabled ( true );
151
152 answerTextArea.setText (
153 quizItems [ quizItemIndex ].getAnswer ( ) );
154
155 referenceTextArea.setEnabled ( true );
156
157 referenceTextArea.setText (
158 quizItems [ quizItemIndex ].getReference ( ) );
159 }
160 else
161 {
162 System.out.println ( source );
163 }
164 }
165
166 //////////////////////////////////////////////////////////////////////
167 //////////////////////////////////////////////////////////////////////
168
169 private synchronized void reset ( )
170 //////////////////////////////////////////////////////////////////////
171 {
172 quizItemIndex = 0;
173
174 prevJButton.setEnabled ( false );
175
176 Quiz quiz = quizModel.getQuiz ( );
177
178 if ( quiz != null )
179 {
180 quizItems = quiz.getQuizItems ( );
181 }
182 else
183 {
184 return;
185 }
186
187 if ( ( quizItems == null )
188 || ( quizItems.length < 1 ) )
189 {
190 return;
191 }
192
193 if ( quizItems.length > 1 )
194 {
195 nextJButton.setEnabled ( true );
196 }
197
198 setQuizItem ( 0 );
199 }
200
201 private void setQuizItem ( int index )
202 //////////////////////////////////////////////////////////////////////
203 {
204 QuizItem quizItem = quizItems [ index ];
205
206 questionTextArea.setText ( quizItem.getQuestion ( ) );
207
208 guessTextArea.setText ( "" );
209
210 answerTextArea.setText ( "" );
211
212 referenceTextArea.setText ( "" );
213
214 answerTextArea.setEnabled ( false );
215
216 referenceTextArea.setEnabled ( false );
217
218 answerButton.setEnabled ( true );
219 }
220
221 //////////////////////////////////////////////////////////////////////
222 //////////////////////////////////////////////////////////////////////
223 }