Scene builder - jak wyświetlić tekst po naciśnięciu na przycisk

0

Serdecznie was proszę!!!

Cześć to znowu ja. Z uwagi, że jest tu naprawdę sporo fachowców po raz kolejny zwracam się do was o prośbę mianowicie chce sobie zrobić aplikację. Robię w Scene Builderze, coś tam Swinga czytałem ale niewiele robiłem, bo podobno dłużej schodzi i jest to bardziej żmudne. Tak w ogóle znacie jakieś dobre książki o Scene Builderze, bo mało tego jest w języku polskim i czy warto nauczyć się i używać Swinga?

Co do mojej aplikacji to chce zrobić tak, żeby po naciśnięciu na przycisk (malariaButton - patrz klasa MainController.java) wyświetlił się tekst(w label o nazwie voidDiseaseInfo, malaria.printInfo - patrz klasa Encyclopedia). Wszystkie fx:id zdefiniowałem do każdej rzeczy z scene buildera. Po lewej mam przyciski, a po prawej pole pole tekstowe. Chciałbym, żebyście spojrzeli na klasę MainController.java i Encyclopedia.java
Tu widok ze Scene Buildera
http://vlep.pl/x8weas.jpg

klasa Main.java (standardowa)

package patogen.app;
 
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
 
public class Main extends Application {
 
    @Override
    public void start(Stage primaryStage) throws Exception {
        Parent parent = (Parent)FXMLLoader.load(getClass().getResource("/pl/javastart/fxaction/view/MainPane.fxml"));
        Scene scene = new Scene(parent);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
 
    public static void main(String[] args) {
        launch(args);
    }
}

Tu klasa MainController.java (ważne!!!) - spójrzcie na koniec tej klase

package patogen.controller;


import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.Initializable;

import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;

public class MainController implements Initializable{

    @FXML
    private MenuBar mainMenu;

    @FXML
    private Menu menu;

    @FXML
    private MenuItem closeItem;

    @FXML
    private Menu edition;

    @FXML
    private MenuItem deleteItem;

    @FXML
    private Menu help;

    @FXML
    private MenuItem aboutItem;

    @FXML
    private Label disease_informationLabel;

    @FXML
    private Button malariaButton;

    @FXML
    private Button HIVButton;

    @FXML
    private Button ebolaButton;

    @FXML
    private Label voidDiseaseInfo;

    public void initialize(URL location, ResourceBundle resources) {
    	malariaButton.addEventFilter(ActionEvent.ACTION, new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                System.out.println("Wygenerowano zdarzenie " + event.getEventType());
                String text = mainTextArea.getText();   //nie ma pojęcia jak to zrobić zostawiłem default
                voidDiseaseInfo.setText(malaria.printInfo());  //tu też
            }
        });
     
    }
}

Klasa Encyclopedia.java - ważne!!!! tu jak włącze, żeby mi poszło w Eclipse to mi się wszystko wyświetla, nie wiem jak to zrobić, żeby mi się wyświetlał w Scene builderze po naciśnięciu przycisku.

package patogen.app;

public class Encyclopedia {
	public static void main(String[] args){
		Patogen malaria = new  Patogen("Malaria", "Pierwotniak", "Gorączka, wymioty, ból głowy",
				"Plasmodium", 296000000, 73050);
        double fatality = (malaria.deaths/malaria.frequency)*100;
        System.out.println(fatality);

		Patogen HIV = new Patogen("AIDS", "Lentiwirus", "Wyniszczenie układu odpornościowego, częste choroby",
				"Human immunodeficiency virus", 36700000, 1100000);
        double fatality1 = (HIV.deaths/HIV.frequency)*100;
        System.out.println(fatality1);

		Patogen ebola = new Patogen("Ebola", "Filowirus", "Wysoka temperatura, bóle mięśni, biegunka, bóle brzucha, wymioty, wysypka",
				"Zaire Ebolavirus", 0, 0);

        malaria.printInfo();
        HIV.printInfo();
        ebola.printInfo();
        System.out.println("Ebola jest już na wymarciu. Szacuje się, że niedługo zostanie zlikwidowana");

	}
}

Tu klasa Patogen.java

package patogen.app;

public class Patogen {
	public String name;
	public String type;
	public String symptoms;
	public String causes;
	double frequency;
	int deaths;
	double fatality;

	 public String getName() {
	        return name;
	    }

	 public void setName(String name) {
	        this.name = name;
	    }

	    public String getType() {
	        return type;
	    }

	    public void setType(String type) {
	        this.type = type;
	    }

	    public String getSymptoms() {
	        return symptoms;
	    }

	    public void setSymptoms(String symptoms) {
	        this.symptoms = symptoms;
	    }

	    public String getCauses() {
	        return causes;
	    }

	    public void setCauses(String causes) {
	        this.causes = causes;
	    }

	    public double getFrequency() {
	        return frequency;
	    }

	    public void setFrequency(double frequency) {
	        this.frequency = frequency;
	    }

	    public int getDeaths() {
	        return deaths;
	    }

	    public void setDeaths(int deaths) {
	        this.deaths = deaths;
	    }

	 Patogen(String name, String type, String symptoms, String causes, double frequency,
			 int deaths) {
		    this.name = name;
	        this.type = type;
	        this.symptoms = symptoms;
	        this.causes = causes;
	        this.frequency = frequency;
	        this.deaths = deaths;
	    }

	    void printInfo() {
	    	System.out.println("Nazwa choroby: " + name);
			System.out.println("Typ patogenu: " + type);
			System.out.println("Objawy: " + symptoms);
			System.out.println("Organizm wywołujący chorobę: " + causes);
			System.out.println("Liczba nosicieli (2015): " + frequency);
			System.out.println("Liczba zmarłych (2015): " + deaths);
			System.out.println("Śmiertelność (w procentach): " + fatality);;
	    }
}

Tu jeszcze daje plik MainPane.fxml, ale nie wiem czy się przyda

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>


<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
   <top>
      <AnchorPane prefHeight="18.0" prefWidth="600.0" BorderPane.alignment="CENTER">
         <children>
            <MenuBar fx:id="mainMenu" prefHeight="25.0" prefWidth="600.0">
              <menus>
                <Menu fx:id="menu" mnemonicParsing="false" text="Menu">
                  <items>
                    <MenuItem fx:id="closeItem" mnemonicParsing="false" text="Zamknij" />
                  </items>
                </Menu>
                <Menu fx:id="edition" mnemonicParsing="false" text="Edycja">
                  <items>
                    <MenuItem fx:id="deleteItem" mnemonicParsing="false" text="Usuń" />
                  </items>
                </Menu>
                <Menu fx:id="help" mnemonicParsing="false" text="Pomoc">
                  <items>
                    <MenuItem fx:id="aboutItem" mnemonicParsing="false" text="O programie" />
                  </items>
                </Menu>
              </menus>
            </MenuBar>
         </children>
      </AnchorPane>
   </top>
   <left>
      <VBox prefHeight="289.0" prefWidth="130.0" BorderPane.alignment="CENTER">
         <children>
            <Label fx:id="disease_informationLabel" alignment="CENTER" prefHeight="42.0" prefWidth="152.0" text=" Informacje o chorobie" />
            <Button fx:id="malariaButton" mnemonicParsing="false" prefHeight="50.0" prefWidth="164.0" text="Malaria" />
            <Button fx:id="HIVButton" mnemonicParsing="false" prefHeight="50.0" prefWidth="187.0" text="HIV" />
            <Button fx:id="ebolaButton" mnemonicParsing="false" prefHeight="50.0" prefWidth="164.0" text="Ebola" />
         </children>
      </VBox>
   </left>
   <center>
      <Label fx:id="voidDiseaseInfo" alignment="TOP_LEFT" prefHeight="375.0" prefWidth="485.0" BorderPane.alignment="CENTER" />
   </center>
</BorderPane>
1

Pierwsza sprawa nie ustawisz niczego przez metodę printInfo(); ponieważ jest ona typu void. Zrób ją tak, aby zwracała String np:

public String printInfo()
    {
        return  "Nazwa choroby: " + getName()+
        "\nTyp patogenu: " + getType()+
        "\nObjawy: " + getSymptoms()+
        "\nOrganizm wywołujący chorobę: " + getCauses()+
        "\nLiczba nosicieli (2015): " + getFrequency()+
        "\nLiczba zmarłych (2015): " + getdeaths()+
        "\nŚmiertelność (w procentach): " + getFatality();
    }

Druga sprawa nie potrzebujesz nadawać każdemu obiektowi fx:id, nie określaj eventów w metodzie intialize(), jeśli nie musisz tego robić.
Dla przycisku voidDiseaseInfo wstrzyknij np: metodę onMouseClicked (znajdziesz ją w SceneBuilder->code)
I na koniec wygladałoby to tak:

@FXML
    void onVoidDiseaseInfoClicked(MouseEvent event)
    {
        voidDiseaseInfo.setText(malaria.printInfo());
    }

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