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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужна сторонняя оценка, у кого есть время и желание разбираться 
:(
    Опции темы
Ratman
Дата 15.7.2008, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Имеем программку... код:
Код

import java.awt.*;  
import java.awt.event.*;
import java.awt.image.*;

class SimpleFrame extends Frame{ 
    //По этим точкам рисуется овал
    private int prsdX, prsdY, lastX, lastY;
    //На нем "держится" двойная буфферизация - так я избавился от мерцания
    private BufferedImage bi = new BufferedImage(640,480,BufferedImage.TYPE_INT_ARGB);
    //Сюда сохраняется текущее изображение, перед тем, как рисовать новый овал
    //Необходимо, чтобы при перетягивании мышью нового овала, старое изображение не стиралось
    private BufferedImage tmp = new BufferedImage(640,480,BufferedImage.TYPE_INT_ARGB);
    Button bRed, bGreen, bBlue, bBlack, bWhite;
    Checkbox chb;
    //Будет ли овал с заливкой или без
    private boolean unfilled=true;
    //Цвет овала
    private Color color = Color.black;

    
    //Ловим события мыши
    class MyMouseAdapter implements MouseListener{
        public void mouseClicked(MouseEvent ev) {
            //Если уликнута одна из кнопок - меняем цвет
            if (ev.getComponent().equals(bBlack)) color = Color.BLACK;
            if (ev.getComponent().equals(bWhite)) color = Color.WHITE;
            if (ev.getComponent().equals(bRed)) color = Color.RED;
            if (ev.getComponent().equals(bGreen)) color = Color.GREEN;
            if (ev.getComponent().equals(bBlue)) color = Color.BLUE;
            if (ev.getComponent().equals(chb)) unfilled=!chb.getState();
        }
        public void mouseEntered(MouseEvent arg0) {}
        public void mouseExited(MouseEvent arg0) {}
        public void mousePressed(MouseEvent ev) {
            //Устанавливаем координаты для рисования "временных" овалов
            prsdX=ev.getX()-4;
            prsdY=ev.getY()-30;
            //"Сохраняем" имеющееся изображение
            tmp.getGraphics().fillRect(0, 0, 640, 480);
            tmp.getGraphics().drawImage(bi, 0, 0, null);
        }
        public void mouseReleased(MouseEvent arg0) {}
    }
    
    //Ловим движение мыши
    class MyMouseMotionAdapter implements MouseMotionListener{
        public void mouseDragged(MouseEvent ev) {
            Graphics big = bi.getGraphics();
            //Рисуем сохраненное изображение
            //Тем самым стирается временно нарисованный овал
            big.drawImage(tmp, 0, 0, null);
            lastX=ev.getX()-4;
            lastY=ev.getY()-30;
            big.setColor(color);
            if (unfilled) big.drawOval(Math.min( prsdX, lastX), Math.min( prsdY, lastY), Math.abs(prsdX-lastX), Math.abs(prsdY-lastY));
                else big.fillOval(Math.min( prsdX, lastX), Math.min( prsdY, lastY), Math.abs(prsdX-lastX), Math.abs(prsdY-lastY));
            Graphics g = getGraphics();
            g.drawImage(bi, 4, 30, null);
        }
        public void mouseMoved(MouseEvent ev) {}
    }
    
    SimpleFrame(String s){
        super (s); 
        setSize(648, 534); 
        setResizable(false);
        this.setLocation(100, 100);
        setVisible(true);
        addWindowListener(new WindowAdapter(){ 
            public void windowClosing(WindowEvent ev){
                System.exit (0);
            }
        });
        addMouseListener(new MyMouseAdapter());
        addMouseMotionListener(new MyMouseMotionAdapter());
        tmp.getGraphics().setColor(Color.white);
        bRed = new Button("Red");
        bGreen = new Button("Green");
        bBlue = new Button("Blue");
        bBlack = new Button("Black");
        bWhite = new Button("White");
        chb = new Checkbox("Filled");
        bBlack.addMouseListener(new MyMouseAdapter());
        bWhite.addMouseListener(new MyMouseAdapter());
        bRed.addMouseListener(new MyMouseAdapter());
        bGreen.addMouseListener(new MyMouseAdapter());
        bBlue.addMouseListener(new MyMouseAdapter());
        chb.addMouseListener(new MyMouseAdapter());
        Panel p = new Panel();
        add(p, BorderLayout.SOUTH);
        p.add(bBlack);
        p.add(bWhite);
        p.add(bRed);
        p.add(bGreen);
        p.add(bBlue);
        p.add(chb);
        p.setVisible(true);
    }  
    
    public void paint(Graphics gr){}
    
    public static void main(String[] args){
        Frame fr = new SimpleFrame(" Моя программа");
    }
}



Программка делает то, что делает, никаких других функций и наворотов.

Прошу оценить корявость реализации. Скажем, по шкале от 1 до 10 (1 - фигня, 10 - шедевръ)


ЗЫ: почемуто-иногда не прорисовываются некоторые кнопки. никак не могу понять, почему.
PM MAIL   Вверх
Старовъръ
Дата 16.7.2008, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я покритикую некоторые ошибки. Можно?
Первое замечание: почему бы не использовать компоненты Swing вместо AWT?
Дальше
Код

private int prsdX, prsdY, lastX, lastY;
Думаю лучше было б использовать класс Point в этих целях.
Код

Color.black
Старайся использовать Color.BLACK - константы пишутся с больших букв, а маленькие использовали раньше. Остались они для совместимости.
Код

 class MyMouseAdapter implements MouseListener{
Т.к. ты используешь не все методы этого интерфейса, лучше сделать 
Код

class MyMouseAdapter extends MouseAdapter
И переопределять только нужные тебе методы.
Код

bBlack.addMouseListener(new MyMouseAdapter());
        bWhite.addMouseListener(new MyMouseAdapter());
        bRed.addMouseListener(new MyMouseAdapter());
        bGreen.addMouseListener(new MyMouseAdapter());
        bBlue.addMouseListener(new MyMouseAdapter());
        chb.addMouseListener(new MyMouseAdapter());
Создай один Листнер и кидай во все эти методы, а ты создаешь для каждого отдельный.
Код

setVisible(true)
Это лучше делать в самом конце конструктора. Вдруг будут какие-то тормоза, и сначала появится окно, а потом будут отрисовываться компоненты.
Код

public void paint(Graphics gr){}
Это зачем?

Ну, вроде, ничего не пропустил  smile 
PM MAIL WWW   Вверх
Ratman
Дата 17.7.2008, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо за конструктивную критику

правлю smile
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.0405 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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