Prosty paint w javie zmiana koloru

0

Witam tworzę sobie painta w javie i mam takie pytanko ogólnie linie która jest rysowana w panelu tworzę tak że odczytuję położenie kursora mouseDragged i następnie zbieram te punkty do

 ArrayList<Point>points=new ArrayList<Point>();

a w paintComponent za pomocą pętli for odczytuję współrzędne i rysuję kwadraciki(fillRec) i teraz chciałbym móc zmieniać kolor tej linii ale nie tej już narysowanej tylko tej co dopiero będzie (nacisnę przycisk na toolbarze to wiem jak to zrobić :) ) Głównie chodzi mi o to gdzie przechowywać te punkty i jak to rysować by móc zmieniać kolory teraz funkcja rysunku wygląda tak:

 protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.setColor(Color.WHITE); //wypełnienie tła białym kolorem
        g2d.fillRect(0, 0, WIDTH, HEIGHT); 
        g2d.setColor(Color.BLACK); //zmiana koloru
        drawRectangles(g2d); // wywołanie funkcji do rysowania 
    }
 
    private void drawRectangles(Graphics2D g2d) {
        int x, y;
        for(Point p: points) {
            x = (int)p.getX();
            y = (int)p.getY();
            g2d.fillRect(x, y, 10, 10);
        }
    } 

Gdzieś widziałem że ktoś tworzył jakoś zmienną typu Image i w niej coś robił ale tego nie mogłem zrozumieć bo jeszcze jakoś inaczej deklarował MouseMotionListener();
Z góry bardzo dziękuję za pomoc :)

0

Napisz własną klasę Point

    class Point
    {
        private int x;
        private int y;
        private Color color;
        //--------------------
        public Point(int x,int y,Color color)
        {
            this.x = x;
            this.y = y;
            this.color = color;
        }
        //--------------------
        public int getY() 
        {
            return y;
        }
        //--------------------
        public int getX() 
        {
            return x;
        }
        //-------------------- 
        public Color getColor() 
        {
            return color;
        }        
    }

W metodzie mouseDragged użyj

points.add(new Point(x,y,obowiązującyKolor));

a w pętli rysującej napisz
for(Point p: points) {
x = p.getX();
y = p.getY();
g2d.setColor(p.getColor());
g2d.fillRect(x, y, 10, 10);
}

