Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Java. Вопросы по коду, помощь в поиске информации  (Прочитано 626 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн MrVolt

  • Автор темы
  • Новичок
  • *
  • Сообщений: 25
  • Don't Disturbed
    • Просмотр профиля
Поискал по теме - не нашёл... Поэтому решил создать тему, для себя, тех кто тоже учится и ищет, и тех кто готов помочь   ;)

И попутно задам 2 вопроса...
Сам изучаю Java сравнительно недавно по учебникам Хорстманна и Корнелла.

Вопросы обсуждаются довольно последовательно. Но!
1 - Первое и самое важное для меня на данный момент (что не обсуждалось) - возможно ли кнопку, текстовое поле и подобное - разместить конкретно в определённом месте панели? Следует и будет ли работать в данном случае setBounds()?

И вопрос номер 2. По учебнику делал программу вроде Скетч... Вот код:

package sketch;

import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;

public class Sketch {
   
    public static void main (String[] args) {
        SketchFrame frame = new SketchFrame ();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
       
    }
}


class SketchFrame extends JFrame {
   
    public SketchFrame() {
        setTitle("Sketch");
        setSize(300,200);
       
        SketchPanel panel = new SketchPanel();
        add(panel);
    }
}



class SketchPanel extends JPanel {
   
    public SketchPanel() {       
    last = new Point2D.Double(100, 100);
    lines = new ArrayList<Line2D>();
    KeyHandler listener = new KeyHandler();
    addKeyListener(listener);
    setFocusable(true);
    }
   
    public void add (int dx, int dy) {
     
    Point2D end = new Point2D.Double(last.getX() + dx, last.getY() + dy);
   
    Line2D line = new Line2D.Double (last, end);
    lines.add(line);
    repaint();
   
    last = end;
    }
   
    public void paintComponent(Graphics g) {
   
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
       
        for (Line2D l : lines)
            g2.draw(l);         
    }
   
    private Point2D last;
    private ArrayList<Line2D> lines;
   
    private static final int SMALL_INCREMENT = 1;
    private static final int LARGE_INCREMENT = 5;
   
    private class KeyHandler implements KeyListener {
        public void keyPressed (KeyEvent event){
        int keyCode = event.getKeyCode();
        int d;
        if (event.isShiftDown())
            d=LARGE_INCREMENT;
        else
            d=SMALL_INCREMENT;
       
        if (keyCode == KeyEvent.VK_LEFT) add(-d,0);
        else if (keyCode == KeyEvent.VK_RIGHT) add(d,0);
        else if (keyCode == KeyEvent.VK_UP) add(0,-d);
        else if (keyCode == KeyEvent.VK_DOWN) add(0,d);       
        }
       
        public void keyReleased(KeyEvent event) {}
        public void keyTyped (KeyEvent event) {
            char keyChar = event.getKeyChar();
            int d;
            if (Character.isUpperCase(keyChar))
            {
                d=LARGE_INCREMENT;
                keyChar = Character.toLowerCase(keyChar);
            }
            else
                d=SMALL_INCREMENT;
            if (keyChar == 'a') add(-d,0);
            else if (keyChar == 'd') add(0,d);
            else if (keyChar == 'w') add(0,-d);
            else if (keyChar == 's') add(0,d);   
        }
    }
}


Задался вопросом - возможно ли сделать так, чтобы рисование происходило по диагонали? Назначить клавиши то можно... Но как сделать координаты? Кто сталкивался? :o

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4073
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Сам я с джавой/явой не знаком, по первому вопросу нужно где-то конкретно указать как-то так:
кнопка.X=0
кнопка.Y=50
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн MrVolt

  • Автор темы
  • Новичок
  • *
  • Сообщений: 25
  • Don't Disturbed
    • Просмотр профиля
с Иксом и Игреком то понятно. а скажем, координату Z

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4073
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
MrVolt,
ты про 3Д? Берешь объект ставишь точку пишешь свойство = значение свойства соответствующего типа.
Или я тебя не понял?
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн MrVolt

  • Автор темы
  • Новичок
  • *
  • Сообщений: 25
  • Don't Disturbed
    • Просмотр профиля
нет... пожалуй не про 3Д. суть описанной мной программы в том, что (грубо) при нажатии стрелок сразу же рисуется линия. вверх, вправо,влево,вниз. Как сделать по диагонали? В самой программе используется подобие координат (d,0) = (x,y). Вот и стало интересно, как же сделать некую Z координату, чтобы рисовать по диагонали? быть может что то вроде (x/2,y/2)?

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4073
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
ты читал про программирование графики?
вниз y=y+1
вправо x=x+1
по диагонали вниз и вправо
y=y+1
x=x+1
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн MrVolt

  • Автор темы
  • Новичок
  • *
  • Сообщений: 25
  • Don't Disturbed
    • Просмотр профиля
ок. всё понял. видать упустил этот момент. уже затестил - то что нужно. спасибо.

но что касается 1-го вопроса?

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4073
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
в 2д графике у всех точек 2 координаты
Вот это квадрат (0,0),(1,0),(1,1),(0,1)
Ради тренировки в декартовой системе координат (это как раз 2д) отметь эти точки и соедини их линиями.
А вот по диагонали (0,0),(1,1)
Кстати в ПК (0,0) - левый верх, оси идут вправо и вниз.

Пользователь решил продолжить мысль 14 Декабрь 2013, 18:30:32:
первый вопрос - устанавливаешь ширину, высоту х,у.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн MrVolt

  • Автор темы
  • Новичок
  • *
  • Сообщений: 25
  • Don't Disturbed
    • Просмотр профиля
в том то и дело, что почему то компонент (кнопки, поля) всегда в центре сверху. не задаются координаты. и я не могу понять, в чём я проморгал. к примеру:
public void paintComponent (Graphics g) {
       
       super.paintComponent(g);
       Font sansik = new Font ("SansSerif", Font.BOLD, 14);
       g.setFont(sansik);
       g.drawString ("Размер стд", Mes_X, Mes_Y);
       
       
       
   }
   
   public static final int Mes_X = 10;
   public static final int Mes_Y = 20;
}

в этом куске кода мы пишем строку "Размер стд" в чётко указанном месте. И всё нормально.

Но как и где задать координаты расположения кнопки и текстового поля?

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4073
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Редактор окон предусмотрен? В нем подвигай элементы, сравни код.
Что за код
public static final int Mes_X = 10;
public static final int Mes_Y = 20;
Перемести его в верх процедуры, самый верх, опиши результат
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

 

Страница сгенерирована за 0.071 секунд. Запросов: 26.