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 }