Ich lerne JavaFX und versuche speziell, eine Tabelle mit den Klassen TableColumn und TableView zu implementieren. Mein Programm kompiliert ohne Fehler, aber ich habe eine ominöse schau bei der Kompilierung Warnung:JavaFX-Kompilierungswarnung - "verwendet ungeprüfte oder unsichere Operationen" - Rohdatentypen?
C:\JavaFX_Sandbox>javac robotApp.java
Note: robotApp.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
C:\JavaFX_Sandbox>
Das ist mir ausreichend aus weirded genug, dass ich nicht den Nerv hatte, um zu versuchen, mein Programm tatsächlich ausgeführt wird. Ich habe hier auf StackOverflow und einigen anderen Sites gegraben und festgestellt, dass die Ursache dieser Warnung am ehesten darin liegt, dass ich Rohdatentypen verwende. Aber wenn, dann kann ich sie nicht erkennen. Und wenn nicht, mache ich mir Sorgen, was diese Nachricht bedeuten könnte.
Um mein Programm so schnell wie möglich zu beschreiben: Ich habe eine nerdy robot.java Klasse erstellt:
public class robot{
private String name;
private int intelligence;
public robot(String a, int b){
this.name = a;
this.intelligence = b;
}
}
Nichts Besonderes. So speichern Sie all diese Roboter, habe ich eine robotMgr.java Klasse, im wesentlichen eine glorifizierte Arraylist zu halten, um sie alle:
import java.util.ArrayList;
import java.util.List;
import javafx.collections.*;
public class robotMgr{
private ArrayList<robot> robotList;
private ObservableList<robot> oRobotList;
robotMgr(){
robotList = new ArrayList<robot>();
robotList.add(new robot("R2-D2", 7));
robotList.add(new robot("Cylon", 3));
robotList.add(new robot("The Terminator", 5));
robotList.add(new robot("WALL-E", 6));
populateOList();
}
public void populateOList(){
for(int i=0; i<robotList.size(); i++)
oRobotList.add(robotList.get(i));
}
public List<robot> getRobotList(){
return robotList;
}
public ObservableList<robot> getORobotList(){
return oRobotList;
}
}
(I in der Arraylist mehr Datenmanipulation zu tun, aber der ObservableList ist notwendig, weil die Table Klasse erwartet zugeführt wird, die Tabellenelemente aus einem ObservableList)
Jetzt für den Main Event: a. JavaFX-Programm, das die Daten über und zeigt sie in einer einfachen, zweispaltige Tabelle nimmt:
import javafx.application.*;
import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.layout.*;
import javafx.scene.control.*;
import javafx.scene.control.cell.*;
import javafx.event.*;
import javafx.geometry.*;
import javafx.collections.*;
public class robotApp extends Application{
public static void main(String[] args){
launch(args);
}
TableColumn<robot, String> colName;
TableColumn<robot, Integer> colIntelligenge;
TableView<robot> robotTable;
BorderPane borderPane;
Scene scene;
Stage stage;
@Override public void start(Stage primaryStage){
robotMgr myBots = new robotMgr();
colName = new TableColumn<robot, String>("Name");
colName.setMinWidth(100);
colName.setCellValueFactory(new PropertyValueFactory<robot, String>("Name"));
colIntelligenge = new TableColumn<robot, Integer>("Intelligence");
colIntelligenge.setMinWidth(100);
colIntelligenge.setCellValueFactory(new PropertyValueFactory<robot, Integer>("Intelligence"));
robotTable = new TableView<robot>();
robotTable.getColumns().addAll(colName, colIntelligenge);
robotTable.setItems(myBots.getORobotList());
borderPane = new BorderPane();
borderPane.setCenter(robotTable);
scene = new Scene(borderPane, 600, 600);
stage = primaryStage;
stage.setScene(scene);
stage.setTitle("Robot App");
stage.show();
}
}
Alle Blicke Gut für mich. Und alles ist in Ordnung, abgesehen von den oben erwähnten Warnmeldungen. Das Seltsame ist, dass die Nachricht verschwindet, wenn ich die "robotTable.getColumns(). AddAll (colName, colIntelligenge)" auskommentiere; " nur Linie.
Also ... ich bin völlig verwirrt. Wenn die Fehlermeldung mich über die Verwendung von Rohdatentypen warnt, weiß ich nicht, wo sie sich in meinem Programm befinden. Und wenn die Fehlermeldung vor etwas anderem warnt, weiß ich nicht, was das sein könnte. Außerdem: Warum sollte die addAll() -Methode die Zeile sein, die die Warnung verursacht? Ich kann das nicht für das Leben für mich herausfinden.
Ist das Problem, dass die Instanzvariablen der Roboter alle privat sind? Wenn ja, würde es beim Kompilieren nicht einen spezifischen Syntaxfehler erzeugen? Oder ist die ObservableList das Problem? Ich verstehe, dass OLs Schnittstellen sind, keine Datenstrukturen ... aber ich sehe nicht, wie das hier mich stolpern könnte.
Wenn jemand Hilfe oder Rat bieten kann, werde ich unglaublich dankbar sein.
Vielen Dank! -RAO
Also haben Sie versucht, mit '-Xlint: unchecked 'zu kompilieren, wie die Compiler-Warnung zu sagte? –
(Ich würde Sie dringend bitten, den Java-Namenskonventionen zu folgen, btw - Ihre Klassen sollten 'Robot',' RobotManager' und 'RobotApp' genannt werden.) –
Link für [Java-Namenskonventionen] (https: // en .wikipedia.org/wiki/Naming_convention_ (Programmierung) #Java) –