Witam, czy umieszczenie ciał metod w interface jest sprzeczne z zasadami dobrego programowania? Pytanie odnosi się do metod używanych przy budowie layoutu a także do takich, które wstawiają konkretny element jako pierwszy w każdym oknie. Jeśli nie to czy istnieje inny sposób na ograniczenie ilości kodu żeby nie definiować tych samych metod w każdej klasie?
imo wrzucanie jakiejkolwiek logiki do interfejsu jest zlym pomyslem bo pokazuje i narzuca implementacje, powstaja dziwne zaleznosci ktore pozniej ciezko ogarnoac i ew. wycofac.
od tego sa klasy abstrakcyjne i/lub metody statyczne
ok, juz czaje, chodzi o trzymanie w interfejsie uzytkownika nie w interface
:)
Co do metody statycznej to nie mam pomysłu gdzie mógłbym ją umieścić, żeby miały do niej dostęp wszystkie klasy z oknami.
w nowej klasie? np:
public final class WindowUtils
{
public static void Method1()
{
}
}
i uzywac potem w ten sposob:
WindowUtils.Method1();
Chodzi o to, że klasa w której definiowane jest okno nie może dziedziczyć z klasy abstrakcyjnej bo dziedziczy już z JFrame
Ale przed chwilą mówiłeś że chcesz to powielać w róznych miejscach więc czemu nie zrobisz bazowej klasy dziedziczącej z JFrame, tam wrzucisz swoje wspólne metody a potem twoje pozostałe okna będą dziedziczyć z tej klasy a nie z JFrame bezpośrednio. Przykład:
class GenericStackPanel extends JPanel {
GenericStackPanel(int axis) {
layoutComponents(axis);
}
private void layoutComponents(int axis) {
setLayout(new BoxLayout(this, axis));
}
}
public class VerticalStackPanel extends GenericStackPanel {
public VerticalStackPanel() {
super(BoxLayout.Y_AXIS);
}
}
public class HorizontalStackPanel extends GenericStackPanel {
public HorizontalStackPanel() {
super(BoxLayout.X_AXIS);
}
}
class MojPanel extends HorizontalStackPanel{
// bla bla bla
}
Alternatywnie masz statyczne utilsy, factory i delegacje.
Spróbowałem z final class i metodą statyczną i wszystko działa, ale mam sporo wywołań tych metod (do każdego panelu i komponentu) i z "WindowUtils.Method1();" kod wydaje się być mniej przejrzysty.
Ale przed chwilą mówiłeś że chcesz to powielać w różnych miejscach więc czemu nie zrobisz bazowej klasy dziedziczącej z JFrame
Z braku doświadczenia nie wpadłem na to:) To mój pierwszy większy projekt i pierwszy raz mój program będzie miał więcej niż jedno okno:) Zrobiłem już odpowiednią klasę i wygląda na to, że problemu już nie ma:) Dziękuję za wszystkie odpowiedzi