русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Index.html, fon.png, prog.jar 10 страница


Дата добавления: 2015-06-12; просмотров: 877; Нарушение авторских прав


Затем вызываем методrepaint(),перерисовка. Метод repaint()– это вызов методаpaintComponent(),который будет выполняться каждый раз, при срабатывании таймера. Он будет производить рисование магического квадрата. Внутри метода paintComponent()записываем цикл for. Внутри цикла forобъявляем счетчик цикла, присваиваем ему изначальное значение 0,записываем условие i<=255. Число 255–ограничение значения переменной val (компоненты RGBне могут превышать значение 255).

Далее записываем i++ – на каждом шаге цикла значение переменной iувеличивается на единицу. При помощи фигурных скобок ограничиваем тело цикла. Внутри тела цикла обращаемся к переменной типа Graphics, устанавливаем цвет при помощи метода setColor() (установить текущий цвет).

В круглых скобках указываем нужный цвет. Для этого создаём новый объект типа Сolor, он и является цветом. Внутри зададим три параметра,разделенные запятыми. Это и есть составляющие RGB,их значения меняются в диапазоне от 0до 255включительно.Изменяя эти компоненты, можно получать различные цвета.

Всего существует более16-ти миллионов всех возможных комбинаций этих трёх составляющих, т. е. при задании цвета можно перебрать более 16-ти миллионов цветов. Большего количества цветов человеческий глаз уже не различает.

Для изменения на каждом шаге цикла находящейся по центру зелёной компоненты квадратов, записываем формулу.Берём счётчик цикла i, умножаем его на переменную val. Счётчик цикла будет меняться от 0 до255, и на каждом шаге будут получаться различные цвета.Точно так же переменная valбудет изменяться по таймеру: Когда таймер срабатывает первый раз, значение переменной valравно 0. Далее значение переменной valстановится равным 1, и в следующий раз цикл forвыполняется со значением val, равным 1. iв цикле будет изменяться от 0до 255, а значение val –будет равно 1.



На следующем шаге срабатывания таймера значение переменнойval изменяется на2, таким образом,следующий раз цикл forбудет каждый раз использовать значение 2.Умножая iнаval,мы будем получать различные оттенки зелёного цвета,меняющиеся со временем, так как, при срабатывании таймера, значение переменнойvalизменяется.

Произведение заключаем в круглые скобки и выполняем такую операцию: %255.

Знак % – это остаток от деления. Допустим, если число 17разделить на 5, остаток от деления будет равен2. Для данного случая, можно написать: 17%5=2. Эта операция необходима, чтобы текущее значение никогда не превышало 255,т. к. остаток от деления при делении на255никогда не может превышать это число. Произведениеiна valиногда будет превышать 255. Чтобы этого избежать, приходится выполнять операцию деления на 255 и взятие остатка.

Далее, вновь обращаемся к переменной gr и вызываем метод drawRect(). Метод drawRect()рисует прямоугольный контур, у него внутри четыре параметра:первые два – координаты верхней левой угловой точки,третий – его ширина и четвертый – его высота. В качестве третьего и четвертого параметра указываем значениеi. Значит, ширина и высота квадрата на каждом шаге цикла увеличатся на 1.Таким образом, квадраты и их рамки будут идти рядом друг с другом.

Вместо угловой точки записываем следующее: возьмём некоторое смещение, чтобы квадрат выводился с отступами от левой и верхней границы окна.Получим выражения: для x: 250 – i / 2, для y: 220 – i / 2.

Зачем здесь выполнять вычитание и деление счетчика iна 2? Счетчик iотвечает за ширину и высоту. Мы хотим вывести все квадраты так,чтобы их центр находился в одной точке. Так как первые два параметра являются параметрами не центральной точки, а верхней левой угловой точки квадрата,необходимо брать ровно половину ширины и высоты квадрата и производить вычитание из некоторого числа. Таким способом мы добьёмся того, что центр всех квадратов будет находиться в одной точке. После запуска посмотрим, как всё это будет выглядеть в рабочем виде.

На этом формирование класса panelзакончено, можно сохранить проект и перейти на соседнюю закладку –prog.java. Там находится программный код, который был создан автоматически при создании проекта. Здесь необходимо сделать небольшое исправление.

