Problem z prostym paintem - jak przekazać zmienne z jednej klasy do drugiej?

0

Hej! Mam problem w prostym programie, który ma być prostym Paintem rysującym figury. Jak na razie udało mi się opracować rysowanie prostokątów lecz problem pojawia się z przekazaniem z Actionlistenera z klasy window informacji do klasy MousePanel o tym jaki rodzaj figury został wybrany. Próbowałem zrobić to jedyną znaną mi metodą poprzez obiekt Window window = new Window(); lecz kompilator nie pozwala na taki zabieg wywalając błędy. Mogę liczyć na jakąś pomoc albo sugestie w jaki sposób mogę to rozwiązać?
Klasa urudzamiająca

import java.awt.EventQueue;

public class Main{

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {

			@Override
			public void run() {
				new Window();
			}
		});
	}
}

Klasa tworząca okienko :

import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JButton;

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


public class Window extends JFrame implements ActionListener{
	JMenuBar menuBar;
	JMenu menuFile, menuTools , menuHelp;
	JMenuItem mOpen, mSave, mExit;
	JMenuItem mInfo;
	JMenuItem mCircle, mRactangle, mPolygon;
	static int i;
	static MousePanel drawArea = new MousePanel();
	
	public Window(){
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible( true );
		setTitle("Paint");
		setSize(1300,900);
		
		menuBar = new JMenuBar();
		menuFile = new JMenu("File");
		
		mOpen = new JMenuItem("Open");
		mSave =  new JMenuItem("Save");
		mExit = new JMenuItem("Exit");
		
		menuFile.add(mOpen);
		menuFile.add(mSave);
		menuFile.addSeparator();
		menuFile.add(mExit);
		
		menuTools = new JMenu("Tools");
		
		mRactangle = new JMenuItem("Ractangle");
		mCircle = new JMenuItem("Circle");
		mPolygon = new JMenuItem("Polygon");
		
		menuTools.add(mRactangle);
		menuTools.add(mCircle);
		menuTools.add(mPolygon);
		
		menuHelp = new JMenu("Help");
		
		mInfo = new JMenuItem("Info");
		
		menuHelp.add(mInfo);
		
		setJMenuBar(menuBar);
		menuBar.add(menuFile);
		menuBar.add(menuTools);
		menuBar.add(menuHelp);
		
		mOpen.addActionListener(this);
		mSave.addActionListener(this);
		mExit.addActionListener(this);
		
		mRactangle.addActionListener(this);
		mCircle.addActionListener(this);
		mPolygon.addActionListener(this);
		
		mInfo.addActionListener(this);
		
		MousePanel panel = new MousePanel();
        this.add(panel);
	}	
	
	public int value(){
		return i;
	}

	public void actionPerformed(ActionEvent e){
		Object zrodlo = e.getSource();
		
		if(zrodlo==mExit){
			System.exit(0);
		}
		else if(zrodlo==mRactangle){
		i=1;
		}
		else if(zrodlo==mCircle){
		i=2;
		}
		else if(zrodlo==mPolygon){
		i=3;	
		}
		
	}
}

oraz ta odpowiadająca za rysowanie

import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.awt.Color;
 
import javax.swing.JPanel;
 
public class MousePanel extends JPanel implements MouseListener, MouseMotionListener {
 
	private static final int WIDTH = 1300;
    private static final int HEIGHT = 900;
	static Window window = new Window();
	private final Color BACK_COLOR = Color.WHITE;
	Graphics2D g2d;
 
    public int xdragged, ydragged, xpressed, ypressed, xreleased, yreleased;
 
	ArrayList<Point> points = new ArrayList<>();
	ArrayList<Point> dimensions = new ArrayList<>();
	ArrayList<String> shapes = new ArrayList<>();
 
    public MousePanel() {
		setPreferredSize(new Dimension(WIDTH,HEIGHT));
		addMouseListener(this);
        addMouseMotionListener(this);
    }
	
    public void mouseDragged(MouseEvent e) {
        System.out.println("mouseDragged");
		xdragged = e.getX();
        ydragged = e.getY();
		repaint();
    }
	
    public void mouseMoved(MouseEvent e) {
    }
 
    public void mouseClicked(MouseEvent e) {
    }
 
    public void mouseEntered(MouseEvent e) {
    }
 
    public void mouseExited(MouseEvent e) {
    }
 
    public void mousePressed(MouseEvent e) {
        System.out.println("mousePressed");
		xpressed = e.getX();
        ypressed = e.getY();
		points.add(new Point(xpressed, ypressed));
    }

    public void mouseReleased(MouseEvent e) {
		xreleased = e.getX();
        yreleased= e.getY();
		dimensions.add(new Point(xreleased,yreleased));
		shapes.add(new String ("prostokat"));
		
    }
	protected void paintComponent(Graphics g) {
		g2d = (Graphics2D) g;
		clear();	
		drawArrayList(g2d);
		if(window.value==1){
		g2d.fillRect(Math.min(xpressed,xdragged),Math.min(ypressed,ydragged),Math.abs(xpressed-xdragged),Math.abs(ypressed-ydragged));
		}
		
    }
	public void clear(){
		g2d.setPaint(Color.white);
		g2d.fillRect(0, 0, getSize().width, getSize().height);
		g2d.setPaint(Color.black);
		repaint();
	}

	private void drawArrayList(Graphics2D g2d) 
	{
		int a, b, c ,d, pom=0;
		String figura;
        for (Point dim : dimensions) //petla po wymiarze figur-wymiarow figor jest tyle co samych figur...
		{
			a=(int) points.get(pom).getX();
			b=(int) points.get(pom).getY();
			c=(int) dim.getX();
			d=(int) dim.getY();
			figura=shapes.get(pom);

		if(figura.equals("prostokat"))
				g2d.fillRect(Math.min(a,c),Math.min(b,d),Math.abs(c-a),Math.abs(d-b));
			else if(figura.equals("kolo"))
				g2d.fillOval(Math.min(a,c),Math.min(b,d),Math.abs(c-a),Math.abs(d-b));
			
			pom++;
        }
		
    }

}

Taki błąd pojawia się przy próbie odpalenia skompilowanego programu. W pliku skompilowanym nie pojawia się plik ze skompilowaną klasą MousePanel

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: MousePanel
        at Main$1.run(Main.java:10)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
        at java.awt.EventQueue.access$500(EventQueue.java:97)
        at java.awt.EventQueue$3.run(EventQueue.java:709)
        at java.awt.EventQueue$3.run(EventQueue.java:703)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.lang.ClassNotFoundException: MousePanel
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 15 more
0

A jak ty to w ogóle kompilujesz i uruchamiasz? Konsolom, jak jakieś zwierze? o_O Bo rozumiesz że jak masz wiele plików to trzeba odpowiednio ustawić classpath i nie da sie tego tak z d**y odpalić za pomocą java cośtam.class? Użyj jakiegoś IDE które ten problem rozwiaże za ciebie...

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