NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Prepojenie dat TableView so scene builderom

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Juraj Rojik
Člen
Avatar
Juraj Rojik:19.3.2017 15:12

Ahojte.

Poprosil by som o radu. Jedna sa o pripojenie dat (komponenta je TvableView) k vytvorenemu FXML kodu. FXML kod je vytvoreny v scene bulder(Gluom). Skusam to uz druhy den, presiel som asi vsetky stranky, ktore rozoberali podobny problem. No neviem najist kde vytvaram chybu. No asi aj tusim, no neviem to rozchodit. Moj nazor je, ze asi v inicializacnej funkcii v triede MyController vytvorim nove stlpce a povodne ktore su uz vytvorene v scene builderi nimi prepisem. Ale to je len moj skromny odhad kedze mi to nejde. V prilohe prikladam komplet jednoduchu osekanu konstrukciu.

PS: inac pokial vytvaram GUI len cistym kodom v jave bez FXML kodu, tak to vsetko vunguje. Preto chyba je niekde v priradovani kodu uz k vytvorenej scene.

Za pomoc vopred dakujem.

package application;

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.fxml.FXMLLoader;


public class Main extends Application {
        @Override
        public void start(Stage primaryStage) {
                try {
                        BorderPane root = (BorderPane)FXMLLoader.load(getClass().getResource("HlavneOkno.fxml"));
                        Scene scene = new Scene(root,400,400);
                        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
                        primaryStage.setScene(scene);
                        primaryStage.show();
                } catch(Exception e) {
                        e.printStackTrace();
                }
        }

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

package application;

import java.net.URL;
import java.util.Resou­rceBundle;

import javafx.collec­tions.FXCollec­tions;
import javafx.collec­tions.Observa­bleList;
import javafx.fxml.FXML;
import javafx.fxml.I­nitializable;
import javafx.scene.con­trol.TableColum­n;
import javafx.scene.con­trol.TableView;
import javafx.scene.con­trol.cell.Pro­pertyValueFac­tory;

public class MyController implements Initializable {

@FXML TableView<Zoznam> table;
@FXML TableColumn<Zoznam, String> id;
@FXML TableColumn<Zoznam, Integer> sirka;

ObservableLis­t<Zoznam> data = FXCollections­.observableArra­yList(
new Zoznam("ahoj",1),
new Zoznam("ahoj",2));

@Override
public void initialize(URL arg0, ResourceBundle arg1) {

id.setCellValu­eFactory(new PropertyValue­Factory<Zoznam, String>("id"));
sirka.setCellVa­lueFactory(new PropertyValue­Factory<Zoznam, Integer>("sirka"));

table.setItem­s(data);

}

}

\---

package application;

import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;

public class Zoznam {

        public SimpleStringProperty id;
        public SimpleIntegerProperty sirka;

        Zoznam(String ID, Integer Sirka){
                super();
                this.id = new SimpleStringProperty(ID);
                this.sirka = new SimpleIntegerProperty(Sirka);
        }
}
<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.BorderPane?>


<BorderPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="application.MyController">
   <center>
      <TableView fx:id="table" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER">
        <columns>
          <TableColumn fx:id="id" prefWidth="75.0" text="C1" />
          <TableColumn fx:id="sirka" prefWidth="75.0" text="C2" />
        </columns>
      </TableView>
   </center>
</BorderPane>
 
Odpovědět
19.3.2017 15:12
Avatar
Odpovídá na Juraj Rojik
Petr Štechmüller:19.3.2017 15:25

Ahoj, stačí, když třídě Zoznam vygeneruješ gettery a settery. Dále dej ty proměnný private a bude to fungovat dobře. Jen menší rada: názvy proměnných se píší v Javě pomoci camelCase.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
19.3.2017 15:25
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Juraj Rojik
Člen
Avatar
Odpovídá na Petr Štechmüller
Juraj Rojik:19.3.2017 18:41

Ahoj.
Dakujem za radu. Pomohla.

 
Nahoru Odpovědět
19.3.2017 18:41
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.