A przy okazji, zamiast
```java
        g2d.setColor(Color.WHITE); //wypełnienie tła białym kolorem
        g2d.fillRect(0, 0, WIDTH, HEIGHT);

wystarczy w konstruktorze panelu napisać

setBackground(Color.WHITE);

wtedy pomalowaniem tła na biało zajmie się super.paintComponent.

0

Wielkie dzięki. Jak zmienną kolor powiążę z przyciskiem odpowiedzialnym za kolor to nie będzie problemu ?

1

Zależy jak powiążesz, ale nie powinno być.
Ja wiążę tak:

    private Color color = new Color(110,6,8); //domyślny kolor startowy
    private JButton chooseColor = new JButton(new ImageIcon(Painter.class.getResource("resources/Colors.gif")));
    private SmallColoredPanel sample = new SmallColoredPanel();

obsługa kliknięcia w przycisk chooseColor wygląda tak:

            Color color = JColorChooser.showDialog(this,"Wybierz",this.color);
            if (color != null)
            {
                this.color = color; 
                sample.repaint();
            }

dodawanie punktu

points.add(new Point(x,y,color));

panelik demonstrujący wybrany kolor

    class SmallColoredPanel extends JPanel
    {
        public SmallColoredPanel()
        {
            setPreferredSize(new Dimension(50,20));
            setMaximumSize(new Dimension(50,20));
            setBorder(BorderFactory.createLineBorder(Color.BLACK));
        }
        //--------------------
        public void paintComponent(Graphics g)
        {
            g.setColor(color);
            g.fillRect(0,0,getSize().width-1,getSize().height-1);        
        }
    }

Żeby pole color było widoczne, to klasy Point i SmallColoredPanel są klasami wewnętrznymi.

0

@bogdans A powiedz czemu mi w ToolBar jak dodaję actionListener wywala błąd
<ort> The method addActionListener(ToolBar) is undefined for the type </ort>

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JToolBar;

public class ToolBar extends JToolBar implements ActionListener{
	JButton czerwony,niebieski;
	public ToolBar(){
		super("Przybornik");
		czerwony=new JButton("Czerwony");
		niebieski=new JButton ("Niebieski");
		setFocusable(true);
		addActionListener(this);
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		
	}

}
 

EDIT:
Stworzyłem klasę przycisk która dziedziczy po JButton i tam dodałem wywołanie okna koloru

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JColorChooser;
import javax.swing.JButton;

public class Color extends JButton implements ActionListener{
	Color kolorek;
	public Color(){
		super ("Wybierz kolor");
		addActionListener(this);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		Color color= JColorChooser.showDialog(this,"Wybierz",kolorek);
		 if (color != null)
         {
             kolorek = color; 
         }
	}
	

}

i wywala błąd The method showDialog(Component, String, Color) in the type JColorChooser is not applicable for the arguments (Color, String, Color)

1
  1. Absurdalnie wybierasz nazwy klas, w stworzonej przez Ciebie klasie Color nazwa Color, w zależności od wiersza, oznacza albo Twoją klasę Color albo klasę biblioteczną z pakietu java.awt.*. Pogubisz się w tym, a być może kompilator też się pogubi.
  2. Argument this jest w tym miejscu trochę bez sensu, zamień go na null.
0

Kurczę wszystko ładnie działa prawie tak jak chciałem ale prawie dlatego że mam problem z kolorem trochę zmieniłem Twój przykład bo zmienną color która przechowuje wartość koloru punktu mam w ToolBar-ze czyli w innej klasie a żeby korzystać ze zmiennej która jest w innej klasie muszę utworzyć obiekt tej klasy no i to zrobiłem a program sypie mi błędy gdy do ArrayList przesyłam tylko kolor czarny (zadeklarowany w kodzie) to działa ale jak już wybiorę zmienną to nie :(

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JToolBar;

public class ToolBar extends JToolBar implements ActionListener{
	private JButton kolor;
	public Color color=new Color(0,0,0);
	public ToolBar(){
		super("Przybornik");
		setFloatable(false);
		setPreferredSize(new Dimension (500,50));
		setFocusable(true);
		kolor=new JButton ("Wybierz kolor");
		kolor.addActionListener(this);
		add(kolor);
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		Color color=JColorChooser.showDialog(null,"Wybierz",this.color);
		if(color!=null){
			this.color=color;
			kolor.setBackground(color);
			if(color.getRed()==0 && color.getGreen()<=90 && color.getBlue()<=255){
				kolor.setForeground(Color.WHITE);
			}
			else {
				kolor.setForeground(Color.BLACK);
			}
		}
	}

}
 
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;

import javax.swing.JPanel;

public class Panel extends JPanel implements MouseListener, MouseMotionListener{
	ArrayList <Points> punkty=new ArrayList<Points>();
	int x,y;
	ToolBar kit; // tworzę obiekt klasy ToolBar
	public Panel()
	{
		setPreferredSize(new Dimension (500,400));
		setBackground(Color.WHITE);
		addMouseListener(this);
		addMouseMotionListener(this);
		
	}

	@Override
	public void mouseDragged(MouseEvent e) {
		// TODO Auto-generated method stub
		x=e.getX();
		y=e.getY();
		punkty.add(new Points(x,y,kit.color)); // a tu z niego korzystam kit.color
		repaint();
	}

	@Override
	public void mouseMoved(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e) { 
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	public void paintComponent (Graphics g){
		super.paintComponent(g);
		Graphics2D g2d=(Graphics2D) g;
		int x,y;
		for (Points p:punkty){
			g2d.setColor(p.getColor());
			g2d.fillRect(p.getX(), p.getY(), 10, 10);
			System.out.println("kot");
		}
	}
}

 

a klasa punkt wygląda tak jak sugerowałeś

import java.awt.Color;

public class Points {
	public int x,y;
	public Color color;
	
	public Points (int x, int y, Color color){
		this.x=x;
		this.y=y;
		this.color=color;
	}

//----------------------
	public int getX(){
		return x;
	}
//----------------------
	public int getY(){
		return y;
	}
//----------------------
	public Color getColor(){
		return color;
	}
}
 

zmienna color w toolbar-ze jest publiczna więc nie broni jej dostępu

0

żeby korzystać ze zmiennej która jest w innej klasie muszę utworzyć obiekt tej klasy no i to zrobiłem

Pokaż miejsce, w którym to zrobiłeś.

1

Wtedy utworzysz obiekt, ale to będzie złe rozwiązanie. Ty już gdzieś utworzyłeś obiekt klasy ToolBar, pewnie ten obiekt wyświetlasz, w tym obiekcie użytkownik wybrał kolor. Metoda mouseDragged powinna używać tego właśnie obiektu, a nie nowo utworzonego w klasie Panel.

public class Panel extends JPanel implements MouseListener, MouseMotionListener{
    ArrayList <Points> punkty=new ArrayList<Points>();
    int x,y;
    ToolBar kit;
    public Panel(ToolBar kit)
    {
        this.kit = kit;
        setPreferredSize(new Dimension (500,400));
        ...

Musisz też odpowiednio zmienić kod w miejscu wywołania konstruktora klasy Panel.
A przy okazji

  • zmienna kit w klasie ToolBar jest protected, nie public.
  • w standardowej bibliotece Javy (pakiet java.awt.) istnieje klasa o nazwie `Panel.