Панель, в которой мы произвели отрисовку магического квадрата,должна быть вложена в окно JFrame. Именно её необходимо указать как используемую там панель. Таким образом, вместо JPanel, указываем название класса panel. Если перейти в его закладку, видно,–только что доработанный класс, который наследуется из класса JPanel,называется как раз panel.

public class prog extends JFrame {

 

// В этом месте необходимо вместо JPanel

// указать panel

private panel contentPane;

 

/**

* Launch the application.

*/

Далее, переходим в самый низ, где необходимо ещё в одном месте поменять JPanel на название класса panel. Теперь класс panelбудет являться панелью, вложенной в окно JFrame. На этой панели отрисовывается магический квадрат.

public prog() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setBounds(100, 100, 450, 300);

// В этом месте также заменяем JPanel на panel

contentPane = new panel();

contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

contentPane.setLayout(new BorderLayout(0, 0));

setContentPane(contentPane);

}

Запустим приложение на исполнение. Появился магический квадрат,он начинает переливаться зелеными цветами с определенным интервалом времени.

Первое заметное неудобство: квадрат полностью не помещается в окно. Перейдём на закладку,где находится JFrame, далее –на закладку Design,внесём некоторые коррективы.

Прежде всего, выделяем панель окна. Щёлкаем левой клавишей мыши внутри панели. Внутренняя панель окна выделилась квадратиками и рамочкой,значит, именно панель сейчас является текущей выбранной.

В свойствах Layoutвыбираем Absolute layout, т. е.,разрешаем произвольное размещение элементов на панели. Это понадобится при формировании надписей, текстового поля и кнопки, которые будут присутствовать в окне.

Далее, увеличиваем окно по высоте, чтобы квадрат помещался в нём полностью, и вновь запускаем приложение на исполнение.

Теперь квадрат полностью помещается в окне. Что собой представляет этот квадрат (см. рис. 12.35)?

Рис. 12.35

Если присмотреться, у него есть центральная точка, являющаяся таковой для многих квадратных рамок, цвет каждой из них чуть-чуть отличается от цвета предыдущей. Центр всех этих рамок находится в одной центральной точке квадрата. Сдвиг между рамками квадрата– один пиксель.

Если перейти на закладку panelи немного поэкспериментировать с циклом,можно будет увидеть, как изменяется отображение этой области. Станет понятнее,как отрисовываются квадраты.

Теперь необходимо сформировать интерфейс –создать элементы окна, оформить его.

Щёлкаем на заголовок окна, таким образом, выбираем всю форму.Переходим в Cвойства, находим свойство под названиемtitle (заголовок).Записываем заголовок "Предсказание будущего"(см. рис. 12.36).

Рис. 12.36

Вверху появился заголовок: "Предсказание будущего" (см. рис.12.37).

Рис. 12.37

Теперь добавим надпись.Для этого необходимо выбрать из спискаJLabel(см. рис. 12.38).

Рис. 12.38

Находим в центральной части окна JLabel,добавляем его на форму и записываем(свойство text): "Посмотрите на магический квадрат…"(см.рис. 12.39).

Рис. 12.39

Поменяем шрифт надписи,для этого перейдём в палитру свойств и найдём свойство font (шрифт) (см. рис.12.40):

Рис. 12.40

Сделаем его размер побольше, например, 18, а также поменяем его цвет в свойстве foreground.Выберем, к примеру, синий. Нажмём Ok. Надпись увеличилась в размерах и стала синего цвета. Раздвинем надпись так, чтобы она полностью помещалась на экране. Первая надпись сформирована.

Добавляем еще одну надпись. Снова выбираем JLabel, помещаем элемент на форму и в для свойства textустанавливаем значение: "Вглядитесь в будущее…". Так же при помощи свойства font поменяем его размер,сделаем установим, например, 17. Поменяем цвет(свойство foreground)–установим красный. Изменим размеры надписи так, чтобы она полностью помещалась на экран.

На нашем игровом поле сейчас написано: "Посмотрите на магический квадрат… Вглядитесь в будущее…".

В этот момент пользователь должен посмотреть на квадрат и задуматься.

Теперь под квадратом добавим ещё одну надпись и поместим в ней текст: "Подумайте о том, что вы хотите….".

Точно также установим размер шрифта – 16,изменим цвет (может выбрать любой).

