Извините, ребята, я удалил свой пример APPLES и CATS:) Вот обновленная версия моего вопроса!
Я теряю рассудок здесь. Мне нужен кто-то, кто может просветить меня. Я несколько раз пытался объяснить мою проблему. Надеюсь, на этот раз мой вопрос будет легче понять.
В основном у меня есть этот фрейм, и там отображается изображение. Справа есть JList, а внизу внизу есть еще одна панель для JLabels. Вот скринкап моей рамки.
Когда я нажимаю на изображение, появляется JOptionPane, например. И я ввожу свой вклад. Мой JList - это ArrayList, поэтому все, что я вводил, добавляется в JList и JPanel внизу.
Теперь, когда я нахожусь на той части, где я нажал, вы заметили, что квадрат исчез). Он появляется только тогда, когда я нажимаю изображение, и когда я наводил метку внизу. Мои метки, на данный момент - LOLZ NOSE и INPUT HERE.
То, что я хочу сделать, - это когда я наводил курсор на ярлыке, например, INPUT HERE, он снова показывает квадрат, показывая часть, на которую я нажал. Моя проблема теперь, когда я нажимаю на NOSE, который должен показывать квадрат на носовой части и имя NOSE с черным bg, это НЕ ПОКАЗАТЬ. Кроме того, отображается только последний квадрат ярлыка, не обращая внимания на позицию остальных меток.
Как мне получить ярлык, чтобы запомнить позицию щелчка, который я делаю? Люди сказали, что я должен использовать ArrayLists или HashCodes, но я не знаю, как их реализовать. Спасибо всем, кто может помочь.
Изменить: я уже сделал прямоугольник, кстати. Он отображается только для ввода последней метки. Вот некоторые из запрошенных фрагментов кода.
Как я устанавливаю текст в JLabel и обновляю JList:
public void updateLabel(){
StringBuilder text = new StringBuilder(); //creates empty builder, capacity 16
for(Object s: tagModel.toArray()) //returns an array containing the elements of the tagModel
text.append(" " + s);
repaint();
hoverLabel.setText(text.toString()); //returns a String
hoverLabel.addMouseMotionListener(this);
hoverPanel.add(hoverLabel);
}
Мой указатель мыши при нажатии:
@Override
public void mouseClicked(MouseEvent event) {
// TODO Auto-generated method stub
x = event.getX();
y = event.getY();
isRectPresent = true;
repaint();
input = JOptionPane.showInputDialog("Enter tag name:");
if((input != null) && !input.isEmpty()){
tagModel.addElement(input);
}
}
Моя мышьСледующая панель при зависании:
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
xpos = e.getX(); //gets where the mouse moved
ypos = e.getY();
//checks if the mouse is inside the bounds of the rectangle
if (xpos > x && xpos < x + 100 && ypos > y && ypos < y + 100)
isRectPresent = false;
if(e.getSource() == hoverLabel){
isRectPresent = true;
repaint();
}
repaint();
}
Как я рисую:
public void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(image, 0, 0, null);
if(image != null && isRectPresent){
Stroke stroke = g2.getStroke();
g2.setStroke(new BasicStroke(4));
g2.setColor(Color.WHITE);
g2.drawRect(x-50, y-50, 100, 100);
g2.setStroke(stroke);
}else{
if(xpos > x && xpos < x + 100 && ypos > y && ypos < y + 100){
g.setColor(Color.BLACK);
g.fillRect(x-50, y-50, 100, 25);
g.setColor(Color.WHITE);
g.setFont(new Font("Tahoma", Font.BOLD, 12));
g.drawString(input, x-30, y-30);
}
}
}
Если вы хотите, чтобы я добавил еще несколько фрагментов, просто скажите мне!:)