Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2012, 05:51   #1
Sna1L
Форумчанин
 
Аватар для Sna1L
 
Регистрация: 15.03.2011
Сообщений: 272
По умолчанию Рисование. Canvas

Добрый день/вечер/утро/ночь!
Установил NetBeans, кинул на формочку холст.
Создал метод:
Код:
public void myMethod() {
     Graphics g = canvas1.getGraphics();
     g.fillRect(0,0,100,100);
     g.dispose();
     canvas1.paint(g);
}
В главном классе в main'е записано следующее:
Код:
GUI app = new GUI();
app.setVisible(true);
app.myMethod();
не рисует
Хотя при запуске, время от времени видно как появляется квадратик и тут же исчезает.

Помогите решить проблему, пж.
ЗЫ с последними двумя методами шаманил. Что с ними, что без них - все равно.
Sna1L вне форума Ответить с цитированием
Старый 27.05.2012, 11:46   #2
it-webwork
Пользователь
 
Регистрация: 02.11.2011
Сообщений: 29
По умолчанию

Ты вызвал метод до того как форма полностью открылась. В момент открытия, разворачивания и т.д. происходит вызов стандартного метода paint();
Попробуй поставить таймер и увидишь о чем я говорю:
Код:
GUI app = new GUI();
app.setVisible(true);
// Таймер на 2 секунды
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}
app.myMethod();
Я могу посоветовать 2 варианта:
ВАРИАНТ 1: Рисовать в переопределенном методе paint();
Код:
        @Override
	public void paint(Graphics g) {
		super.paint(g); // Эта строчка отвечает за прорисовку всех дочерних элементов - кнопок, текст. полей и т.д. Если у тебя не будет таких, то можно её удалить.
		g.fillRect(0,0,100,100);
	}

ВАРИАНТ 2:
Использовать панель для рисования. Это иногда дает очень интересные результаты.
Для этого делаешь такой классик:
Код:
import java.awt.Graphics;
import javax.swing.JPanel;

public class MyPanel extends JPanel{
	@Override
	public void paint(Graphics g) {
		super.paint(g);
		g.fillRect(0,0,100,100);
	}
}
А потом добавляешь к себе на форму вот так:
Код:
GUI app = new GUI();
MyPanel canv = new MyPanel();
app.add(canv);
app.setVisible(true);
Этот вариант интересен тем, что при очень большом желание можно делать свои графические компоненты.
Но тогда уже лучше будет использовать наследование от класса JComponent

Код:
public class MyPanel extends JComponent{
И не забываем про весы если поможет

Последний раз редактировалось it-webwork; 27.05.2012 в 11:56.
it-webwork вне форума Ответить с цитированием
Старый 28.05.2012, 02:08   #3
Sna1L
Форумчанин
 
Аватар для Sna1L
 
Регистрация: 15.03.2011
Сообщений: 272
По умолчанию

Спасибо, помогло. Но почему так, я не понял.
Сначала вель вызывается конструктор, а потом еще и метод setVisible(). Почему же форма "не успела" открыться?
Sna1L вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисование на Canvas grafgrial Мультимедиа в Delphi 11 25.07.2011 10:15
Рисование на Canvas Черевон Общие вопросы Delphi 4 14.06.2011 16:40
Рисование квадрата. Работа на Canvas Файзулка Мультимедиа в Delphi 8 26.02.2010 14:34
Рисование квадрата, работа на canvas lubov_morkov Помощь студентам 2 02.06.2009 13:01
Рисование на Canvas при нажатии левой кнопки мыши. Ветас Помощь студентам 3 11.11.2007 22:02