0

W Frame utworzyłem obiekt klasy Panel i ToolBar (tak jak mi w innym temacie doradziłeś) czyli w klasie Frame muszę utworzyć obiekt klasy Panel w ten sposób by przesłać do niego utworzony już obiekt ToolBar. Oki to sobie poprawie kod dzięki wielkie za pomoc :)

0

A jeszcze takie pytanko nie wiesz jakiej metody ten ktoś może używać w tym filmiku że jak rysuje ołówkiem linie to mu nie rwie ?

Jak mam fillRect i za szybko będę ruszał myszą to linia jest przerywana
albo co Ty używasz

1

Jak użytkownik "chwyci" ołówek, to tworzę nową krzywą. Nie jest to konieczne, ale bardzo ułatwia implementację funkcji: usuń to co ostatnio narysowałem.

curve = new ColoredCurve(color,currentWidth);

Krzywa przechowuje informację o grubości i kolorze linii oraz kolekcję punktów tworzących te linię.

import java.awt.*;
import java.util.*;

public class ColoredCurve extends ColoredFigure
{
    private Color color;
    private ArrayList<Point> points = new ArrayList<Point>();
    private int width = 0;
    ...
    public void add(Point point)
    {
        points.add(point);
    }
    ...
}

Klasa Point jest z pakietu java.awt.
Podczas ciągnięcia (przesuwania ołówka) dodawane są punkty

curve.add(evt.getPoint());

Samo rysowanie krzywej wygląda tak:

                    g2d.setColor(curve.getColor());
                    int width = curve.getWidth();
                    Stroke stroke = new BasicStroke(width);
                    g2d.setStroke(stroke);
                    ArrayList<Point> points = curve.getPoints();
                    for(int j=0;j<points.size()-1;j++)
                    {
                        Point point = points.get(j);
                        Point nextPoint = points.get(j+1);                
                        g2d.drawLine(point.x,point.y,nextPoint.x,nextPoint.y);
                    }
0

Właśnie kombinowałem z drawLine ale wyszły ładne "trójkąciki" już wiem czemu użyłem pętli for each i namotałem z punktami zamiast prostej pętli for :)

0

Nie mogę wpaść na pomysł jak zrobić ten efekt że jak ktoś narysuje jedną linię i chce narysować drugą to rysuje w nowym miejscu (tworzy drugą krzywą) jak tworzenie krzywej

line=new PointLine(Color.BLACK,4); 

dam pod wciśnięcie ołówka to ta stara się usuwa nie wiem jak zrobić ten przeskok jednego punktu

kurczę i nie wiem czemu w panelu muszę mieć tworzenie nowej krzywej w kodzie dwa razy bo inaczej nie działa

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Stroke;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;

import javax.swing.JPanel;

public class MyPanel extends JPanel implements MouseListener,MouseMotionListener{
	
	private boolean ifReleased;
	private MyToolBar kit;
	private int x,y;
	private static final int HEIGHT=900;
	private static final int WIDTH=1500;
	ArrayList<PointPen> points =new ArrayList<PointPen>();
	PointLine line=new PointLine(Color.BLACK,2); //tu musi być utworzenie nie mogę w tej linii napisać tylko PointLine line;
	
	
	public MyPanel(MyToolBar kit){
		this.kit=kit;
		setBackground(Color.WHITE);
		setPreferredSize(new Dimension(WIDTH,HEIGHT));
		addMouseListener(this);
		addMouseMotionListener(this);
		
	}
	//-----------  end of constructor  ---------------

	@Override
	public void mouseDragged(MouseEvent e) {
		// TODO Auto-generated method stub
		
		if (kit.pencil){
			line.add(e.getPoint());
			repaint();
		}
		else if (kit.pen){
			x=e.getX();
			y=e.getY();
			points.add(new PointPen(x,y,kit.color));
			repaint();
		}
		
	}

