Problem z przekazaniem danej w prostym paincie - Java

Odpowiedz Nowy wątek
2017-05-11 18:44

Rejestracja: 2 lata temu

Ostatnio: 1 rok temu

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 lecz kompilator nie pozwala na taki zabieg wywalając 15 błędów. 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++;
        }

    }

}

Pozostało 580 znaków

2017-05-11 20:05

Rejestracja: 2 lata temu

Ostatnio: 1 rok temu

0
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

Program się kompiluje ale wywala taki błąd przy próbie uruchomienia.

Pozostało 580 znaków

Odpowiedz

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