Importowanie klasy z innego package

0

Witam,

po małej wymuszonej przerwie wracam do nauki javy i musze sobie odświeżyć niektóre wiadomości. Postanowiłem zrobić aplikację, której będę używał i która ma możliwość dość sporej rozbudowy. Ale to w sumie nie o tym.
Zastanawiałem się zawsze, jak osiągnąć porządek w pisanej aplikacji. I wymyśliłem sobie, że każdy komponent, np. okno, przyciski będą jako osobne package. I chciałem osiągnąć coś takiego, że zrobie sobie okno i przyciski, i później w oknie importuje jakoś , czy się odwołam do package przyciski i po prostu napiszę:

okno.add(przycisk);

Ale, po add nie mogę wybrać sobie wcześniej stworzonego przycisku.
Próbowałem importować w taki sposób:

import nazwaPackage.NazwaKlasy;

Przejrzałem już trochę stron z podobnymi problemami, ale nie udało mi się tego rozwiązać. Co robię źle?

Kod:

package Book;

import javax.swing.JFrame;
import Buttons.ButtonsApp;

public class BookApp {

	public static void main(String[] args){
	
	JFrame BookWindow = new JFrame();
	BookWindow.setSize(400, 400);
	BookWindow.setVisible(true);
	BookWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
package Buttons;

import javax.swing.JButton;

public class ButtonsApp{

	public void test{
	
	JButton Join = new JButton("Join");
	Join.setSize(50, 50);
}
}
0

Co robisz źle? Nie rozumiesz różnicy między KLASĄ a OBIEKTEM.
Klasa to określenie "typu", kategorii. Obiekt to jest fizyczna reprezentacja. Klasą moze być "Krzesło" a obiektem "Krzesło_na_którym_teraz_siedzisz". A ty próbujesz teraz podstawić przy biurku "kategorię obiektów typu Krzesło" zamiast konkretny obiekt "krzesło ze złamaną nogą".

0

Zastanawiałem się zawsze, jak osiągnąć porządek w pisanej aplikacji. I wymyśliłem sobie, że każdy komponent, np. okno, przyciski będą jako osobne package

Wg mnie zrobisz w ten sposób skrajny antyporządek.

0

@CodeObiect

  1. Nie nazywaj obiektów z dużej litery bo jest to mylące. Konwencja jest taka że klasy dużą, obiekty małą.
public void test(){
 
    JButton Join = new JButton("Join");
    Join.setSize(50, 50);
}

Jeszcze raz mówie: nie rozumiesz co to jest zasięg zmiennej i nie rozumiesz czym sie różni obiekt od klasy. Ta twoja zmienna join jest lokalna dla funkcji i GINIE zaraz po tym jak funkcja się kończy. Jak ty sobie to inaczej wyobrażasz? A jakbym zawołał tą metodę 100 razy to ile byś chciał tych buttonów? Popatrz np. na taki kod w twojej klasie ButtonsApp:

    public void test(String label){
 
    JButton Join = new JButton(label);
    Join.setSize(50, 50);
}

public void wtf(){
    for(int i=0;i<100;i++){
        test(""+i);
    }
}

Ile wg ciebie miałoby powstać buttonów? Do którego miałbym się odnosić za pomocą aliasu ''join"? A teraz pójdźmy o jeden level dalej! Zróbmy taki kod:

public class BookApp {
 
    public static void main(String[] args){
        for(int i=0; i<100;i++){
            ButtonsApp x = new ButtonsApp();
            x.wtf();
        }
    }
}

I co teraz? Bo utworzyłem teraz w pętli 100 obiektów ButtonsApp a każdy z nich w metodzie wtf() tworzy 100 buttonów z różnymi nazwami. Co miałoby zrobić niby ten twój import?

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