	@Override
	public void mouseMoved(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		/*x=e.getX();
		y=e.getY();
		points.add(new PointPen(x,y,kit.color));
		repaint();*/
		 
		if (kit.pencil){
			line=new PointLine(kit.color,4); // a tu drugi raz utworzenie 
			line.add(e.getPoint());
			repaint();
		}
		else if (kit.pen){
			x=e.getX();
			y=e.getY();
			points.add(new PointPen(x,y,kit.color));
			repaint();
		}
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	
	protected void paintComponent(Graphics g){
		super.paintComponent(g);
		Graphics2D g2d=(Graphics2D) g;
		draw(g2d);
	}
	
	private void draw(Graphics2D g2d){
		
			ArrayList<Point> pkt=line.getPoint();
			g2d.setColor(line.getColor());
			int width=line.getWidth();
			Stroke stroke=new BasicStroke(width);
			g2d.setStroke(stroke);
			for (int i=0;i<pkt.size()-1;i++){
				Point point1=pkt.get(i);
				Point point2=pkt.get(i+1);
				g2d.drawLine(point1.x, point1.y, point2.x, point2.y);	
			}
			
			int x,y;
			for (PointPen p:points){
				g2d.setColor(p.getColor());
				
				x=p.getX();
				y=p.getY();
				g2d.fillOval(x, y, 30, 30);
				
		}
		
	}
	
}

 
1

Musisz mieć kolekcję krzywych, np. ArrayList<PointLine> pointLines a w metodzie paintComponent rysować krzywe w pętli:

        super.paintComponent(g);
        Graphics2D g2d=(Graphics2D) g;
        for(PointLine line: pointLines)
        {
            draw(g2d, line); 
        }
0

Kurczę działa :D zrobiłem trochę inaczej klasę z punktami linii niż poradziłeś bo miałem problem żeby zrobić kolekcję krzywych
Może się komuś przyda mój sposób
A więc:

  1. Tworzymy klasę która będzie przechowywała punktu rysowanych linii (u mnie PointLine)
 import java.awt.Color;
import java.awt.Point;
import java.util.ArrayList;

public class PointLine {
	private Color color; // kolor linii
	private int width=0; // szerokość linii
	public Point pointS; // punkt startowy
	public Point pointE; // punkt końcowy
	
	public PointLine(Color color, int width, Point pointS, Point pointE){ // konstruktor 
		this.color=color;
		this.width=width;
		this.pointS=pointS;
		this.pointE=pointE;
		
	}
	
	public int getWidth(){ // zwrócenie szerokości
		return width;
	}
	
	public Color getColor(){ // zwrócenie koloru
		return color;
	}
	
	public Point getPointS(){ // zwrócenie punktu startowego
		return pointS;
	}
	
	public Point getPointE(){ // zwrócenie punktu końcowego
		return pointE;
	}
}
  1. W panelu w którym będziemy rysować deklarujemy i tworzymy obiekt ArrayList i argumentami będą typy PointLine
ArrayList<PointLine> linePoints=new ArrayList<PointLine>(); 
  1. Oraz tworzymy zmienne globalne punktu początkowego i końcowego
private Point pointS,pointE; 
  1. W metodzie mousePressed ustalamy wartość punktu startowego
pointS=e.getPoint();
repaint(); //odświeżamy widok
  1. W metodzie mouseDragged ustalamy wartość punktu końcowego tworzymy nowy wiersz w ArrayList oraz do punktu startowego przypisujemy wartość punktu końcowego i odświeżamy widok
pointE=e.getPoint();
			linePoints.add(new PointLine(kit.color,4,pointS,pointE));
			pointS=pointE;
			repaint(); 
  1. Teraz czysta formalność czyli rysowanie
for (PointLine l:linePoints){ //pętla for each
			g2d.setColor(l.getColor()); // ustawienie koloru linii
			g2d.setStroke(new BasicStroke(l.getWidth())); // ustawienie szerokości linii
			Point pointS=l.getPointS(); // wiecie co to :)
			Point pointE=l.getPointE(); // i to też
			g2d.drawLine(pointS.x, pointS.y, pointE.x, pointE.y); // i rysowanie linii o podanych współrzędnych
		} 
0

Stworzyłem sobie ołówek pędzel i gumkę i mam problem że jak coś namaluję ołówkiem to pędzel mi po tym porysuje ale jak chcę porysować po pędzlu ołówkiem to już ołówek rysuje pod pędzlem, tak samo mam z gumką ona tak jakby była na samej górze w hierarchii bo po niej nic nie idzie namalować dlaczego tak się dzieje ??
wklejam kod panelu bo tu to wszystko się rysuje

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;

import javax.swing.JPanel;

public class MyPanel extends JPanel implements MouseListener,MouseMotionListener{
	
