Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Lepszy odpowiednik Swinga - JavaFX.


Rekomendowane odpowiedzi

Opublikowano

Od pewnego czasu zarzuciłem zupełnie Swinga na rzecz zupełnie innej biblioteki graficznej - JavaFX. Daje ona dużo więcej możliwości, pozwala na tworzenie dużo lepszych gui. Masz tu przykłady:

 

FXExperiencePlayer-BG-300x190.pngjavafx.jpg

 

 

Oczywiście nie odrazu takie rzeczy się tworzy, potrzeba do nich też wielkich umiejętności graficznych, ale przyznasz, że Swing takich możliwości nie daje.

 

Jak tego używać?

Zakładam, że korzystasz z Netbeans. Jeśli używasz innego IDE, to ściągnij Netbeans lub poszukaj, jak używać fx w twoim IDE. Projekt tworzysz: File -> New Project -> JavaFX -> JavaFX Application. Wygenerowaną klasę usuń.

 

Teraz, po utworzeniu projektu należy utworzyć nową klasę i rozszerzyć nią klasę Application z pakietu javafx.application. Teraz trzeba utworzyć metodę main i start(Stage primaryStage). Metoda start przysłania tą samą metodę z klasy Application. W metodzie main wpisujesz launch(args), czym uruchamiasz metodę start. Kod wygląda tak:

 

 

public class Klasa extends Application {

@Override
public void start(Stage primaryStage) {

}

public static void main(String[] args) {
launch(args);
}

}

 

Teraz przystępujesz do tworzenia GUI. primaryStage jest odpowiednikiem swingowego JFrame. Aby dodawać różne komponenty (w fx tzw. Kontrolki, tak od teraz będę na nie mówił) musisz utworzyć odpowiednik swingowego Panelu. Najlepiej niech będzie to obiekt klasy Pane. Tworzysz go i nazywasz root, będzie to twój główny 'parent' (z klasy Parent dziedziczą wszystkie klasy, które stanowią odpowiednik Panelu). Teraz możesz utworzyć przycisk, napis, checkboxa, liste, etc. Utwórz przycisk i napis. Zacznij od przycisku. Tworzysz obiekt klasy Button. Jako argument jego konstruktora dajesz to, co ma być na nim napisane. Przykładowo utworzysz przycisk, który ma zmienić treść naszego napisu. Nazwij go jakoś i umieść na nim jakiś napis ( Button nazwa = new Button("jakis napis") ) Możesz teraz ustalić jego wielkość(nazwa.setMinSize(w, h) ) lub położenie (

btn.setLayoutX(x) i btn.setLayoutY(y) ). Aby dodać do niego listener używasz metody przycisk.setOnAction w taki sposób:

btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
//kod wykonywany po przycisnieciu przycisku
}
});
 

Ale przed tym musimy utworzyć napis - obiekt klasy Label. Tworzymy go i jego tekst możemy ustalić przez konstruktor - final Label nazwa = new Label("tekst"); (myślę, że większość osób wie dlaczego musi być tam modyfikator final, a nawet jeśli nie, to nie jest to istotne) Jego położenie ustawiamy w identyczny sposób jak przycisku. Teraz utwórz ten listener, i w jego kodzie użyj metody napis.setText("nowy tekst"). Do naszego Pane o nazwie root można dodać kontrolki przy pomocy metody getChildren().add(nazwaKontrolki) lub getChildren.addAll(nazwaKontrolki, nazwaInnejKontrolki itd).Kod w tym momencie może wyglądać tak:

 

 

public class Klasa extends Application {
    
    @Override
    public void start(Stage primaryStage) {
        Pane root = new Pane();
        Button btn = new Button("Przyciśnij mnie!");
        btn.setMinSize(100, 30);
        btn.setLayoutX(100);
        btn.setLayoutY(100);
        final Label lbl = new Label("Napis");
        lbl.setLayoutX(50);
        btn.setOnAction(new EventHandler<ActionEvent>() {
            
            @Override
            public void handle(ActionEvent event) {
               lbl.setText("Inny napis");
            }
        });

        root.getChildren().addAll(lbl, btn);


    }

    public static void main(String[] args) {
        launch(args);
    }
    
}

 

W tym momencie musisz utworzyć Scene i ustawiasz jej Parent na twój Pane o nazwie root robisz to tak: 

Scene scene = new Scene(root, wymiarX, wymiarY);
W miejsce wymiarX i wymiarY wstawiasz wielkość Ci odpowiadającą. Teraz ustawiasz scene i nazwe twojego primaryStage. Robisz to tak:

        primaryStage.setTitle("Nazwa");
        primaryStage.setScene(scene);
Ostatni krok to pokazanie twojego okna metodą:

primaryStage.show();
Kod może wyglądać tak:

 

 

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;


public class Klasa extends Application {
    
    @Override
    public void start(Stage primaryStage) {
        Pane root = new Pane();
        Button btn = new Button("Przyciśnij mnie!");
        btn.setMinSize(100, 30);
        btn.setLayoutX(100);
        btn.setLayoutY(100);
        final Label lbl = new Label("Napis");
        lbl.setLayoutX(50);
        btn.setOnAction(new EventHandler<ActionEvent>() {
            
            @Override
            public void handle(ActionEvent event) {
               lbl.setText("Inny napis");
            }
        });

        root.getChildren().addAll(lbl, btn);
        
        Scene scene = new Scene(root, 300, 250);
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();

    }

    public static void main(String[] args) {
        launch(args);
    }
    
}
 

 

 

 

Kod uruchom. Nie jest to piękne GUI, ale mam nadzieję że tym zachęciłem Cię do używania JavaFx. Daje dużo większe możliwości (w tym projektowanie GUI 3D). Teraz wyszukaj poradników o tej bibliotece, najlepiej na youtube i rozwijaj się dalej...

 

Pozdrawiam, niedługo może napiszę o szablonach CSS i efektach.

708121422388637873334.png

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...