Рандом
Иногда возникает задача внести элемент случайности в программу.Для получения случайного числа в Java можно использовать псевдогенератор случайных чисел. Для этого нужно создать класс Random(), определённый в java.util.Random.
Random r = new Random(); // создание нового класса случайных чисел int ind = r.nextInt(5); // генерация случайного числа, с ограничением верхнего числа = 5
Рисование на форме
Мне потребовалось прорисовывать на форме траекторию движения. Сделано это с помощью класса Graphics.Давайте рассмотрим пример. Для начала поговорим о входных параметрах.
Первый параметр это Graphics т.е. класс который можно получить у формы, на которой будет выполняться отрисовка, с помощью метода JPanel.getGraphics()
Второй параметр это пользовательский класс который содержит в себе набор контрольных точек "координат".
Итак давайте разберем функцию
private void PaintTrac(Graphics gr, EyesSet sets){ Graphics2D g = (Graphics2D)gr; // выполняется приведение класса Graphics к Graphics2D который стал доступен в Java 1.2 //Graphics2D является расширением Graphics. int timeLine = (pr.practicePeriod/4)/sets.GetPointsCount(); // здесь рассчитываем время отводимое для перерисовки от точки х1 до точки х2, из расчёта, что вся фигура должна повториться 4 раза за отведенный период Property last = null; // пользовательский класс последней прорисованной координаты for (int it = 0; it < 4; it++){ // начало цикла одной прорисовки for (Iteratoriter = sets.GetPoints().iterator(); iter.hasNext();){ //для всех координат в наборе if (last == null) { // если зашли в цикл первый раз last = iter.next(); // то последний прорисованной координатой будет 1ая } else { // если до этого уже что то нарисованно Property now = iter.next(); // получаем текущую координату int step = Math.max(Math.round(Math.abs(last.getXCoord() - now.getXCoord())), Math.round(Math.abs(last.getYCoord() - now.getYCoord()))); // определяем максимальный сдвиг по х координате или по у. for (int i = 0; i < step; i++){ // начало прорисовки движения g.setColor(Color.black); // устанавливаем цвет фона g.fillRect(0, 0, fr.getWidth(), fr.getHeight()); // заполняем фоном всю доступную область float x = ((float)(now.getXCoord() - last.getXCoord())/step)*(i+1); // вычисляем дельту смещения по оси х float y = ((float)(now.getYCoord() - last.getYCoord())/step)*(i+1); // вычисляем дельту смещения по оси у g.setColor(Color.red); //устанавливается новый цвет которым будет выполняться прорисовка g.fillOval(last.getXCoord() + Math.round(x), last.getYCoord() + Math.round(y), 25, 25); // рисуется простая фигура try {//останавливаем выполнение программы на время задержки Thread.sleep(timeLine/step); } catch (InterruptedException e) { e.printStackTrace(); } } last = now; }// конец прорисовки одной линии траектории }// конец полного цикла прорисовки фигуры }// конец одного цикла прорисовки всей фигуры }
3 Выделение цветом выбранной записи в JList
Иногда требуется подсветить конкретную запись в списке, чтобы отобразить какой именно элемент выбран. Для того чтобы выделить цветом выбранную запись нужно переопределить функцию setCellRenderer. Делается это вот так:JList.setCellRenderer(new javax.swing.DefaultListCellRenderer(){ public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // выбранное значение приводим к типу который хранится в списке связанным с данным листом Property prop = (Property)value; // изменяем способ отображения информации, вместо указателя на объект будет отображаться требуемый текст setText(prop.getDisplayCoordinat()); // определяем набор цветов // переменные для определения цвета int front = 1; int back = 0; // по умолчанию чёрные буквы белый фон Color[] bfg = {Color.WHITE, Color.BLACK}; //если ячейка выбрана if (isSelected) { //голубой фон bfg[back] = Color.CYAN; //черные буквы bfg[front] = Color.BLACK; } // меняем цвета setBackground(bfg[back]); setForeground(bfg[front]); return this; } });
4 Коллекции
Довольно часто требуется работа с коллекциями. Это большая тема о которой можно почитать вот здесь5 События на кнопки мыши
Иногда случается так, что нужно добавить событие при нажатии определённой кнопки мыши. Делается это очень просто. Для требуемого визуального объекта вызываем свойство addMouseListener, и переопределяем MouseAdapter(). Для того, что бы обработать определённую кнопку можно воспользоваться условием, evt.getButton() == MouseEvent.BUTTON3 Ниже приведу свой пример:jlSet.addMouseListener(new java.awt.event.MouseAdapter() { // обрабатываем событие при нажатии кнопки мыши public void mouseClicked(java.awt.event.MouseEvent evt) { // дальше выполняется обработка только если нажата правая кнопка мыши if (evt.getButton() == MouseEvent.BUTTON3){ ... }; });Вот пока и всё что накопилось. Здесь можно почитать Часть 1
Комментариев нет:
Отправить комментарий