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