Вставим ещё одну,последнюю надпись. Выбираем JLabel, помещаем элемент на форму, вставляем текст: "… и нажмите,чтобы".Размер шрифта пусть будет 16, а цвет - любой, например, оранжевый.Если надписи получились слишком маленькие,можно их увеличить, установив размер,например, 20. Но изменяйте их размеры так, чтобы они полностью помещались на экране.

Еще нам понадобится кнопка, которую нужно нажать, чтобы узнать предсказание. Добавим ее на форму.

Выберем элемент JButton, поместим его на форму. В разделе Cвойства установим текст кнопки: "Узнать". Зададим размер шрифта 20, изменим цвет на темно-синий. Запустим приложение (см. рис. 41).

Рис. 12.41

При нажатии на кнопку,текстовое поле, которое мы добавим ниже,будет выводить предсказание.

Для создания поля выберем элемент JTextField- однострочное текстовое поле. Можно изменить шрифт на 20и поменять цвет текста на красный или любой другой.

Ещё раз запустим на исполнение (см. рис. 12.42).

Рис. 12.42

При нажатии на кнопку"Узнать"пока ничего не происходит, мы ещё не написали программный код. Создадим обработчик нажатия на эту кнопку, щелкнув по ней два раза левой кнопкой мыши. Мы попадём в программный код, где уже автоматически сформировался метод actionPerformed():

public void actionPerformed(ActionEvent arg0) {

}

Внутри этого метода необходимо сформировать запрос к базе данных, созданной в начале занятия. Оттуда случайным образом будет выбираться одна из строк. Вернёмся к нашей базе данных.

В единственной таблице базы находится 21строка, в каждой строке есть некоторая надпись. Необходимо сделать так,чтобы надпись выбиралась случайно. Для выбора случайного значения понадобитсяметод random()класса Math. Таким образом, мы сформируем случайное число от1до 21. Затем, когда число будет сформировано (допустим, это будет цифра 7),произойдёт запрос к базе данных. При помощи команды SELECTбудет выбрана строка из базы данных, и текст, находящийся в поле textбудет выведен в текстовое поле в нашем окне (см. рис. 12.43).

Рис. 12.43

Прежде, чем создавать этот запрос в программном коде приложения,давайте перейдем на закладку SQLи сформируем для начала этот запрос здесь. Допустим,случайное число оказалось 7, тогда записываем:

SELECT * FROM tabl WHERE (id=7);

Такой запрос к базе данных необходимо сформировать, чтобы получить то, что нужно (см.рис. 12.44).

Рис. 12.44

Выполняем запрос нажатием Go.Запрос срабатывает, и мы видим результат(см. рис. 12.45).

Рис. 12.45

Мы выбрали всего одну строку, необходимую для возможности вывести нужный текст в нашу форму.

Теперь такой запрос сформируем из нашего приложения. Для этого снова вернемся в среду разработки Eclipse.

Сначала добавим библиотеку, чтобы можно было работать с базой данных MySQL. Эту библиотеку мы использовали на предыдущем занятии. Выбираем проект lesson_24(см.рис. 12.46).

Рис. 12.46

Нажимаем правую клавишу, затем, в самом низу, Свойства(см. рис. 12.47).

Рис. 12.47

Выбираем слева путь компоновки Java(см. рис. 12.48).

Рис. 12.48

В появившемся окне выбираем закладку Библиотеки и нажимаем на кнопку Добавить внешниеJAR...(вторая кнопка сверху) (см. рис.12.49).

Рис. 12.49

На диске C:находитсяMySQL-коннектор, мы скачали его из Интернета и пользовались им на предыдущем занятии(см. рис. 12.50).

Рис. 12.50

Выбираем его, нажимаем на кнопку "Открыть", потом на кнопку "Ok". Теперь коннектор подключен к проекту, и им можно пользоваться. Воспользуемся алгоритмом,сформированным на предыдущем уроке.Перейдём к проекту lesson_23, откроем программу, написанную на предыдущем занятии (см. рис. 12.51).

Рис. 12.51

Сверху подключена библиотека Java.sql, чтобы можно было работать с базой данных MySQL(см. рис. 12.52).Основная часть программного кода – это и есть запрос к базе данных.

Рис. 12.52

