Tworzę kilka klas, aby uprościć procesy, takie jak tworzenie GUI, stosowanie ustawień dostępności, rysowanie grafiki itp. I przeszedłem długą drogę; ale miałem pomysł, że byłoby wspaniale, gdyby mógł działać, i zastanawiam się, czy to możliwe.Przekazywanie obiektu o nieznanym typie jako parametru w metodzie Java
Teraz mam klasy „JFrameBuilder”, za pomocą metod takich jak:
/**
* The "addButton" method adds a button to a JFrame
* @param app The parent window (a JFrame)
* @param text The button text
* @param x The x-coordinate where the button should appear
* @param y The y-coordinate where the button should appear
* @param width The width of the button
* @param height The height of the button
* @return A JButton object (it returns an object so programs can manipulate it later)
*/
public JButton addButton(JFrame app, String text, int x, int y, int width, int height) {
try {
JButton button = new JButton();
button.setText(text);
button.setBounds(x, y, width, height);
app.add(button);
System.out.println("\"" + text + "\" button created.");
return button;
}catch(Exception e) {
System.out.println("Something went wrong when creating the \"" + text + "\" button.");
System.out.println(e.getStackTrace());
return null;
}
}
więc w zasadzie wszystko to naprawdę robi jest ustawienie wielu właściwości w jednej metody (co eliminuje potrzebę napisania 10-15 linijek kod na obiekt). Działają świetnie, ale chciałbym je jeszcze bardziej rozwinąć, tam, gdzie metody mogą współpracować z JApplets, JPanels i innymi kontenerami, a także JFrames. W ten sposób mogłem uogólnić klasę z JFrameBuilder do bardziej prostego "AppBuilder", "GUIBuilder" itd. I być w stanie używać go w innych projektach.
Ale aby to zrobić, musiałbym przekazać obiekt o nieznanym typie jako parametr w metodach. Tak więc próbowałem zastąpić "JFrame" przez "Object", następnie używając Stringa, aby zidentyfikować jego typ i na tej podstawie próbowałem dokonać zmian. Jednak wpadłem w kłopoty używając metod takich jak "dodaj"; Myślę, że to dlatego, że Object nie ma metody dodawania (mimo że JPanel był typem obiektu, a JPanel to robi).
Aby nieco wyjaśnić, w zasadzie to, czego potrzebuję, to dowiedzieć się, w którym kontenerze znajduje się przycisk/etykieta/cokolwiek innego ("rodzic"). I do tej pory jedynym sposobem, w jaki to zrobię, jest przekazanie go jako parametru w metodzie; jeśli jest inny sposób, chciałbym się tego nauczyć, ale jeśli nie, najlepiej byłoby przekazanie zmiennej nieznanego typu. W ten sposób w metodzie znajdzie się coś, co pozwoli zidentyfikować typ i oprzeć na nim kolejne działania (na przykład, jeśli można wyświetlić inne obiekty, dodać do niego, a jeśli nie, uchwycić wyjątek).
Sprawdziłem podobne pytania na tej stronie (z którego pochodzi pomysł obiektu), a także wyszukiwałam w Google, ale bez powodzenia. Jak zawsze z pewnością doceniam wszelkie sugestie lub inne pomysły.
Dzięki. :)
Twój JFrame nigdy nie jest używany w metodzie .. i nie zrobić return null w catch catch..i nie używaj 'setBounds' ..spójrz na dziedziczenie huśtawki, które ma wiele poziomów (to nie jest dobre), ale możesz znaleźć "JComponent" – nachokk
Typ parametru zależy od tego, co próbujesz zrobić. Może to być tak podstawowe jak 'Container', lub jeśli okno najwyższego poziomu to typ' Window'. Osobiście używam GUI do tworzenia JPanels, a nie do okien na najwyższym poziomie. W ten sposób mogę dodać JPanele do dodania do dowolnego kontenera, który mi się podoba. Przy okazji 'setBounds (....)'? Nie, nie rób tego. Użyj menedżerów układu. –