Budowa aplikacji

0

Stworzyłem prosty projekt aplikacji okienkowej, zawierającą klasę główną x, z niej wywoływane jest tworzenie okna (klasa Window), w której z kolei tworzone jest menu. Teraz podczas wybrania z menu opcji New Project tworzony został by nowy projekt, tylko że:

  • gdzie przechowywać klasę z aktualnym projektem (gdzie ta zmienna? klasa główna, klasa Window czy coś innego?)
  • jeżeli ta klasę będę przechowywać w klasie głównej, to jak odwoływać się do niej z klasy Window?

Proszę o dokładniejsze wskazówki, po raz pierwszy programuję obiektowo, ogarniam mniej więcej o co tu chodzi ale jakoś nie mogę rozwiązać tego problemu.

0

Możesz pokazać kod bo nie bardzo cię rozumiem z tym:
"Teraz podczas wybrania z menu opcji New Project tworzony został by nowy projekt, tylko że:

  • gdzie przechowywać klasę z aktualnym projektem (gdzie ta zmienna? klasa główna, klasa Window czy coś innego?)"
    Chodzi ci o IDE czy o dostęp do zmiennych klasy Window?
0

Żaden związek z IDE w którym robię. Tu chodzi o kod programu, który ma na razie przypominać IDE (można tworzyć projekty, zapisywać, edytować itd.). Chodzi mi o to, że w tym programie będę mógł utworzyć nowy projekt po wybraniu odpowiedniej opcji z menu. Jednak jeżeli wybiorę tą opcję, to gdzieś muszę utworzyć obiekt tego projektu.

package algobox;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class AlgoPlus
{

    public static void main(String[] args)
    {
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Dimension screenSize = toolkit.getScreenSize();
        
        Window appWindow = new Window(screenSize.width, screenSize.height);
        appWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             
        appWindow.show(); 
    }
}
package algobox;

import java.awt.Container;
import java.awt.event.ActionEvent;
import javax.swing.*;

class Window extends JFrame
{
    public Window(int width, int height)
    {
        setTitle("AlgoPlus");
        setSize(width, height);
        setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH);

        Container container = getContentPane();
        
        // Menu
        JMenu menuFile = new JMenu("File");
        JMenuItem menuFileNew = new JMenuItem("New Project", new ImageIcon("icons/newFile.png"));
                menuFileNew.addActionListener(new 
                AbstractAction("New Project")
                {
                    public void actionPerformed(ActionEvent event)
                    {
                            
                    }
                }
         );
        
		// tutaj reszta menu
    }
}
package algobox;

public class Project
{
    public Project(String n, String sD)
    {
        name = n;
        saveDir = sD;
        wasChanged = true;
    }
    
    public boolean wasChanged()
    {
        return wasChanged;
    }
    
    private String name;
    private String saveDir;
    private boolean wasChanged;              
}

Tylko gdzie mam wcisnąć to tworzenie klasy, jak mają odbywać się relację w tym programie?

0

Nie chcę zabrzmieć zbyt banalnie ale tworzysz instancję klasy Project w metodzie actionPerformed().
Potem na rzecz utworzonego obiektu wywołujesz metody czy ustawiasz zmienne poprzez notacje z kropką ale to chyba wiesz.
I zmień show() na setVisible() - show jest deprecated.

Nie zauważyłem że masz klasę project w nowym package'u ale powinno być tak samo.

0

To nawet wskazane żebyś brzmiał banalnie.. pierwszy raz mam kontakt z językiem zorientowanym obiektowo.
Mógłbyś mi pokazać przykład tej instancji?

Dodatkowo jak stworzę obiekt klasy Project przed tym menu, i w actionPerformed użyję metody wasChanged otrzymuję taki błąd:
local variable is accessed from within inner class needs to be declared as final

zdeklarowanie jako final oczywiście nie wchodzi w grę..

0

Instancja klasy to to samo co obiekt klasy.
Powinno to być coś takiego:

Project project = new Project(bla,bla); // tak zwana instancja klasy lub obiekt

W actionPerformed // jak się nie mylę


project.wasChanged();
 

Nie wiem czy zadziała nie sprawdzałem ale powinno jak nie to myśl :)

0

No dobra, tylko jak stworzę taką instancję klasy to nie będzie ona dostępna tylko w tym actionPerformed?

Poza tym, nie działa. Zmieniłem klasę Project tak aby domyślnie ustawiała wasChanged na true, w actionPerf~ wpisałem:

                    public void actionPerformed(ActionEvent event)
                    {
                       Project project = new Project("", "");
                       if (project.wasChanged())
                       {
                           System.exit(0);
                       }
                           
                    }

I teoretycznie po wybraniu z menu programu opcji "New Project" - program powinien się zamykać, czego nie robi..

Widzę też że taki sposób nie ma sensu. Zna ktoś miejsce gdzie mogę zobaczyć source code programu działającej na podobnej zasadzie?

0

przeleć debuggerem. Zastaw się w tym action listenerze i sprawdź czy w ogóle "wchodzi" w tego if'a.

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