Таким образом, чтобы заново не набирать программный код, а лишь подкорректировать его под нужную задачу,возьмём этот программный код и воспользуемся им, как алгоритмом.

// Подключаем библиотеку для работы с MySQL

import java.sql.*;

 

// Главный класс программы

public class prog {

// Метод запуска программы

public static void main(String[] args) {

// Переменная типа -Подключение

Connection connect;

// Конструкция попытка-исключение

try

{

// Переменная с именем драйвера для подключения

String driverName = "com.mysql.jdbc.Driver";

Class.forName(driverName);

 

// Имя сервера базы данных

String serverName = "localhost";

// Имя базы данных

String mybase = "base00";

// Строка подключения:указываются сервер и имя базы

// данных

String url_ = "jdbc:mysql://"+serverName+"/"+mybase;

// Имя пользователя базы данных

String username = "root";

// Пароль пользователя базы данных

String password = "";

// Установление подключения к базе данных

connect = DriverManager.getConnection(url_,username,password);

// Строка запроса SQL к базе данных

String query = "SELECT * FROM tab00";

// Создание запроса

Statement stmt = connect.createStatement();

// Выполнение запроса с получением результата

ResultSet rs = stmt.executeQuery(query);

String temp;

// Цикл для перебора записей (строк) результата запроса

while (rs.next())

{

// Получение значение поля (колонки) по имени

temp = rs.getString("imya");

// Вывод в консольное окно

System.out.println(temp);

}

// Закрытие подключения к базе данных

connect.close();

}

catch(Exception ex) {}

}

}

Это пример того, как созданный для решения какой-либо задачи фрагмент программного кода, сохраняется в файлах или просто выписывается, а потом,когда возникает похожая задача,используется снова. Не нужно снова тратить время на её решение.

Копируем строку import, переходим на закладку prog.java и вставляем ее в начало.

import java.sql.*;

 

import java.awt.BorderLayout;

import java.awt.EventQueue;

 

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.border.EmptyBorder;

import javax.swing.JButton;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

Вновь возвращаемся к программному коду предыдущего проекта и выделяем блок программного кода,начинающийся со строчки:

Connection connect;

Здесь объявляется переменная для подключения к базе данных.Выделяем блок, заканчивая конструкцией:

catch(Exception ex) {}

Копируем и переходим вновь на закладку prog.java.

Перейдем в обработчик событий при нажатии на кнопку "Узнать". Найдем часть программного кода, где сформирован методactionPerformed().Сформирован он как раз после создания кнопки типа JButton. Именно внутрь этого метода нужно вставить блок, скопированный из проекта предыдущего урока (рис.12.53).

Рис. 12.53

Теперь появился новый блок программного кода, но его нужно немного подкорректировать.

Что меняется в нашем случае?

Во-первых, имя базы данных теперь другое, game. localhostостается без изменений, т. к. база находится также локально. Имя пользователя тоже остается–root (это суперадминистратор, он присутствует по умолчанию). Пароля нет.

// Имя базы данных

String mybase = "game";

Далее, подкорректируем запрос, который будет производиться к базе данных. Прежде, чем его формировать,нужно получить случайное значение от1до 21. Это значение сохраним в числовой переменной целого типа. Назовём её, например, rez, объявим как целочисленную переменную int, и обратимся к методуrandom()классаMath.

int rez = (int)(Math.random()*21)+1;

Вызываем Math.random().

Этот метод возвращает случайное число от 0 до 1, но в дробном виде,т. е., это может быть большой диапазон чисел,так как после запятой еще присутствуют знаки дробной части. Чтобы получить число в пределах от 0 до 21, необходимо умножитьMath.random() на 21.

Но Math.random() возвращает дробное значение, поэтому необходимо взять всё это выражение в круглые скобки и преобразовать к целочисленному типу int. Для этого в самом начале в круглых скобках записываем (int). Произойдет преобразование к целочисленному типу –дробная часть будет просто отбрасываться. Сейчас эта конструкция позволяет получить числа от 0 до 20 включительно. Почему до 20?Потому что дробная часть отбрасывается.

Посмотрим на базу данных. Нумерация строк начинается с 1.Таким образом, значения нулевого значенияid нет, а случайное число возвращается,начиная с 0, поэтому в самом конце необходимо прибавить единицу, чтобы минимальное значение было равно 1. Поправим строку запроса:

