Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Фон панели для рисования 
:(
    Опции темы
Cyclone
Дата 26.10.2008, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 2.5.2007

Репутация: нет
Всего: нет



Доброго времени.

Создаю панельку для рисования.
Код

package gui;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class DrawPanel extends JPanel{
    public DrawPanel() {
        //setBackground(Color.WHITE); <=- вопрос об этом!
        //setPreferredSize(new Dimension(getSize().width, getSize().height));
        addMouseListener(new DrawMouseListener());
        addMouseMotionListener(new DrawMouseMotionListener());
    }
    
    Image image = null;
    Graphics imageGraphics = null;
    
    private int brushSize = 10; //getter'ы, setter'ы будут позже

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        if(image == null) {
            Dimension d = getSize();
            image = createImage(d.width, d.height);
        }
        
        imageGraphics = image.getGraphics();
        update(g);
    }
    
    @Override
    public void update(Graphics g) {
        //super.update(g);
        g.drawImage(image, 0, 0, this);
    }
    
    private class DrawMouseListener extends MouseAdapter{
        @Override
        public void mousePressed(MouseEvent e) {
            super.mousePressed(e);
            drawBrushStroke(e);
        }
    }
    
    private class DrawMouseMotionListener extends MouseMotionAdapter {
        @Override
        public void mouseDragged(MouseEvent e) {
            super.mouseDragged(e);
            drawBrushStroke(e);
        }
    }
    
    private void drawBrushStroke(MouseEvent e) {
        int x = e.getX();
        int y = e.getY();
        
        if(SwingUtilities.isLeftMouseButton(e)) {
            imageGraphics.setColor(Color.BLACK);
        } else {
            if(SwingUtilities.isRightMouseButton(e)) {
                imageGraphics.setColor(Color.WHITE);
            } else {
                return;
            }
        }
        imageGraphics.fillOval(x-brushSize/2, y-brushSize/2, brushSize, brushSize);
        repaint();
    }
}



Чтобы нарисованное не исчезало при перерисовке, всё хранится в image.
А теперь, внимание, вопрос: как мне изменить её фон? smile
При такой реализации, на сколько я понимаю, компонент при создании заполняется пустым image, то есть серым цветом.

Спасибо.


P.S.
Приму любые советы по коду.
PM MAIL   Вверх
dorogoyIV
Дата 26.10.2008, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



кладешь свою DrawPanel на другую цветную панель
PM MAIL   Вверх
Cyclone
Дата 26.10.2008, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 2.5.2007

Репутация: нет
Всего: нет



Цитата(dorogoyIV @ 26.10.2008,  13:57)
кладешь свою DrawPanel на другую цветную панель

Никакого эффекта.

Код

JPanel getDrawPanel() {
        if (drawPanel == null) {
            JPanel panel = new JPanel(new BorderLayout());
            panel.setBackground(Color.WHITE);
            panel.setBounds(2, 2, 250, 250);
            
            drawPanel = new DrawPanel();
            //drawPanel.setBounds(2, 2, 250, 250);
            drawPanel.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
            
            panel.add(drawPanel);
            return panel;
        }
        return drawPanel;
    }


Подложенной панели просто не видно.
PM MAIL   Вверх
dorogoyIV
Дата 26.10.2008, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Цитата(Cyclone @  26.10.2008,  14:32 Найти цитируемый пост)
Никакого эффекта.

сделай это в другом классе, там где вызываешь свою панель
Код

 myJFrame.setBackground(Color.YELLOW);
 myJFrame.add(new DrawPanel());

PM MAIL   Вверх
Keyo
Дата 27.10.2008, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 10.4.2008

Репутация: нет
Всего: нет



Cyclone, не забудь еще сделать это, если я правильно понял, то должно помочь
Код

drawPanel.setOpaque(false);


по скольку у компонентов по умолчанию свойство непрозрачности true...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0710 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.