• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Swing rozbicie gui na wiele klas

Object Storage Arubacloud
0 głosów
136 wizyt
pytanie zadane 8 lutego 2022 w Java przez komboboost0 Użytkownik (570 p.)

Cześć.

Pierwszy raz próbuję swoich sił z napisaniem programu z użyciem swinga i napotkałem pewien problem.

Obecnie wygląda to w ten sposób. Chciałbym, aby przyciski po lewej stronie umieszczone w NavigationPanel uruchamiały różne metody w klasie MainPanel, która jest umieszczona w białym polu po prawej. 

MainPanel miałby wyświetlać np. formularz który pozwala wprowadzić dane do programu albo wyświetlać wcześniej wprowadzone dane.

Wszystko przy założeniu że nawigacja po lewej ma być oddzielną klasą od pola które wyświetla rzeczy po prawej. Chcę wiedzieć jak rozbić wszystko na wiele klas, żeby kod był bardziej uporządkowany.

Na koniec żeby metody w MainFrame mogły dodawać obiekty dynamicznie do swojego kontenera.

Main.java

import frame.ProgramFrame;

public class Main {
    public static void main(String[] args) {
        new ProgramFrame();
    }
}

ProgramFrame.java

package frame;

import registerLogic.Register;

import javax.swing.*;
import java.awt.*;

public class ProgramFrame extends JFrame {

    HeaderPanel header = new HeaderPanel();
    FooterPanel footer = new FooterPanel();
    NavigationPanel navigation = new NavigationPanel();
    MainPanel mainPanel = new MainPanel();

    Register reg = new Register();

    public ProgramFrame(){
        // frame options
        this.setLayout(new BorderLayout(3,3));
        this.setTitle("Employee register");
        this.setSize(1024,720);
        this.setVisible(true); // make this visible
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // defines action to X button - default is HIDE_ON_CLOSE
        this.getContentPane().setBackground(Color.black);

        // setting panels
        this.add(header, BorderLayout.NORTH);
        this.add(footer, BorderLayout.SOUTH);
        this.add(navigation, BorderLayout.WEST);
        this.add(mainPanel, BorderLayout.CENTER);

    }
}

NavigationPanel.java

package frame;


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

public class NavigationPanel extends JPanel {

    JButton addDataBtn = new JButton();
    JButton viewDataBtn = new JButton();

    public NavigationPanel(){
        this.setBackground(Color.lightGray);
        this.setPreferredSize(new Dimension(200,100));

        // addData button
        addDataBtn.setBounds(0,0,100,100);
        addDataBtn.setText("Add data");
        addDataBtn.setFocusable(false);
        addDataBtn.addActionListener(NavigationPanel::AddDataBtnAction);
        this.add(addDataBtn);
        // viewData button
        viewDataBtn.setBounds(0,0,100,100);
        viewDataBtn.setText("View data");
        viewDataBtn.setFocusable(false);
        viewDataBtn.addActionListener(NavigationPanel::ViewDataBtnAction);
        this.add(viewDataBtn);
    }

    private static void AddDataBtnAction(ActionEvent e) {
      // ProgramFrame.mainPanel.viewAddData();
    }

    private static void ViewDataBtnAction(ActionEvent e) {
     //   ProgramFrame.mainPanel.ViewDataPanel();
    }
}

MainPanel.java

package frame;

import javax.swing.*;

public class MainPanel extends JPanel {

    public MainPanel(){}

    public void viewAddData(){
// dodanie jakichś przycisków i pól tekstowch
// wywoływanie metod z klasy w polu ProgramFrame.reg;
}

    public void ViewDataPanel(){}
}

 

1
komentarz 8 lutego 2022 przez Oscar Nałogowiec (29,290 p.)

Tak ogólnie w swingu, by reagować na jakąś akcję trzeba dołączyć do obiektu Listener. To są interfejsy i zawsze można do jakiejś klasy dodać implements xxxxListener. Wtedy odpowiednia metoda obiekty zostanie wywołana na skutek akcji.

Do buttonów dodaje się ActionListener.

Poszukaj w dokumentacji (np. na stronach Oracle) jakie metody ma ten interfejs - musisz je zaimplementować.

1 odpowiedź

+1 głos
odpowiedź 9 lutego 2022 przez reaktywny Nałogowiec (40,970 p.)
Cay S. Horstman omawia te tematy dokładnie w swoich książkach do Javy.

Dlaczego uczysz się Swinga, nie lepsza JavaFX??
komentarz 9 lutego 2022 przez komboboost0 Użytkownik (570 p.)
edycja 9 lutego 2022 przez komboboost0
JavaFX coś tam umiem, więc pomyślałem że może warto spróbować czegoś innego. No chyba że JavaFX jest tym najpopularniejszym framworkiem i springa już się raczej nie używa, to chętnie się dowiem czy tak jest.
komentarz 9 lutego 2022 przez Wiciorny Ekspert (269,710 p.)

@reaktywny, w czym lepszse jest JavaFX? :) Bo chyba w nauce... to moze ino prostsze, pomijam fakt ze pewnie masz tez na mysli korzystanie z Scene Buildera z ktorego sie nie korzysta w projektach których na rynku praktycznie tez niema z java fx 

komentarz 9 lutego 2022 przez reaktywny Nałogowiec (40,970 p.)
Pewnie nie we wszystkim jest lepsza, ale jest to zdecydowanie nowszy projekt. Design Swinga (od strony UI) jest trochę staroświecki. A JavaFX to znacznie nowszy, bardziej świeży  projekt, a więc bardziej na czasie. Poza tym masz tutaj FXML oraz gdzieś czytałem, że JavaFX umożliwia lepsze odizolowanie kodu interfejsu od kodu logiki aplikacji.

Podobne pytania

0 głosów
1 odpowiedź 126 wizyt
pytanie zadane 28 czerwca 2020 w Java przez manager96 Bywalec (2,050 p.)
0 głosów
1 odpowiedź 732 wizyt
pytanie zadane 18 lipca 2018 w Java przez SUNBIN Obywatel (1,190 p.)
0 głosów
1 odpowiedź 110 wizyt

92,551 zapytań

141,393 odpowiedzi

319,524 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...