Как выделить фигуру на панели для рисования?

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

Хорошо, я попробовал это, и это вроде работает. Кроме того, я могу выбрать несколько фигур, и граница, которая показывает, что он выбран, не появляется вокруг фигуры до тех пор, пока я не изменю переключатели, чтобы сделать что-то еще. Затем появляется выбор. Я не знаю, как это исправить? Я попытался добавить логическое значение, чтобы исправить возможность выбора нескольких фигур, но это не работает. boolean 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;
        }

person Susie    schedule 04.12.2011    source источник


Ответы (1)


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

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

person Hovercraft Full Of Eels    schedule 04.12.2011
comment
Спасибо!! Я попробую. - person Susie; 04.12.2011
comment
@Susie: Пожалуйста. Пожалуйста, возвращайтесь, если вы застряли на каком-либо из этих шагов. - person Hovercraft Full Of Eels; 04.12.2011
comment
Я ценю это! Я немного застрял ... У меня возникают две проблемы, которые я не совсем понимаю. Форма не показывает, что она выбрана, пока я не изменю переключатели и не добавлю что-то еще на холст ... и она выберет более одной фигуры даже с добавленным логическим значением. - person Susie; 05.12.2011
comment
Вы вызываете repaint() из кода MouseListener? В противном случае без дополнительного кода сложно понять, что не так. - person Hovercraft Full Of Eels; 05.12.2011
comment
Я еще не реализовал перетаскивание ... только этот код выбора при нажатой мышке. Я забыл перерисовать и теперь вызываю его после изменения логического значения на true ... но по какой-то причине он все еще не работает. Мне нужно щелкнуть другой переключатель, и тогда появится выбор. - person Susie; 05.12.2011