Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package GogoWood;
- import java.awt.image.BufferedImage;
- import java.awt.Point;
- import java.awt.Font;
- import java.awt.Graphics;
- import java.awt.Color;
- import java.awt.Frame;
- import java.awt.Dimension;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FilenameFilter;
- import java.io.FileOutputStream;
- import java.io.ObjectOutputStream;
- import java.io.FileInputStream;
- import java.io.FileReader;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import javax.swing.BorderFactory;
- import javax.swing.JOptionPane;
- import javax.swing.DefaultListModel;
- import javax.swing.ListModel;
- import javax.swing.JTextField;
- import javax.swing.ImageIcon;
- import java.util.List;
- import java.util.ArrayList;
- import java.util.Random;
- import javax.imageio.ImageIO;
- import javax.swing.JFileChooser;
- import javax.swing.filechooser.FileNameExtensionFilter;
- import javax.sound.sampled.AudioSystem;
- import javax.sound.sampled.AudioInputStream;
- import javax.sound.sampled.Clip;
- //библиотека проигрывателя трекерной музыки
- import static jouvieje.bass.Bass.*;
- import jouvieje.bass.BassInit;
- import jouvieje.bass.structures.HMUSIC;
- import static jouvieje.bass.defines.BASS_MUSIC.BASS_MUSIC_RAMPS;
- import static GogoWood.Device.*;
- import java.awt.Image;
- import java.net.URL;
- import jouvieje.bass.structures.HSTREAM;
- import java.nio.ByteBuffer;
- import jouvieje.bass.structures.HCHANNEL;
- import jouvieje.bass.utils.ObjectPointer;
- import static jouvieje.bass.defines.BASS_CONFIG.BASS_CONFIG_GVOL_STREAM;
- import static jouvieje.bass.defines.BASS_CONFIG.BASS_CONFIG_GVOL_MUSIC;
- public class MainFrame extends javax.swing.JFrame {
- public Setting setting;//объект со всеми настройками игры
- private List<Word> currentDictionary = new ArrayList<Word>();//объект с текущим словарем
- private File currentDictionaryFile;//файл текущего словаря
- private int currentDictionarySize;//число слов в словаре при открытии
- private int translateCounter = 0;//число переводов в словаре при открытии
- private int rightAnswerCounter = 0;
- private int wrongAnswerCounter = 0;
- private int showRightTranslateCounter = 0;//число нажатий "Показать правильный ответ"
- private int currentWordIndex;//индекс текущего слова в коллекции currentDictionary
- private Word currentWord;//текущее слово
- private int currentTranslateIndex;//индекс текущего перевода для текущего слова
- private int currentRightTranslateIndex;//индекс верного ответа в списке с переводами
- private int currentWrongTranslateIndex;//индекс неверного ответа в списке с переводами
- private Random randGen = new Random();
- private boolean isStarted = false;//переменная-состояние программы: начато или нет обучение
- //состояние обработчиков событий списка с переводами
- private boolean translatesListMouseListener = true;
- //блокировка действий в обработчике события EVT_FormComponentResized
- private boolean blockEVT_FormComponentResized = false;
- //текущий музыкальный трек
- private HMUSIC mod = null;
- public static void main(String args[]) {
- /* Set the Nimbus look and feel */
- //<editor-fold defaultstate="collapsed" desc=" Look and feel Setting code (optional) ">
- /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
- * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
- */
- try {
- for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
- if ("Windows".equals(info.getName())) {
- javax.swing.UIManager.setLookAndFeel(info.getClassName());
- //break;
- }
- }
- } catch (ClassNotFoundException ex) {
- java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
- } catch (InstantiationException ex) {
- java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
- } catch (IllegalAccessException ex) {
- java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
- } catch (javax.swing.UnsupportedLookAndFeelException ex) {
- java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
- }
- //</editor-fold>
- /* Create and display the form */
- java.awt.EventQueue.invokeLater(new Runnable() {
- public void run() {
- new MainFrame().setVisible(true);
- }
- });
- }
- //главный класс - основное окно программы
- public MainFrame() {
- //проверка 1-ый это запуск или нет и создание необходимымых файлов
- File appData = new File(setting.appData + File.separator + "setting.bin");
- if(!appData.exists())
- CreateAppFiles();
- ReadSetting();//чтение файла с настройками
- //инициализация компонентов
- initComponents();
- this.setLocationRelativeTo(null);
- //иконка окна
- try
- {
- setIconImage(ImageIO.read(MainFrame.class.getResource("/resources/tree.png")));
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- //заголовок окна
- setTitle(setting.appName + " v" + setting.version + setting.title);
- LabelWord.setText(setting.appName + " v" + setting.version);
- LabelStatPanelMainFrame.setText("© " + setting.authorName + ". Все права защищены. ");
- //============УСТАНОВКА ЗНАЧЕНИЙ ЭЛЕМЕНТОВ ФОРМЫ========================
- if((File)setting.currentSettings.get("dic_selectedDictionary") != null){
- Start.setEnabled(true);
- }
- PanelAmount.setVisible(false);
- //инициализация библиотеки для проигрывания трекерной музыки
- BassInit.loadLibraries();
- if(BassInit.NATIVEBASS_LIBRARY_VERSION() != BassInit.NATIVEBASS_JAR_VERSION()) {
- System.out.printf("Error! NativeBass library version (%08x) is different to jar version (%08x)\n",
- BassInit.NATIVEBASS_LIBRARY_VERSION(), BassInit.NATIVEBASS_JAR_VERSION());
- return;
- }
- /* Initialize default output device */
- BASS_Init(forceNoSoundDevice(-1), forceFrequency(44100), 0, null, null);
- BASS_SetConfig(BASS_CONFIG_GVOL_MUSIC, 3500);
- //запуск изучения слов(если возможно)
- File currentDictionary = (File)setting.currentSettings.get("dic_selectedDictionary");
- if(currentDictionary != null){
- Start(currentDictionary);
- }
- //применение настроек
- SetSetting();
- }
- //=======================ПОЛЬЗОВАТЕЛЬСКИЕ ФУНКЦИИ===========================
- //функция открывающая словарь
- private void OpenDictionary() {
- JFileChooser fileopen = new JFileChooser("txt");
- fileopen.setFileFilter(new FileNameExtensionFilter("TXT file", "txt"));
- fileopen.setSelectedFile((File)setting.currentSettings.get("dic_recentDictionary"));
- int res = fileopen.showDialog(null, "Открыть файл");
- if (res == JFileChooser.APPROVE_OPTION)
- {
- setting.currentSettings.put("dic_recentDictionary", fileopen.getSelectedFile());//запоминание последнего открытого файла
- Start(fileopen.getSelectedFile());
- }
- }
- //функция закрывающая словарь
- private void Stop() {
- TranslatesList.setListData(new Object[0]);
- translatesListMouseListener = false;
- currentDictionary.clear();
- LabelWord.setText(setting.appName + " v" + setting.version);
- LabelStatPanelMainFrame.setText("© " + setting.authorName + ". Все права защищены. ");
- ShowTranslate.setEnabled(false);
- NextWord.setEnabled(false);
- ShowTranslateButton.setEnabled(false);
- NextWordButton.setEnabled(false);
- CloseDictionary.setEnabled(false);
- isStarted = false;
- //ShowMessage("");
- }
- //функция добавляющая словарь в список словарей
- public String AddDictionary(File dictionary) {
- //проверка вновь добавленного словаря на корректность и если словарь правильного формата - добавить его в список
- if(CreateDictionary(dictionary)) {
- //проверка нет ли такого словаря уже в списке
- List<File> dictionaryPathList = (List<File>)setting.currentSettings.get("dic_dictionaryPathList");
- boolean willAdd = true;
- for (File file : dictionaryPathList) {
- if(file.getAbsolutePath().equals(dictionary.getAbsolutePath())){
- willAdd = false;
- }
- }
- if(willAdd){
- dictionaryPathList.add(dictionary);
- setting.currentSettings.put("dic_selectedDictionary", dictionary);
- return "OK";
- }
- else
- return "Такой словарь уже имеется в списке.";
- }
- return "Некорректный формат словаря, выберите другой словарь.";
- }
- //функция создающая словарь(заполняющая словами коллекцию) на основе пути к словарю
- private boolean CreateDictionary(File file) {
- try{
- //currentDictionary.clear();
- List<Word> temp_CurrentDictionary = new ArrayList<Word>();
- BufferedReader br = new BufferedReader(new FileReader(file));
- while (true) {
- String line = br.readLine();
- if(line == null)
- break;
- else{
- List<Translate> translates = new ArrayList<Translate>();//коллекция с переводами
- //разделить слово и перевод
- String[] strWordsTranslations = line.split("/");
- //разделить группы переводов
- String[] strTranslationsGroup = strWordsTranslations[1].split("(\\d+\\))");
- //разделить переводы в группах
- int i = 0;
- //если в переводах есть группы родственных значений перевода - начинать обход групп с индекса 1, а не
- //с индекса 0, так как под этим индексом лежит "", если групп нет - под индексом 0 лежит одна единственная группа
- if(strTranslationsGroup.length > 1){
- i = 1;
- }
- for(; i < strTranslationsGroup.length; i++){
- String[] strTranslations = strTranslationsGroup[i].split(",");
- //добавление переводов в коллекцию с переводами
- for(int j = 0; j < strTranslations.length; j++){
- translates.add(new Translate(strTranslations[j].trim()));
- }
- }
- temp_CurrentDictionary.add(new Word(strWordsTranslations[0], translates));
- }
- }
- currentDictionary.clear();
- currentDictionary.addAll(temp_CurrentDictionary);
- return true;//в случае успеха создания словаря
- } catch(Exception e) {
- //currentDictionary.clear();
- return false;//в случае ошибки создания словаря
- }
- }
- //функция запускающая тест
- private void Start(File dictionary) {
- //если тест запущен - остановить его и сбросить необходимые переменные
- if(isStarted)
- Stop();
- if(dictionary.exists()){
- if(CreateDictionary(dictionary)){
- //запомнить текущий открытый словарь(для работы кнопки "Еще раз", если пользователь после окончания теста захочет пройти его еще раз)
- currentDictionaryFile = dictionary;
- currentDictionarySize = currentDictionary.size();
- translateCounter = TranslateCounter();
- rightAnswerCounter = wrongAnswerCounter = showRightTranslateCounter = 0;
- translatesListMouseListener = true;
- blockEVT_FormComponentResized = false;
- setSize((Dimension)setting.currentSettings.get("com_windowSize"));
- setResizable(true);
- PanelMainFrame.setVisible(true);
- PanelAmount.setVisible(false);
- ShowTranslate.setEnabled(true);
- NextWord.setEnabled(true);
- ShowTranslateButton.setEnabled(true);
- NextWordButton.setEnabled(true);
- //остановить муз. трек, если проигрывается
- if(mod != null){
- BASS_ChannelStop(mod.asInt());
- }
- ShowWord();
- isStarted = true;
- CloseDictionary.setEnabled(true);
- }
- else{
- JOptionPane.showMessageDialog(this, "Некорректный формат словаря, выберите другой словарь.", setting.appName + " " + setting.version + " - сообщение", JOptionPane.WARNING_MESSAGE);
- setting.DeleteDictionary(dictionary);
- }
- }
- else{
- JOptionPane.showMessageDialog(this, "Файла данного словаря уже не существует, выберите другой словарь.", setting.appName + " " + setting.version + " - сообщение", JOptionPane.WARNING_MESSAGE);
- setting.DeleteDictionary(dictionary);
- }
- }
- //функция показывающая слово и заполняющая список ответов
- private void ShowWord() {
- //если в коллекции с текущим словарем нет больше слов - остановить тест, закрыть словарь и вывести сообщение об окончании теста
- if(currentDictionary.isEmpty()){
- Stop();
- ShowAmount();
- return;
- }
- //-------------------------выборка слова--------------------------------
- int index = randGen.nextInt(currentDictionary.size());
- currentWordIndex = index;
- currentWord = currentDictionary.get(index);
- //LabelWord.setText("<html><body style=\"margin:4px\">" + word.word + "</body></html>");
- LabelWord.setText(currentWord.word);
- //---------------------выборка вариантов ответов------------------------
- List<Word> currentDictionaryTemp = new ArrayList<Word>(currentDictionary);//временный объект с текущим словарем
- List<Translate> translates = new ArrayList<Translate>();//коллекция с переводами
- //удаление выбранного слова с его переводами, чтобы оно не использовалось более для выборки ложных ответов
- currentDictionaryTemp.remove(index);
- //если во временном объекте с текущим словарем есть еще слова - выбирать ложные ответы, если нет - вариант ответа один
- if(!currentDictionaryTemp.isEmpty()){
- //1. выбор ложных ответов
- for(int i = 0; i < (int)setting.currentSettings.get("mod_countOfSuggestedTranslate") - 1; i++){
- index = randGen.nextInt(currentDictionaryTemp.size());
- int translateIndex = currentDictionaryTemp.get(index).GetRandomTranslateIndex();
- String translate = currentDictionaryTemp.get(index).translates.get(translateIndex).translate;
- translates.add(new Translate(translate));
- currentDictionaryTemp.remove(index);//удалить это слово из временного словаря, чтобы оно больше не участвовало в выборке ложных ответов
- //прекратить выборку ложных ответов, если уже не осталось слов
- if(currentDictionaryTemp.isEmpty())
- break;
- }
- //2. добавление правильного ответа в случайную позицию
- //генерация случайной позициии
- index = randGen.nextInt(translates.size() + 1);
- currentRightTranslateIndex = index;
- //выбор случайного перевода
- currentTranslateIndex = currentWord.GetRandomTranslateIndex();
- translates.add(index, new Translate(currentWord.translates.get(currentTranslateIndex).translate));
- }
- else{
- //выбор случайного перевода
- currentTranslateIndex = currentWord.GetRandomTranslateIndex();
- currentRightTranslateIndex = 0;
- translates.add(new Translate(currentWord.translates.get(currentTranslateIndex).translate));
- }
- //заполнение списка ответов
- //установка ListCellRenderer
- Font font = (Font)setting.currentSettings.get("foc_Default_translatesListFont");
- Color fontColor = (Color)setting.currentSettings.get("foc_Default_translatesListForeground");
- BackgroundType backgroundType = (BackgroundType)setting.currentSettings.get("foc_Default_translatesListBackgroundType");
- Color backgroundColor = (Color)setting.currentSettings.get("foc_Default_translatesListBackground");
- BackgroundType selectionType = (BackgroundType)setting.currentSettings.get("foc_Default_translatesListSelectionType");
- Color selectionBackgroundColor = (Color)setting.currentSettings.get("foc_Default_translatesListSelectionBackground");
- ((ImageJList)TranslatesList).setListCellRenderer(font, fontColor, backgroundType, backgroundColor, selectionType, selectionBackgroundColor);
- DefaultListModel listModel = new DefaultListModel();
- for(int i = 0; i < translates.size(); i++){
- Object listItem[] = {translates.get(i).translate};
- listModel.addElement(listItem);
- }
- TranslatesList.setModel(listModel);
- ShowStat("showStat");
- }
- //функция показывающая правильный ответ
- private void ShowRightTranslate() {
- if(isStarted){
- showRightTranslateCounter ++;
- //выделение зеленым цветом правильного варианта ответа
- //установка ListCellRenderer
- Font font = (Font)setting.currentSettings.get("foc_Default_translatesListFont");
- Color fontColor = (Color)setting.currentSettings.get("foc_Default_translatesListForeground");
- BackgroundType backgroundType = (BackgroundType)setting.currentSettings.get("foc_Default_translatesListBackgroundType");
- Color backgroundColor = (Color)setting.currentSettings.get("foc_Default_translatesListBackground");
- BackgroundType selectionType = BackgroundType.COLOR;
- Color selectionBackgroundColor = Color.GREEN;
- ((ImageJList)TranslatesList).setListCellRenderer(font, fontColor, backgroundType, backgroundColor, selectionType, selectionBackgroundColor);
- //перезагрузка списка переводов
- ((ImageJList)TranslatesList).Reload();
- TranslatesList.setSelectedIndex(currentRightTranslateIndex);
- }
- }
- //функция показывающая следущее слово
- private void NextWord() {
- if(isStarted){
- TranslatesList.setEnabled(true);
- translatesListMouseListener = true;
- PanelAnswerResult.repaint();//стереть значек ответа
- ShowWord();
- }
- }
- //функция проверяющая ответ пользователя и обновляющая статистику
- private boolean CheckAnswer(int selectedIndex) {
- boolean res;
- //если ответ неверный
- if(selectedIndex != currentRightTranslateIndex){
- wrongAnswerCounter ++;
- try
- {
- BufferedImage image = ImageIO.read(MainFrame.class.getResource("/resources/wrong_answer.png"));
- PanelAnswerResult.getGraphics().drawImage(image, 14, 4, null);
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- res = false;
- //проигрывать звуки, если они разрешены
- if((boolean)setting.currentSettings.get("mod_soundEnable")){
- try {
- AudioInputStream AIS_wrong_wav = AudioSystem.getAudioInputStream(MainFrame.class.getResourceAsStream("/resources/wrong.wav"));
- Clip wrong_wav = AudioSystem.getClip();
- wrong_wav.open(AIS_wrong_wav);
- wrong_wav.start();
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- }
- //если ответ верный
- else{
- currentDictionary.get(currentWordIndex).translates.get(currentTranslateIndex).answerCounter ++;
- rightAnswerCounter ++;
- try
- {
- BufferedImage image = ImageIO.read(MainFrame.class.getResource("/resources/right_answer.png"));
- PanelAnswerResult.getGraphics().drawImage(image, 14, 4, null);
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- //проверка не дадено ли уже достаточное количество верных ответов для данного перевода
- if(currentDictionary.get(currentWordIndex).translates.get(currentTranslateIndex).answerCounter == (int)setting.currentSettings.get("mod_requestCountOfProveAnsvers")){
- currentDictionary.get(currentWordIndex).translates.remove(currentTranslateIndex);
- }
- //проверка есть ли еще переводы для текущего слова и ненужно ли уже удалить само слово
- if(currentDictionary.get(currentWordIndex).translates.isEmpty()){
- currentDictionary.remove(currentWordIndex);
- }
- res = true;
- //проигрывать звуки, если они разрешены
- if((boolean)setting.currentSettings.get("mod_soundEnable")){
- try {
- AudioInputStream AIS_right_wav = AudioSystem.getAudioInputStream(MainFrame.class.getResourceAsStream("/resources/right.wav"));
- Clip right_wav = AudioSystem.getClip();
- right_wav.open(AIS_right_wav);
- right_wav.start();
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- }
- return res;
- }
- //функция выводящая статистику после окончания теста
- private void ShowAmount() {
- //изменение размеров окна для вывода статистики
- blockEVT_FormComponentResized = true;
- setSize(600, 420);
- setResizable(false);
- PanelMainFrame.setVisible(false);
- PanelAmount.setVisible(true);
- String text = "<html>" +
- "<body style=\"margin-right:6px\">" +
- "<table>" +
- "<tr>" +
- "<td align=\"right\">" +
- "Слов в словаре: " +
- "</td>" +
- "<td>" +
- currentDictionarySize +
- "</td>" +
- "</tr>" +
- "<tr>" +
- "<td align=\"right\">" +
- "Переводов: " +
- "</td>" +
- "<td>" +
- translateCounter +
- "</td>" +
- "</tr>" +
- "<tr>" +
- "<td colspan=2>" +
- "<hr>" +
- "</td>" +
- "</tr>" +
- "<tr>" +
- "<td align=\"right\">" +
- "Верных ответов: " +
- "</td>" +
- "<td>" +
- rightAnswerCounter +
- "</td>" +
- "</tr>" +
- "<tr>" +
- "<td align=\"right\">" +
- "Неверных ответов: " +
- "</td>" +
- "<td>" +
- wrongAnswerCounter +
- "</td>" +
- "</tr>" +
- "<tr>" +
- "<td colspan=2>" +
- "<hr>" +
- "</td>" +
- "</tr>" +
- "<tr>" +
- "<td align=\"right\">" +
- "Нажатий \"Показать перевод\": " +
- "</td>" +
- "<td>" +
- showRightTranslateCounter +
- "</td>" +
- "</tr>" +
- "</table>" +
- "</body>" +
- "</html>";
- LabelStatPanelAmount.setText(text);
- double percentOfRightAnswer = ((double)rightAnswerCounter / (rightAnswerCounter + wrongAnswerCounter)) * 100;
- LabelEvaluation.setText("Процент правильных ответов: " + Math.round(percentOfRightAnswer) + "%");
- //финальный звук
- if((boolean)setting.currentSettings.get("mod_soundEnable") && (boolean)setting.currentSettings.get("mod_finalSound")){
- try {
- File folder = new File(setting.appData + File.separator + "music" + File.separator);
- File[] listOfFiles = folder.listFiles();
- String fileName = listOfFiles[randGen.nextInt(listOfFiles.length)].getName();
- mod = BASS_MusicLoad(false, setting.appData + File.separator + "music" + File.separator + fileName, 0, 0, BASS_MUSIC_RAMPS, 0);
- if(mod != null) {
- BASS_ChannelPlay(mod.asInt(), false);
- }
- } catch (Exception ex) {
- //ex.printStackTrace();
- }
- }
- }
- //функция подсчета количества оставшихся переводов в текущем словаре
- private int TranslateCounter() {
- int counter = 0;
- for(Word word : currentDictionary){
- counter += word.translates.size();
- }
- return counter;
- }
- //применение настроек из объекта настроек и обновление состояния элементов формы
- public void SetSetting() {
- try {
- //Common setting
- setSize((Dimension)setting.currentSettings.get("com_windowSize"));
- //=================Font and Color Scheme=========================
- //--------------------------word---------------------------------
- LabelWord.setFont((Font)setting.currentSettings.get("foc_Default_wordFont"));
- LabelWord.setForeground((Color)setting.currentSettings.get("foc_Default_wordForeground"));
- switch ((BackgroundType)setting.currentSettings.get("foc_Default_wordBackgroundType")) {
- case COLOR:
- LabelWord.setOpaque(true);
- LabelWord.setBackground((Color)setting.currentSettings.get("foc_Default_wordBackground"));
- break;
- case TRANSPARENT:
- LabelWord.setOpaque(false);
- LabelWord.repaint();
- break;
- default:
- break;
- }
- LabelWord.setBorder(BorderFactory.createLineBorder((Color)setting.currentSettings.get("foc_Default_wordBorderColor"), (int)setting.currentSettings.get("foc_Default_wordBorderSize")));
- //установка позиции слова
- switch((WordPosition)setting.currentSettings.get("foc_wordPosition")) {
- case WORD_POSITION_LEFT:
- LabelWord.setHorizontalAlignment(JTextField.LEFT);
- break;
- case WORD_POSITION_CENTER:
- LabelWord.setHorizontalAlignment(JTextField.CENTER);
- break;
- case WORD_POSITION_RIGHT:
- LabelWord.setHorizontalAlignment(JTextField.RIGHT);
- default:
- break;
- }
- //------------------------translatesList-------------------------
- TranslatesList.setFont((Font)setting.currentSettings.get("foc_Default_translatesListFont"));
- TranslatesList.setForeground((Color)setting.currentSettings.get("foc_Default_translatesListForeground"));
- switch ((BackgroundType)setting.currentSettings.get("foc_Default_translatesListBackgroundType")) {
- case COLOR:
- TranslatesList.setOpaque(true);
- TranslatesList.setBackground((Color)setting.currentSettings.get("foc_Default_translatesListBackground"));
- break;
- case TRANSPARENT:
- //проверка, что установлено фоном главного окна
- switch ((BackgroundType)setting.currentSettings.get("foc_Default_mainFrameBackgroundType")) {
- case COLOR:
- TranslatesList.setOpaque(true);
- TranslatesList.setBackground((Color)setting.currentSettings.get("foc_Default_mainFrameBackgroundColor"));
- break;
- case IMAGE:
- //установка фона TranslatesList
- ((ImageJList)TranslatesList).SetBackgroundImage(CreateTranslatesListBackImg((File)setting.currentSettings.get("foc_Default_mainFrameBackgroundImage")));
- TranslatesList.setOpaque(false);
- TranslatesList.repaint();
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
- ScrollPaneTranslatesList.setBorder(BorderFactory.createLineBorder((Color)setting.currentSettings.get("foc_Default_translatesListBorderColor"), (int)setting.currentSettings.get("foc_Default_translatesListBorderSize")));
- //установка ListCellRenderer
- Font font = (Font)setting.currentSettings.get("foc_Default_translatesListFont");
- Color fontColor = (Color)setting.currentSettings.get("foc_Default_translatesListForeground");
- BackgroundType backgroundType = (BackgroundType)setting.currentSettings.get("foc_Default_translatesListBackgroundType");
- Color backgroundColor = (Color)setting.currentSettings.get("foc_Default_translatesListBackground");
- BackgroundType selectionType = (BackgroundType)setting.currentSettings.get("foc_Default_translatesListSelectionType");
- Color selectionBackgroundColor = (Color)setting.currentSettings.get("foc_Default_translatesListSelectionBackground");
- ((ImageJList)TranslatesList).setListCellRenderer(font, fontColor, backgroundType, backgroundColor, selectionType, selectionBackgroundColor);
- //перезагрузка списка переводов
- ((ImageJList)TranslatesList).Reload();
- //------------------------строка статистики----------------------
- LabelStatPanelMainFrame.setFont((Font)setting.currentSettings.get("foc_Default_statStringFont"));
- LabelStatPanelMainFrame.setForeground((Color)setting.currentSettings.get("foc_Default_statStringForeground"));
- switch ((BackgroundType)setting.currentSettings.get("foc_Default_statStringBackgroundType")) {
- case COLOR:
- LabelStatPanelMainFrame.setOpaque(true);
- LabelStatPanelMainFrame.setBackground((Color)setting.currentSettings.get("foc_Default_statStringBackground"));
- break;
- case TRANSPARENT:
- LabelStatPanelMainFrame.setOpaque(false);
- LabelStatPanelMainFrame.repaint();
- break;
- default:
- break;
- }
- LabelStatPanelMainFrame.setBorder(BorderFactory.createLineBorder((Color)setting.currentSettings.get("foc_Default_statStringBorderColor"), (int)setting.currentSettings.get("foc_Default_statStringBorderSize")));
- //-------------------------фон окна------------------------------
- switch ((BackgroundType)setting.currentSettings.get("foc_Default_mainFrameBackgroundType")) {
- case COLOR:
- ((ImageJPanel)PanelMainFrame).SetBackground((Color)setting.currentSettings.get("foc_Default_mainFrameBackgroundColor"));
- PanelAnswerResult.setOpaque(true);
- break;
- case IMAGE:
- ((ImageJPanel)PanelMainFrame).SetBackground((File)setting.currentSettings.get("foc_Default_mainFrameBackgroundImage"));
- PanelAnswerResult.setOpaque(false);
- break;
- default:
- break;
- }
- PanelMainFrame.repaint();
- //-------------------окошко PanelAnswerResult--------------------
- PanelAnswerResult.setBorder(BorderFactory.createLineBorder((Color)setting.currentSettings.get("foc_Default_translatesListBorderColor"), 1));
- PanelAnswerResult.setBackground(TranslatesList.getBackground());
- //пункт меню "Закрыть словарь"
- if(isStarted)
- CloseDictionary.setEnabled(true);
- else
- CloseDictionary.setEnabled(false);
- //пункт меню "Старт"
- if((File)setting.currentSettings.get("dic_selectedDictionary") != null)
- Start.setEnabled(true);
- else
- Start.setEnabled(false);
- }
- catch (Exception e) {
- setting = new Setting();//в случае ошибки применения настроек - использовать настройки по умолчанию
- WriteSetting();
- }
- }
- //функция запускающаяся при первом запуске программы и создающая необходимые файлы
- private void CreateAppFiles() {
- try {
- //файл настроек
- File settingFile = new File(setting.appData, "setting.bin");
- if(!settingFile.exists()){
- settingFile.createNewFile();
- setting = new Setting();
- WriteSetting();
- }
- }
- catch (Exception e) {
- JOptionPane.showMessageDialog(this, "Ошибка создания необходимых файлов игры.", "Ошибка", JOptionPane.ERROR_MESSAGE);
- setting = new Setting();
- }
- }
- //чтение настроек из файла
- private void ReadSetting() {
- try {
- FileInputStream fis = new FileInputStream(setting.appData + File.separator + "setting.bin");
- ObjectInputStream oin = new ObjectInputStream(fis);
- setting = (Setting)oin.readObject();
- }
- catch (Exception e) {
- JOptionPane.showMessageDialog(this, "Ошибка чтения настроек программы из файла.", "Ошибка", JOptionPane.ERROR_MESSAGE);
- setting = new Setting();//в случае ошибки чтения файла настроек - использовать настройки по умолчанию
- }
- }
- //запись настроек в файл
- private void WriteSetting() {
- try {
- FileOutputStream fos = new FileOutputStream(setting.appData + File.separator + "setting.bin");
- ObjectOutputStream oos = new ObjectOutputStream(fos);
- oos.writeObject(setting);
- oos.flush();
- oos.close();
- }
- catch (Exception e) {
- JOptionPane.showMessageDialog(this, "Ошибка записи настроек программы в файл.", "Ошибка", JOptionPane.ERROR_MESSAGE);
- }
- }
- //выход из программы
- private void Exit() {
- WriteSetting();
- System.exit(0);
- }
- //функция выводящая статистику(сообщение) в строке сообщения(внизу)
- private void ShowStat(String message) {
- //если message есть showStat - вывести статистику
- if(message.equals("showStat")){
- message = "Слов: " + currentDictionarySize + "/" + currentDictionary.size() + " " +
- "Переводов: " + translateCounter + "/" + TranslateCounter() + " " +
- "Ответов: " + rightAnswerCounter + "/" + wrongAnswerCounter;
- }
- String text = "<html>"
- + "<body style=\"margin-right:4px\">"
- + message
- + "</body>"
- + "</html>";
- LabelStatPanelMainFrame.setText(text);
- }
- //функция возвращает фоновый рисунок для TranslatesList
- public BufferedImage CreateTranslatesListBackImg(File imgFile) {
- BufferedImage backImg = null;
- try
- {
- backImg = ImageIO.read(imgFile);
- } catch (IOException e) {
- }
- //получение фонового изображения для ImageJList
- int wordBorderSize = (int)setting.currentSettings.get("foc_Default_wordBorderSize");
- int translatesListBorderSize = (int)setting.currentSettings.get("foc_Default_translatesListBorderSize");
- int x = ScrollPaneTranslatesList.getLocation().x + translatesListBorderSize;
- int y = LabelWord.getY() + LabelWord.getFontMetrics(LabelWord.getFont()).getHeight() + wordBorderSize * 2 + ScrollPaneTranslatesList.getY() - LabelWord.getY() - LabelWord.getHeight() + translatesListBorderSize;
- backImg = backImg.getSubimage(x, y, backImg.getWidth() - x - translatesListBorderSize, backImg.getHeight() - y - translatesListBorderSize);
- return backImg;
- }
- /*
- * This method is called from within the constructor to initialize the form.
- * WARNING: Do NOT modify this code. The content of this method is always
- * regenerated by the Form Editor.
- */
- @SuppressWarnings("unchecked")
- // <editor-fold defaultstate="collapsed" desc="Generated Code">
- private void initComponents() {
- jLayeredPane1 = new javax.swing.JLayeredPane();
- PanelMainFrame = new ImageJPanel(Color.decode("#F0F0F0"));
- LabelWord = new javax.swing.JLabel();
- ScrollPaneTranslatesList = new javax.swing.JScrollPane();
- TranslatesList = new ImageJList(ScrollPaneTranslatesList);
- ShowTranslateButton = new javax.swing.JButton();
- LabelStatPanelMainFrame = new javax.swing.JLabel();
- NextWordButton = new javax.swing.JButton();
- PanelAnswerResult = new javax.swing.JPanel();
- PanelAmount = new ImageJPanel(new File(setting.appData + File.separator + "minecraftBack.jpg"));
- jLabel1 = new javax.swing.JLabel();
- ButtonRetest = new javax.swing.JButton();
- LabelStatPanelAmount = new javax.swing.JLabel();
- LabelEvaluation = new javax.swing.JLabel();
- TopMenu = new javax.swing.JMenuBar();
- jmFile = new javax.swing.JMenu();
- OpenDictionary = new javax.swing.JMenuItem();
- CloseDictionary = new javax.swing.JMenuItem();
- Start = new javax.swing.JMenuItem();
- MenuSeparator1 = new javax.swing.JPopupMenu.Separator();
- Setting = new javax.swing.JMenuItem();
- MenuSeparator2 = new javax.swing.JPopupMenu.Separator();
- Exit = new javax.swing.JMenuItem();
- jmEdit = new javax.swing.JMenu();
- ShowTranslate = new javax.swing.JMenuItem();
- NextWord = new javax.swing.JMenuItem();
- jmHelp = new javax.swing.JMenu();
- About = new javax.swing.JMenuItem();
- setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
- setBounds(new java.awt.Rectangle(0, 0, 0, 0));
- setFocusCycleRoot(false);
- setFocusable(false);
- setLocationByPlatform(true);
- setMinimumSize(new java.awt.Dimension(350, 300));
- addWindowListener(new java.awt.event.WindowAdapter() {
- public void windowClosing(java.awt.event.WindowEvent evt) {
- EVT_FormWindowClosing(evt);
- }
- });
- addComponentListener(new java.awt.event.ComponentAdapter() {
- public void componentResized(java.awt.event.ComponentEvent evt) {
- EVT_FormComponentResized(evt);
- }
- });
- addWindowStateListener(new java.awt.event.WindowStateListener() {
- public void windowStateChanged(java.awt.event.WindowEvent evt) {
- EVT_FormWindowStateChanged(evt);
- }
- });
- jLayeredPane1.setOpaque(true);
- PanelMainFrame.setMinimumSize(new java.awt.Dimension(0, 0));
- LabelWord.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
- LabelWord.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
- LabelWord.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153, 153, 153)));
- LabelWord.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
- LabelWord.setMaximumSize(new java.awt.Dimension(2, 250));
- LabelWord.addMouseListener(new java.awt.event.MouseAdapter() {
- public void mouseClicked(java.awt.event.MouseEvent evt) {
- EVT_LabelWordMouseClicked(evt);
- }
- });
- ScrollPaneTranslatesList.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153, 153, 153)));
- TranslatesList.setForeground(new java.awt.Color(102, 102, 102));
- TranslatesList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
- TranslatesList.setOpaque(false);
- TranslatesList.addMouseListener(new java.awt.event.MouseAdapter() {
- public void mouseClicked(java.awt.event.MouseEvent evt) {
- EVT_TranslatesListMouseClicked(evt);
- }
- public void mousePressed(java.awt.event.MouseEvent evt) {
- EVT_TranslatesListMousePressed(evt);
- }
- });
- TranslatesList.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
- public void mouseDragged(java.awt.event.MouseEvent evt) {
- EVT_TranslatesListMouseDragged(evt);
- }
- public void mouseMoved(java.awt.event.MouseEvent evt) {
- EVT_TranslatesListMouseMoved(evt);
- }
- });
- ScrollPaneTranslatesList.setViewportView(TranslatesList);
- ShowTranslateButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/tip.png"))); // NOI18N
- ShowTranslateButton.setEnabled(false);
- ShowTranslateButton.setOpaque(false);
- ShowTranslateButton.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- EVT_ShowTranslateButtonActionPerformed(evt);
- }
- });
- LabelStatPanelMainFrame.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
- LabelStatPanelMainFrame.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
- LabelStatPanelMainFrame.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153, 153, 153)));
- LabelStatPanelMainFrame.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
- LabelStatPanelMainFrame.setOpaque(true);
- NextWordButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/next.png"))); // NOI18N
- NextWordButton.setEnabled(false);
- NextWordButton.setOpaque(false);
- NextWordButton.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- EVT_NextWordButtonActionPerformed(evt);
- }
- });
- PanelAnswerResult.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153, 153, 153)));
- javax.swing.GroupLayout PanelAnswerResultLayout = new javax.swing.GroupLayout(PanelAnswerResult);
- PanelAnswerResult.setLayout(PanelAnswerResultLayout);
- PanelAnswerResultLayout.setHorizontalGroup(
- PanelAnswerResultLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGap(0, 43, Short.MAX_VALUE)
- );
- PanelAnswerResultLayout.setVerticalGroup(
- PanelAnswerResultLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGap(0, 24, Short.MAX_VALUE)
- );
- javax.swing.GroupLayout PanelMainFrameLayout = new javax.swing.GroupLayout(PanelMainFrame);
- PanelMainFrame.setLayout(PanelMainFrameLayout);
- PanelMainFrameLayout.setHorizontalGroup(
- PanelMainFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(PanelMainFrameLayout.createSequentialGroup()
- .addContainerGap()
- .addGroup(PanelMainFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(LabelWord, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addGroup(PanelMainFrameLayout.createSequentialGroup()
- .addComponent(ShowTranslateButton)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(NextWordButton, javax.swing.GroupLayout.PREFERRED_SIZE, 49, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(PanelAnswerResult, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
- .addComponent(LabelStatPanelMainFrame, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(ScrollPaneTranslatesList, javax.swing.GroupLayout.DEFAULT_SIZE, 580, Short.MAX_VALUE))
- .addContainerGap())
- );
- PanelMainFrameLayout.setVerticalGroup(
- PanelMainFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(PanelMainFrameLayout.createSequentialGroup()
- .addContainerGap()
- .addComponent(LabelWord, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
- .addComponent(ScrollPaneTranslatesList, javax.swing.GroupLayout.DEFAULT_SIZE, 282, Short.MAX_VALUE)
- .addGap(9, 9, 9)
- .addGroup(PanelMainFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
- .addComponent(ShowTranslateButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(NextWordButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(PanelAnswerResult, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
- .addGap(10, 10, 10)
- .addComponent(LabelStatPanelMainFrame)
- .addGap(13, 13, 13))
- );
- PanelMainFrame.setBounds(0, 0, 600, 366);
- jLayeredPane1.add(PanelMainFrame, javax.swing.JLayeredPane.DEFAULT_LAYER);
- PanelAmount.setMinimumSize(new java.awt.Dimension(0, 0));
- jLabel1.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
- jLabel1.setForeground(new java.awt.Color(255, 255, 255));
- jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
- jLabel1.setText("Тест окончен, статистика");
- ButtonRetest.setText("Еще раз");
- ButtonRetest.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
- ButtonRetest.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- EVT_ButtonRetestActionPerformed(evt);
- }
- });
- LabelStatPanelAmount.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
- LabelStatPanelAmount.setForeground(new java.awt.Color(255, 255, 255));
- LabelStatPanelAmount.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
- LabelStatPanelAmount.setText("LabelStat");
- LabelEvaluation.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
- LabelEvaluation.setForeground(new java.awt.Color(255, 255, 255));
- LabelEvaluation.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
- LabelEvaluation.setText("LabelEvaluation");
- javax.swing.GroupLayout PanelAmountLayout = new javax.swing.GroupLayout(PanelAmount);
- PanelAmount.setLayout(PanelAmountLayout);
- PanelAmountLayout.setHorizontalGroup(
- PanelAmountLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(PanelAmountLayout.createSequentialGroup()
- .addContainerGap()
- .addGroup(PanelAmountLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 580, Short.MAX_VALUE)
- .addComponent(LabelStatPanelAmount, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(LabelEvaluation, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .addContainerGap())
- .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, PanelAmountLayout.createSequentialGroup()
- .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(ButtonRetest, javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addGap(234, 234, 234))
- );
- PanelAmountLayout.setVerticalGroup(
- PanelAmountLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(PanelAmountLayout.createSequentialGroup()
- .addGap(20, 20, 20)
- .addComponent(jLabel1)
- .addGap(32, 32, 32)
- .addComponent(LabelStatPanelAmount)
- .addGap(34, 34, 34)
- .addComponent(LabelEvaluation)
- .addGap(42, 42, 42)
- .addComponent(ButtonRetest)
- .addContainerGap())
- );
- PanelAmount.setBounds(0, 0, 600, 366);
- jLayeredPane1.add(PanelAmount, javax.swing.JLayeredPane.DEFAULT_LAYER);
- TopMenu.setFocusable(false);
- TopMenu.setOpaque(false);
- jmFile.setText("Файл");
- jmFile.setFocusable(false);
- jmFile.setRequestFocusEnabled(false);
- OpenDictionary.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/file.png"))); // NOI18N
- OpenDictionary.setText("Открыть словарь");
- OpenDictionary.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- EVT_TopMenuFileOpenDictionaryActionPerformed(evt);
- }
- });
- jmFile.add(OpenDictionary);
- CloseDictionary.setText("Закрыть словарь");
- CloseDictionary.setEnabled(false);
- CloseDictionary.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- EVT_TopMenuFileCloseDictionaryActionPerformed(evt);
- }
- });
- jmFile.add(CloseDictionary);
- Start.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/start.png"))); // NOI18N
- Start.setText("Старт");
- Start.setToolTipText("Начать обучение по выбранному в настройках словарю");
- Start.setEnabled(false);
- Start.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- EVT_TopMenuFileStartActionPerformed(evt);
- }
- });
- jmFile.add(Start);
- jmFile.add(MenuSeparator1);
- Setting.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/settings.png"))); // NOI18N
- Setting.setText("Настройки");
- Setting.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- EVT_TopMenuFileSettingActionPerformed(evt);
- }
- });
- jmFile.add(Setting);
- jmFile.add(MenuSeparator2);
- Exit.setText("Выход");
- Exit.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- EVT_TopMenuFileExitActionPerformed(evt);
- }
- });
- jmFile.add(Exit);
- TopMenu.add(jmFile);
- jmEdit.setText("Правка");
- ShowTranslate.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/tip.png"))); // NOI18N
- ShowTranslate.setText("Показать перевод");
- ShowTranslate.setEnabled(false);
- ShowTranslate.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- EVT_TopMenuEditShowTranslateActionPerformed(evt);
- }
- });
- jmEdit.add(ShowTranslate);
- NextWord.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/next.png"))); // NOI18N
- NextWord.setText("Следующее слово");
- NextWord.setEnabled(false);
- NextWord.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- EVT_TopMenuEditNextWordActionPerformed(evt);
- }
- });
- jmEdit.add(NextWord);
- TopMenu.add(jmEdit);
- jmHelp.setText("Справка");
- About.setText("О программе");
- About.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- EVT_TopMenuHelpAboutActionPerformed(evt);
- }
- });
- jmHelp.add(About);
- TopMenu.add(jmHelp);
- setJMenuBar(TopMenu);
- javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
- getContentPane().setLayout(layout);
- layout.setHorizontalGroup(
- layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(jLayeredPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 600, Short.MAX_VALUE)
- );
- layout.setVerticalGroup(
- layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(jLayeredPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 367, Short.MAX_VALUE)
- );
- pack();
- }// </editor-fold>
- //============================ОБРАБОТЧИКИ СОБЫТИЙ===============================
- //меню - настройки
- private void EVT_TopMenuFileSettingActionPerformed(java.awt.event.ActionEvent evt) {
- DialogSetting dialog = new DialogSetting(this, true);
- dialog.dispose();
- }
- //меню - выход
- private void EVT_TopMenuFileExitActionPerformed(java.awt.event.ActionEvent evt) {
- Exit();
- }
- //меню - о программе
- private void EVT_TopMenuHelpAboutActionPerformed(java.awt.event.ActionEvent evt) {
- JOptionPane.showMessageDialog(this, "Программа для заучивания английских слов, версия: " + setting.version, "О программе", JOptionPane.INFORMATION_MESSAGE);
- }
- //перед выходом - сохранить настройки программы
- private void EVT_FormWindowClosing(java.awt.event.WindowEvent evt) {
- Exit();
- }
- //изменение размеров окна
- private void EVT_FormComponentResized(java.awt.event.ComponentEvent evt) {
- PanelMainFrame.setSize(getContentPane().getSize().width, getContentPane().getSize().height);
- PanelAmount.setSize(getContentPane().getSize().width, getContentPane().getSize().height);
- //сохранять в настройках размеры окна только в том случае, если это пользователь изменяет размеры,
- //а не, например, в результате изменения размеров окна в функции ShowAmount().
- if(!blockEVT_FormComponentResized)
- setting.currentSettings.put("com_windowSize", new Dimension(this.getSize()));
- }
- //запрещение кнопки maximized/minimized
- private void EVT_FormWindowStateChanged(java.awt.event.WindowEvent evt) {
- if(evt.getNewState() == Frame.MAXIMIZED_BOTH){
- this.setExtendedState(Frame.NORMAL);
- }
- }
- //меню - открыть словарь
- private void EVT_TopMenuFileOpenDictionaryActionPerformed(java.awt.event.ActionEvent evt) {
- OpenDictionary();
- }
- //меню - закрыть словарь
- private void EVT_TopMenuFileCloseDictionaryActionPerformed(java.awt.event.ActionEvent evt) {
- Stop();
- }
- //меню - старт
- private void EVT_TopMenuFileStartActionPerformed(java.awt.event.ActionEvent evt) {
- //запуск изучения слов(если возможно)
- File currentDictionary = (File)setting.currentSettings.get("dic_selectedDictionary");
- if(currentDictionary != null){
- Start(currentDictionary);
- }
- SetSetting();//установка состояний элементов формы
- }
- //меню - показать правильный перевод
- private void EVT_TopMenuEditShowTranslateActionPerformed(java.awt.event.ActionEvent evt) {
- ShowRightTranslate();
- }
- //следующее слово(клик по строке со словом)
- private void EVT_LabelWordMouseClicked(java.awt.event.MouseEvent evt) {
- NextWord();
- }
- //кнопка - показать правильный перевод
- private void EVT_ShowTranslateButtonActionPerformed(java.awt.event.ActionEvent evt) {
- ShowRightTranslate();
- }
- //кнопка - следующее слово
- private void EVT_NextWordButtonActionPerformed(java.awt.event.ActionEvent evt) {
- NextWord();
- }
- //меню - следующее слово
- private void EVT_TopMenuEditNextWordActionPerformed(java.awt.event.ActionEvent evt) {
- NextWord();
- }
- //клик по списку с переводами(проверка ответа)
- private void EVT_TranslatesListMouseClicked(java.awt.event.MouseEvent evt) {
- if(translatesListMouseListener){
- if(isStarted){
- //если ответ верный
- if(CheckAnswer(TranslatesList.getSelectedIndex())){
- ShowWord();
- Point p = new Point(evt.getX(),evt.getY());
- TranslatesList.setSelectedIndex(TranslatesList.locationToIndex(p));
- }
- //если ответ неверный
- else{
- if((WrongAnswerMode)setting.currentSettings.get("mod_wrongAnswerMode") == WrongAnswerMode.STOP_SHOW_WORD){
- translatesListMouseListener = false;//отключить обработчики событий TranslatesList
- currentWrongTranslateIndex = TranslatesList.getSelectedIndex();
- //выделение красным цветом неправильного варианта ответа
- //установка ListCellRenderer
- Font font = (Font)setting.currentSettings.get("foc_Default_translatesListFont");
- Color fontColor = (Color)setting.currentSettings.get("foc_Default_translatesListForeground");
- BackgroundType backgroundType = (BackgroundType)setting.currentSettings.get("foc_Default_translatesListBackgroundType");
- Color backgroundColor = (Color)setting.currentSettings.get("foc_Default_translatesListBackground");
- BackgroundType selectionType = BackgroundType.COLOR;
- Color selectionBackgroundColor = Color.RED;
- ((ImageJList)TranslatesList).setListCellRenderer(font, fontColor, backgroundType, backgroundColor, selectionType, selectionBackgroundColor);
- //перезагрузка списка переводов
- ((ImageJList)TranslatesList).Reload();
- }
- else
- ShowWord();
- ShowStat("showStat");
- }
- }
- }
- else{
- TranslatesList.setSelectedIndex(currentWrongTranslateIndex);
- }
- }
- //подсветка пунктов списка с переводами при наведении мыши
- private void EVT_TranslatesListMouseMoved(java.awt.event.MouseEvent evt) {
- if(translatesListMouseListener){
- //восстановление цвета выделения переводов при наведении мыши с зеленого на цвет установленный в настройках,
- //если ранее пользователь нажимал кнопку Показать правильный перевод и правильный перевод был выделен зеленый цветом
- //установка ListCellRenderer
- Font font = (Font)setting.currentSettings.get("foc_Default_translatesListFont");
- Color fontColor = (Color)setting.currentSettings.get("foc_Default_translatesListForeground");
- BackgroundType backgroundType = (BackgroundType)setting.currentSettings.get("foc_Default_translatesListBackgroundType");
- Color backgroundColor = (Color)setting.currentSettings.get("foc_Default_translatesListBackground");
- BackgroundType selectionType = (BackgroundType)setting.currentSettings.get("foc_Default_translatesListSelectionType");
- Color selectionBackgroundColor = (Color)setting.currentSettings.get("foc_Default_translatesListSelectionBackground");
- ((ImageJList)TranslatesList).setListCellRenderer(font, fontColor, backgroundType, backgroundColor, selectionType, selectionBackgroundColor);
- //перезагрузка списка переводов
- ((ImageJList)TranslatesList).Reload();
- Point p = new Point(evt.getX(), evt.getY());
- TranslatesList.setSelectedIndex(TranslatesList.locationToIndex(p));
- }
- }
- //используется для отмены стандартного поведения при клике после неправильного ответа
- private void EVT_TranslatesListMousePressed(java.awt.event.MouseEvent evt) {
- if(!translatesListMouseListener){
- //установка ListCellRenderer
- Font font = (Font)setting.currentSettings.get("foc_Default_translatesListFont");
- Color fontColor = (Color)setting.currentSettings.get("foc_Default_translatesListForeground");
- BackgroundType backgroundType = (BackgroundType)setting.currentSettings.get("foc_Default_translatesListBackgroundType");
- Color backgroundColor = (Color)setting.currentSettings.get("foc_Default_translatesListBackground");
- BackgroundType selectionType = BackgroundType.COLOR;
- Color selectionBackgroundColor = Color.RED;
- ((ImageJList)TranslatesList).setListCellRenderer(font, fontColor, backgroundType, backgroundColor, selectionType, selectionBackgroundColor);
- //перезагрузка списка переводов
- ((ImageJList)TranslatesList).Reload();
- TranslatesList.setSelectedIndex(currentWrongTranslateIndex);
- }
- }
- //используется для отмены стандартного поведения при перетягивании мышью после неправильного ответа
- private void EVT_TranslatesListMouseDragged(java.awt.event.MouseEvent evt) {
- if(!translatesListMouseListener)
- TranslatesList.setSelectedIndex(currentWrongTranslateIndex);
- }
- //кнопка запуска текущего теста еще раз
- private void EVT_ButtonRetestActionPerformed(java.awt.event.ActionEvent evt) {
- Start(currentDictionaryFile);
- SetSetting();//установка состояний элементов формы
- }
- // Variables declaration - do not modify
- private javax.swing.JMenuItem About;
- private javax.swing.JButton ButtonRetest;
- private javax.swing.JMenuItem CloseDictionary;
- private javax.swing.JMenuItem Exit;
- private javax.swing.JLabel LabelEvaluation;
- private javax.swing.JLabel LabelStatPanelAmount;
- private javax.swing.JLabel LabelStatPanelMainFrame;
- public javax.swing.JLabel LabelWord;
- private javax.swing.JPopupMenu.Separator MenuSeparator1;
- private javax.swing.JPopupMenu.Separator MenuSeparator2;
- private javax.swing.JMenuItem NextWord;
- private javax.swing.JButton NextWordButton;
- private javax.swing.JMenuItem OpenDictionary;
- private javax.swing.JPanel PanelAmount;
- private javax.swing.JPanel PanelAnswerResult;
- private javax.swing.JPanel PanelMainFrame;
- private javax.swing.JScrollPane ScrollPaneTranslatesList;
- private javax.swing.JMenuItem Setting;
- private javax.swing.JMenuItem ShowTranslate;
- private javax.swing.JButton ShowTranslateButton;
- private javax.swing.JMenuItem Start;
- private javax.swing.JMenuBar TopMenu;
- private javax.swing.JList TranslatesList;
- private javax.swing.JLabel jLabel1;
- private javax.swing.JLayeredPane jLayeredPane1;
- private javax.swing.JMenu jmEdit;
- private javax.swing.JMenu jmFile;
- private javax.swing.JMenu jmHelp;
- // End of variables declaration
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement