|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
stweet : 6 Новичок
|
Янв 29, 2012 14:09 |
|
|
Добрый час форумчане!
До настоящего момента писал на actionscript-е периодически поглядывая на java(у).
На данный момент пытаюсь понять работу графического пакета Graphics в JPanel.
Вот пример того что сделал:
| Код: |
// Init.java
import java.awt.Color;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
public class Init extends JFrame{
public Init() {
this.setTitle("Draw grid. ver 1.0");
this.setIconImage(new ImageIcon("data/img/icon.png").getImage());
this.setBackground(new Color(0, 0, 0, 100));
this.setSize(600, 400);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// пытаюсь добавить карту в JFrame
this.add(new Map());
}
public static void main(String[] args) {
new Init();
}
}
|
| Код: |
// Map.java
import java.awt.Graphics;
import javax.swing.JPanel;
public class Map extends JPanel {
Call call1;
Call call2;
public Map() {
call1 = new Call(0, 0, 100, 100);
call2 = new Call(0, 105, 100, 100);
}
// На сколько я понимаю данный метод вызывается как "перерисовщик" панели JPanel
// Вот именно о данном методе хотелось бы узнать по подробнее, как, где и зачем?
public void paint (Graphics g) {
super.paint(g);
call1.paint(g);
call2.paint(g);
}
}
|
| Код: |
// Call.java
import java.awt.Color;
import java.awt.Graphics;
public class Call {
private int xPos;
private int yPos;
private int width;
private int height;
public Call(final int x, final int y, final int width, final int height) {
this.xPos = x;
this.yPos = y;
this.width = width;
this.height = height;
}
public void paint (Graphics g) {
g.setColor(Color.DARK_GRAY);
g.fillRect(xPos, yPos, width, height);
}
}
|
Вопрос в том, как создать визуальную сетку не перерисовывая её по 5 раз при запуске?
Ещё момент, при запуске готового приложения !НЕ передвигая окна программы, навести курсор на кнопку закрытия программы, дождаться всплытия подсказки, после чего сдвинуть курсор в любую сторону срабатывает метод "paint()" в классе" Map". Не могу понять почему?
Если кому не сложно, опишите метод "paint" в "JPanel" или буду признателен за ссылочку с подробным описанием работы сие метода.
Заранее благодарен за помощь! |
|
|
|
 |
Vantuz-Subhuman : 660 Постоянный посетитель Откуда: издиснейленда
|
Янв 29, 2012 14:28 |
|
|
| stweet писал(а): |
| Если кому не сложно, опишите метод "paint" в "JPanel" или буду признателен за ссылочку с подробным описанием работы сие метода. |
http://docs.oracle.com/javase/6/docs/api/javax/swing/JComponent.html#paint(java.awt.Graphics)
Lesson: Performing Custom Painting
Trail: 2D Graphics
В AWT вроде для откровенного рисования есть класс Canvas, не в курсе, что является наиболее подходящей заменой в Swing'е, т.к. JPanel это всё-таки контейнер. Хотя в сан-туториале рисуют на ней. _________________ «One should never underestimate the predictability of stupidity»,
«Never attribute to malice that which can be adequately explained by stupidity» |
|
|
|
 |
Skipy : 4805 Я тут живу! Откуда: Москва, Россия
|
Янв 30, 2012 11:47 |
|
|
|
|
|
|
 |
Vantuz-Subhuman : 660 Постоянный посетитель Откуда: издиснейленда
|
Янв 30, 2012 13:03 |
|
|
| Skipy писал(а): |
| http://www.skipy.ru/technics/gui_int.html |
Кстати, если позволите, давно хотел спросить у кого-нибудь сведущего в Swing'е. Почему для "рисования" часто используется именно контейнер JPanel, а не какой-нибудь специальный компонент, или наследование от самого простого Component? _________________ «One should never underestimate the predictability of stupidity»,
«Never attribute to malice that which can be adequately explained by stupidity» |
|
|
|
 |
Skipy : 4805 Я тут живу! Откуда: Москва, Россия
|
Янв 30, 2012 13:40 |
|
|
Простая пустая панель с рамкой (возможно) и фоном. Можно и JComponent использовать, но там были у меня какие-то проблемы с отрисовкой фона, кажется, уже не вспомню (может и из-за прозрачности по умолчанию, JComponent прозрачна, JPanel - нет). Выше JComponent точно не рекомендуется брать - там уже не swing, а awt, в JComponent paint переписан под swing, paintComponent/paintBorder/paintChildren только тут и появляются.
Собственно, дело в том, что для рисования все равно надо переопределять paintComponent. В Java в базе нет компоненты, на которой извне один раз нарисовал, и она всё помнит. Такую сделать не вопрос, вон, в пятницу я за час нарисовал. Но это уже некоторое нарушение MVC - модель отсутствует по факту. Ну а если наследоваться - то от минимальной примитивной. Я привык от JPanel, у нее от JComponent минимальные отличия. _________________ С уважением,
Евгений aka Skipy
www.skipy.ru
P.S. Я НЕ решаю задачи ЗА других! |
|
|
|
 |
|
|
Страница 1 из 1
|
Список форумов
-> Swing, AWT & SWT |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|