Я не могу нарисовать несколько линий на JLabel с изображением карты. Я хочу нарисовать несколько линий внутри этого JLabel, но кажется, что всякий раз, когда я нажимаю / рисую новую линию, старая линия, которую я нарисовал, будет удалена. Другими словами, я хочу сохранить постоянство каждой линии, которую я нарисовал. Я ценю вашу помощь. Вот мой рабочий код (разделенный основной класс и класс графического интерфейса).
Основной класс
package MP2;
import java.awt.Color;
import javax.swing.JFrame;
public class Driver {
public static void main(String[]args){
JFrame g = new JFrame();
Gui gui = new Gui();
g.setSize(900,650);
g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
g.add(gui);
g.setVisible(true);
}
}
Класс GUI
package MP2;
import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
public class Gui extends JPanel {
private JLabel mousepanel;
private JLabel statusbar;
int x;
int y;
int xx;
int yy;
;
ArrayList<Shape> shapes = new ArrayList<Shape>();
public Gui(){
setLayout(null);
mousepanel = new JLabel();
mousepanel.setBounds(20,20,500,450);
mousepanel.setIcon(new ImageIcon("C:\\Users\\Dm\\Desktop\\Programs\\Dim\\src\\MP2\\mpmap.png"));
add(mousepanel);
statusbar = new JLabel();
statusbar.setBounds(20, 550, 300, 20);
add(statusbar);
Handlerclass handlerclass = new Handlerclass();
mousepanel.addMouseListener(handlerclass);
mousepanel.addMouseMotionListener(handlerclass);
}
private class Handlerclass implements MouseListener, MouseMotionListener {
public void mouseClicked(MouseEvent e){
statusbar.setText("clicked at "+ e.getX() +" "+ e.getY());
}
public void mousePressed(MouseEvent e){
statusbar.setText("you pressed it at" + e.getX() +" and " + e.getY());
x = e.getX();
y = e.getY();
}
public void mouseReleased(MouseEvent e){
statusbar.setText("you released the mouse at" + e.getX()+ " and "+ e.getY());
xx= e.getX();
yy= e.getY();
validate();
repaint();
}
public void mouseEntered(MouseEvent e){
statusbar.setText("you're at "+e.getX()+" and " +e.getY());
mousepanel.setBackground(Color.red);
}
public void mouseExited(MouseEvent e){
statusbar.setText("....");
mousepanel.setBackground(Color.blue);
}
public void mouseDragged(MouseEvent e){
statusbar.setText("Dragging at" + e.getX() + " and "+ e.getY());
}
public void mouseMoved(MouseEvent e){
statusbar.setText("moving " + "X = "+e.getX() +" Y = "+e.getY());
}
}
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.MAGENTA );
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_IN,1f));
g2d.fillOval(x+15, y+14, 10, 10);
g2d.fillOval(xx+15, yy+15, 10, 10);
g.drawLine(x+20,y+20,xx+20,yy+20);
}
}