Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

Введение в JPanel
Список форумов
 ->  Swing, AWT & SWT


 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
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 
Ответить с цитатой
http://www.skipy.ru/technics/gui_int.html
_________________
С уважением,
Евгений aka Skipy
www.skipy.ru
P.S. Я НЕ решаю задачи ЗА других!
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
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


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru