Как выбрать фигуру на панели рисования? - PullRequest
1 голос
/ 04 декабря 2011

Я создаю программу, в которой я могу рисовать различные фигуры на холсте. Я хочу добавить кнопку, которая после нажатия позволяет мне выбрать фигуру, а затем перетащить / перевести ее в другое место на холсте. Какова основная концепция реализации этого? Когда я нажимаю на форму, чтобы выбрать ее, я хочу как-то добавить границу вокруг нее, чтобы показать, что она выбрана.

Хорошо, я попробовал это, и это отчасти работает. За исключением того, что я могу выбрать несколько фигур, и граница, которая показывает их выделение, не появляется вокруг фигуры, пока я не изменю переключатели, чтобы сделать что-то еще. Затем появляется выбор. Я не уверен, как это исправить? Я попытался добавить логическое значение, чтобы исправить возможность выбора нескольких фигур, но это не работает. Логическое значение isSelected первоначально установлено в false. Я не понимаю, почему границы цвета / ширины не появляются автоматически при щелчке мыши.

    public void mousePressed(MouseEvent e) {
        if ((_buttonNumber == 0) || (isSelected)) {
            for(int i=0; i<_storedShapes.size(); i++) {
                _storedShapes.elementAt(i).contains(e.getPoint());
                _storedShapes.elementAt(i).setBorderWidth(10);
                _storedShapes.elementAt(i).setBorderColor(Color.BLACK);
                isSelected = true;
            }
        }
        else {
            isSelected = false;
        }

1 Ответ

1 голос
/ 04 декабря 2011

Разбейте этот общий проект на маленькие шаги и решите каждый из них в отдельности и по отдельности.Сначала выясните, как выбрать фигуру из нескольких фигур.Обычно я делал это, удерживая свои Shapes в ArrayList, затем в методе MouseListener mousePressed, просматривая список и проверяя, есть ли Shape contains(...) Point мыши.

Для перетаскивания,вы будете использовать MouseMotionListener (два слушателя могут быть объединены в один класс, расширяющий MouseAdapter), а затем переместите выбранную фигуру в методе mouseDragged.

...