2016-10-12 2 views
0

Ziel:
Anzeigedaten, unten, innen des TischesFehlende Codedaten angezeigt werden innerhalb der Tabelle

"Jacob", "Smith", "[email protected]" 
"Isabella", "Johnson", "[email protected]" 
"Ethan", "Williams", "[email protected]" 
"Emma", "Jones", "[email protected]" 
"Michael", "Brown", "[email protected]" 

Problem:
Was Code bin ich dabei, um die Daten angezeigt werden innerhalb der Tabelle?

Info:

  • Ich bin neu in JavaFX.
  • Ich benutze Netbeans
<?xml version="1.0" encoding="UTF-8"?> 

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

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="787.0" prefWidth="1086.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 
    <top> 
     <MenuBar BorderPane.alignment="CENTER"> 
     <menus> 
      <Menu mnemonicParsing="false" text="File"> 
      <items> 
       <MenuItem mnemonicParsing="false" text="Close" /> 
      </items> 
      </Menu> 
      <Menu mnemonicParsing="false" text="Edit"> 
      <items> 
       <MenuItem mnemonicParsing="false" text="Delete" /> 
      </items> 
      </Menu> 
      <Menu mnemonicParsing="false" text="Help"> 
      <items> 
       <MenuItem mnemonicParsing="false" text="About" /> 
      </items> 
      </Menu> 
     </menus> 
     </MenuBar> 
    </top> 
    <center> 
     <TableView id="ttt" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER"> 
     <columns> 
      <TableColumn id="firstNameCol" prefWidth="124.0" text="First name" /> 
      <TableColumn id="lastNameCol" prefWidth="139.0" text="Last name" /> 
      <TableColumn id="emailCol" minWidth="7.0" prefWidth="197.0" text="Email" /> 
      <TableColumn id="addressCol" prefWidth="105.0" text="Address" /> 
      <TableColumn id="zipcodeCol" prefWidth="100.0" text="Zipcode" /> 
      <TableColumn id="cityCol" prefWidth="204.0" text="City" /> 
     </columns> 
     </TableView> 
    </center> 
</BorderPane> 
package dreamcrm; 

import javafx.application.Application; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Group; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.control.TableView; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 


public class DreamCRM extends Application { 

    private TableView<Person> table = new TableView<Person>(); 
    private final ObservableList<Person> data = 
     FXCollections.observableArrayList(
      new Person("Jacob", "Smith", "[email protected]"), 
      new Person("Isabella", "Johnson", "[email protected]"), 
      new Person("Ethan", "Williams", "[email protected]"), 
      new Person("Emma", "Jones", "[email protected]"), 
      new Person("Michael", "Brown", "[email protected]") 
     );  


    @Override 
    public void start(Stage stage) throws Exception { 
     Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml")); 

     Scene scene = new Scene(root); 

     stage.setScene(scene); 
     stage.show(); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 

} 
package dreamcrm; 

import java.net.URL; 
import java.util.ResourceBundle; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.Label; 


public class FXMLDocumentController implements Initializable { 

    @FXML 
    private Label label; 

    @FXML 
    private void handleButtonAction(ActionEvent event) { 
     System.out.println("You clicked me!"); 
     label.setText("Hello World!"); 
    } 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     // TODO 
    }  

} 
package dreamcrm; 

import javafx.beans.property.SimpleStringProperty; 


public class Person { 

    private final SimpleStringProperty firstName; 
    private final SimpleStringProperty lastName; 
    private final SimpleStringProperty email; 

    public Person(String fName, String lName, String email) { 
     this.firstName = new SimpleStringProperty(fName); 
     this.lastName = new SimpleStringProperty(lName); 
     this.email = new SimpleStringProperty(email); 
    } 

    public String getFirstName() { 
     return firstName.get(); 
    } 

    public void setFirstName(String fName) { 
     firstName.set(fName); 
    } 

    public String getLastName() { 
     return lastName.get(); 
    } 

    public void setLastName(String fName) { 
     lastName.set(fName); 
    } 

    public String getEmail() { 
     return email.get(); 
    } 

    public void setEmail(String fName) { 
     email.set(fName); 
    }  

} 
+1

Wo soll ich anfangen? Sie verbinden nicht einmal einen Controller mit der fxml. Selbst wenn Sie keines der Objekte aus dem fxml in den Controller injiziert haben, werden keine 'fx: id' Attribute zugewiesen. Angenommen, Sie bekommen das zum Laufen ... Sie versuchen nicht einmal, Daten an die Knoten zu übergeben, die aus der fxml erstellt wurden. Wenn Sie das haben, funktioniert Ihre 'TableColumn's noch' cellValueFactory's. BTW: Es gibt ein Tutorial, das eine ähnliche, wenn nicht die gleiche Sache macht: https://docs.oracle.com/javase/8/javafx/fxml-tutorial/fxml_tutorial_intermediate.htm Benutze es! – fabian

Antwort

1

Sie fx:id statt id dafür verwendet werden soll. fx:id wird immer noch mit CSS-Selektoren arbeiten, also keine Sorgen.

Wie @fabian darauf hinwies, und das habe ich verpasst, müssen Sie auch die fx:controller in Ihrer fxml-Datei hinzufügen, so dass es weiß, was es steuern wird.

in Ihrem Dokument-Controller, müssen Sie es wissen lassen, es wird ein paar Informationen von Ihrem fxml Dokument immer mit @FXML

So wie dieser,

@FXML 
private TableView ttt; 
@FXML 
private TableColumn<Person, String> firstNameCol, lastNameCol, emailCol,addressCol, zipCol, cityCol; 

Hier verwenden Sie Ihre fx:id als die Variablennamen.

Dann, in Ihrer initialize Funktion müssen Sie die cellValueFactory, so einstellen.

@FXML 
public void initialize(){ 
    firstNamecol.setCellValueFactory(cellData -> cellData.getValue().firstNameProperty()); 
//etc.. 

//Don't forget to add your list that you made to the tableview 
ttt.setItems(list); 
} 

Nachdem Sie den ObservableList hinzufügen können Sie nun hinzufügen und Elemente entfernen und es sollte entsprechend aktualisieren.

Auf einem verwandten beachten, müssen Sie SimpleStringProperty als Mehrweg-Wert haben, das heißt

public StringProperty firstNameProperty(){ 
    return firstName; 
} 

Dies sollte Ihnen den Einstieg.

+0

Vielen Dank für Ihre Hilfe! Dieser Code "ttt.setItems (list);" ist der Code für jede Spalte oder etwas anderes oder ist der Code "Liste" der ObservableList? –

+0

'ttt.setItems (list)' füllt die 'TableColumns' mit den Daten. –

+0

"Liste" ist die TableColumns? –

Verwandte Themen