int rez = (int)(Math.random()*21)+1;

// Строка запроса SQL к базе данных

String query = "SELECT * FROM tabl WHERE (id="+rez+")";

Нужно дописать условие,по которому будет происходить выбор из таблицы: WHERE(id=,

(именно сюда необходимо вставить значение переменной rez). Мы находимся внутри строки, поэтому необходимо разбить эту строку на две части, чтобы вставить сюда значение. Ставим двойную кавычку после знака =и перед второй круглой скобкой. Сейчас строка разбита на две составляющие. Если между ними поставить знак +, это будет называться конкатенацией строк,сложением строк.

Между ними необходимо вставить значение переменной rez. Записываем +rez+. К первой строке,окончанием которой является символ равенства, будет прибавлено значение переменной rez, т.е. какое-то число, и, последним шагом,будет прибавлена закрывающая круглая скобка. После сложения этих трех составляющих мы получим одну единую строку, в точности совпадающую со строкой,сформированной нами вручную на закладкеSQL.

Теперь, когда нужный запрос сформирован, необходимо там, где выдаётся результат запроса, вместо названия поля imyaуказать название text, (название поля в таблице уже другое). После этой операции в переменную tempпопадёт фраза, находящаяся по случайному номеру, который получился в переменнойrez. Вместо вывода в консольное окно, как было сделано на предыдущем занятии, это значение необходимо поместить в текстовое поле,поэтому вывод в консольное окно удаляем.Теперь обратимся к переменной textField–текстовому полю,вставленному в форму, и через оператор"точка" (.)вызовем метод setText(), т. е. поместим в это поле текст. В круглых скобках помещаем переменнуюtemp, значение,полученное из базы данных.

String temp;

// Цикл для перебора записей (строк) результата запроса

while (rs.next())

{

// Получение значение поля (колонки) по имени

temp = rs.getString("text");

textField.setText(temp);

}

Перейдём в визуальный редактор, выделим на форме наше текстовое поле и перейдем в Cвойства, в поле Variable.

textField – это название переменной, которая отвечает за текстовое поле, поэтому в программном коде мы обратились именно к переменной с названием textField.

Полностью программный внутри обработчика события при нажатии на кнопку выглядит так:

public void actionPerformed(ActionEvent arg0) {

// Переменная типа -Подключение

Connection connect;

// Конструкция попытка-исключение

try

{

// Переменная с именем драйвера для подключения

String driverName = "com.mysql.jdbc.Driver";

Class.forName(driverName);

 

// Имя сервера базы данных

String serverName = "localhost";

// Имя базы данных

String mybase = "game";

// Строка подключения:указываются сервер и имя базы данных

String url_ = "jdbc:mysql://"+serverName+"/"+mybase;

// Имя пользователя базы данных

String username = "root";

// Пароль пользователя базы данных

String password = "";

// Установление подключения к базе данных

connect = DriverManager.getConnection(url_,username,password);

// Получаем случайное число от 1 до 21

int rez = (int)(Math.random()*21)+1;

// Строка запроса SQL к базе данных

String query = "SELECT * FROM tabl WHERE (id="+rez+")";

// Создание запроса

Statement stmt = connect.createStatement();

// Выполнение запроса с получением результата

ResultSet rs = stmt.executeQuery(query);

String temp;

// Цикл для перебора записей (строк) результата запроса

while (rs.next())

{

// Получение значение поля (колонки) по имени

temp = rs.getString("text");

// Помещаем фразу в текстовое поле

textField.setText(temp);

}

// Закрытие подключения к базе данных

connect.close();

}

catch(Exception ex) {}

}

Запустим приложение на исполнение. Посмотрим на магический квадрат, загадаем, что-нибудь и нажмём на кнопку "Узнать".

Приложение выдало первый результат со значением Вероятно. Это одна из строчек, случайно выбранная из базы (рис. 12.54).

Рис. 12.54

Загадаем еще что-нибудь–выходит сообщение "Всё получится".

Это сообщение радует.Наше приложение действительно предсказывает будущее!



<== предыдущая лекция | следующая лекция ==>
Index.html, fon.png, prog.jar 9 страница | Заключение


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.612 сек.