	private MyToolBar kit;
	private int x,y;
	private Point pointS,pointE,pointSR,pointER;
	private static final int HEIGHT=900;
	private static final int WIDTH=1500;
	ArrayList<PointPen> points =new ArrayList<PointPen>();
	ArrayList<PointLine> linePoints=new ArrayList<PointLine>();
	ArrayList<PointRubber> rubberPoints=new ArrayList<PointRubber>();
	
	
	public MyPanel(MyToolBar kit){
		this.kit=kit;
		setBackground(Color.WHITE);
		setPreferredSize(new Dimension(WIDTH,HEIGHT));
		addMouseListener(this);
		addMouseMotionListener(this);
		
	}
	//-----------  end of constructor  ---------------

	@Override
	public void mouseDragged(MouseEvent e) {
		// TODO Auto-generated method stub
		
		if (kit.pencil){
			pointE=e.getPoint();
			linePoints.add(new PointLine(Color.BLACK,4,pointS,pointE));
			pointS=pointE;
			repaint();
		}
		else if (kit.pen){
			x=e.getX();
			y=e.getY();
			points.add(new PointPen(x,y,Color.BLUE));
			repaint();
		}
		else if (kit.rubber){
			pointER=e.getPoint();
			rubberPoints.add(new PointRubber(10,pointSR,pointER));
			pointSR=pointER;
			repaint();
		}
		
	}

	@Override
	public void mouseMoved(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		 
		if (kit.pencil){
			pointS=e.getPoint();
			repaint();
		}
		else if (kit.pen){
			x=e.getX();
			y=e.getY();
			points.add(new PointPen(x,y,kit.color));
			repaint();
		}
		if (kit.rubber){
			pointSR=e.getPoint();
			repaint();
		}
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	
	protected void paintComponent(Graphics g){
		super.paintComponent(g);
		Graphics2D g2d=(Graphics2D) g;
		draw(g2d);
	}
	
	private void draw(Graphics2D g2d){
		
		//-----------  pencil  ---------------
		for (PointLine l:linePoints){ //pętla for each
			g2d.setColor(l.getColor()); // ustawienie koloru linii
			g2d.setStroke(new BasicStroke(l.getWidth())); // ustawienie szerokości linii
			Point pointS=l.getPointS(); // wiecie co to :)
			Point pointE=l.getPointE(); // i to też
			g2d.drawLine(pointS.x, pointS.y, pointE.x, pointE.y); // i rysowanie linii o podanych współrzędnych
		}
		
		
		//-----------  pen  ---------------	
		int x,y;
		for (PointPen p:points){
			g2d.setColor(p.getColor());
			x=p.getX();
			y=p.getY();
			g2d.fillOval(x, y, 30, 30);
				
		}
		
		//-----------  rubber ---------------
		for (PointRubber r:rubberPoints){
			g2d.setColor(r.getColor());
			g2d.setStroke(new BasicStroke(r.getWidth()));
			Point pointS=r.getPointS();
			Point pointE=r.getPointE();
			g2d.drawLine(pointS.x, pointS.y, pointE.x, pointE.y);
		}
	}
	
}
 
0

Musisz wszystkie obiekty przechowywać w jednej kolekcji.

    private void draw(Graphics2D g2d){
 
        for (Figure : allFigures){
            if(l instanceof PointLine){
                g2d.setColor(l.getColor()); // ustawienie koloru linii
                g2d.setStroke(new BasicStroke(l.getWidth())); // ustawienie szerokości linii
                Point pointS=l.getPointS(); // wiecie co to :)
                Point pointE=l.getPointE(); // i to też
                g2d.drawLine(pointS.x, pointS.y, pointE.x, pointE.y); // i rysowanie linii o podanych współrzędnych
            }
            if(l instanceof PointPen){
            ...
        }
    }
0

Czyli jak mam arrayList klasy points linepoint penline to mam to wszystko zgarnąć do jedej klasy allfigures i tej klasy mam utworzyć arrayList? Trochę mam problem z tym instanceof oraz jak ma wyglądać allfigures by wykorzystać instanceof

1

Spróbuj tak;

public interface Figure{
}
...
public class PointLine implements Figure{
//reszta definicji bez zmiany
...
ArrayList<Figure> allFigures = new ArrayList<Figure>();
...
        if (kit.pencil){
            pointE=e.getPoint();
            allFigures.add(new PointLine(Color.BLACK,4,pointS,pointE));
            pointS=pointE;
            repaint();
        }

1 użytkowników online, w tym zalogowanych: 0, gości: 1