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

2017-05-11 21:28

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 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
edytowany 4x, ostatnio: furious programming, 2017-05-11 21:42

Pozostało 580 znaków

2017-05-12 01:59
Moderator

Rejestracja: 16 lat temu

Ostatnio: 19 minut temu

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 dupy odpalić za pomocą java cośtam.class? Użyj jakiegoś IDE które ten problem rozwiaże za ciebie...


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
edytowany 1x, ostatnio: Shalom, 2017-05-12 01:59

Pozostało 580 znaków

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