Hallo,
ich soll für eine Aufgabe eine GUI schreiben die Countries anzeigt. Hierzu habe ich einen Datentyp "Country" der aus verschiedenen Strings und long-Zahlen besteht. Die Auswahl des jeweiligen Landes soll über eine ComboBox geschehen die Countries als Datentyp hat. Die ComboBox soll/muss nicht editierbar sein und soll nur den Namen der entsprechenden Objekte anzeigen die über die Methode country.getName(); abgerufen werden kann.
Das Problem ist hierbei, dass das natürlich nicht so einfach geht, da die ComboBox explizit den Datentyp country haben MUSS. Erstelle ich also bspw. eine ObservableList mit dem Datentyp String und übergebe diese der ComboBox mit .setItems(); habe ich einen Type mismatch. Genauso sieht es bei .setValue(); aus. Wenn ich aber jeweils einfach nur eine ObservableList vom Datentyp Country für .setItems(); bzw. eine Country in .setValue(); angebe bekomme ich nur Kauderwelsch als Hex-String.
In der Aufgabenstellung steht man solle nachsehen wie der Standard-StringConverter von ComboBox funktioniert und eine entsprechende Methode in der Country-Klasse implementieren. Leider finde ich hierzu nichts wenn ich danach suche, sondern lediglich Dinge wie man vorgeht wenn man eine editable ComboBox hat (was hier gar nicht vorgesehen ist). Falls jemand weiß welche Funktion gemeint ist und mir einen Link zur Doku schicken kann oder mir sonstwie Tipps geben kann wäre ich sehr dankbar.
[CODE lang="java" title="Country-Class"]public class Country
{
private String name;
private String capital;
private long people;
private long area;
private long density;
//Einfacher Konstruktor
public Country(String name, String capital, long people, long area)
{
this.name = name;
this.capital = capital;
this.people = people;
this.area = area;
this.density = people / area;
}
//Um eine erste Liste als init-Wert zu erzeugen und um die Oberfläche testen zu können
public static ObservableList<Country> getList()
{
Country belgien = new Country("Belgien", "Brüssel", 10839905, 30528);
Country luxemburg = new Country("Luxemburg", "Luxemburg", 511840, 2586);
Country kanada = new Country("Kanada", "Ottawa", 34278406, 9984670);
ObservableList<Country> list = FXCollections.observableArrayList(belgien, kanada, luxemburg);
return list;
}
}[/CODE]
[CODE lang="java" title="Country-Controller"]public class CountryController
{
//Die Liste in den Controller laden
private ObservableList<Country> countries = Country.getList();
@FXML
private ComboBox<Country> countrySelector;
//@FXML
//...
//andere Komponenten
@FXML
private void initialize()
{
//So muss ich es leider machen mit countries als Datentyp
countrySelector.setItems(countries);
countrySelector.setValue(countries.get(0));
//So würde ich es gerne machen
//ObservableList<String> countryNames = FXCollections.observableArrayList();
//for(int i=0; i<countries.size();i++)
//{
// countryNames.add(countries.get(i).getName());
//}
//countrySelector.setItems(countryNames);
//countrySelector.setValue(countries.get(0).getName);
//Wie gesagt, ich MUSS Country als Datentyp für die Checkbox verwenden.
}[/CODE]
ich soll für eine Aufgabe eine GUI schreiben die Countries anzeigt. Hierzu habe ich einen Datentyp "Country" der aus verschiedenen Strings und long-Zahlen besteht. Die Auswahl des jeweiligen Landes soll über eine ComboBox geschehen die Countries als Datentyp hat. Die ComboBox soll/muss nicht editierbar sein und soll nur den Namen der entsprechenden Objekte anzeigen die über die Methode country.getName(); abgerufen werden kann.
Das Problem ist hierbei, dass das natürlich nicht so einfach geht, da die ComboBox explizit den Datentyp country haben MUSS. Erstelle ich also bspw. eine ObservableList mit dem Datentyp String und übergebe diese der ComboBox mit .setItems(); habe ich einen Type mismatch. Genauso sieht es bei .setValue(); aus. Wenn ich aber jeweils einfach nur eine ObservableList vom Datentyp Country für .setItems(); bzw. eine Country in .setValue(); angebe bekomme ich nur Kauderwelsch als Hex-String.
In der Aufgabenstellung steht man solle nachsehen wie der Standard-StringConverter von ComboBox funktioniert und eine entsprechende Methode in der Country-Klasse implementieren. Leider finde ich hierzu nichts wenn ich danach suche, sondern lediglich Dinge wie man vorgeht wenn man eine editable ComboBox hat (was hier gar nicht vorgesehen ist). Falls jemand weiß welche Funktion gemeint ist und mir einen Link zur Doku schicken kann oder mir sonstwie Tipps geben kann wäre ich sehr dankbar.
[CODE lang="java" title="Country-Class"]public class Country
{
private String name;
private String capital;
private long people;
private long area;
private long density;
//Einfacher Konstruktor
public Country(String name, String capital, long people, long area)
{
this.name = name;
this.capital = capital;
this.people = people;
this.area = area;
this.density = people / area;
}
//Um eine erste Liste als init-Wert zu erzeugen und um die Oberfläche testen zu können
public static ObservableList<Country> getList()
{
Country belgien = new Country("Belgien", "Brüssel", 10839905, 30528);
Country luxemburg = new Country("Luxemburg", "Luxemburg", 511840, 2586);
Country kanada = new Country("Kanada", "Ottawa", 34278406, 9984670);
ObservableList<Country> list = FXCollections.observableArrayList(belgien, kanada, luxemburg);
return list;
}
}[/CODE]
[CODE lang="java" title="Country-Controller"]public class CountryController
{
//Die Liste in den Controller laden
private ObservableList<Country> countries = Country.getList();
@FXML
private ComboBox<Country> countrySelector;
//@FXML
//...
//andere Komponenten
@FXML
private void initialize()
{
//So muss ich es leider machen mit countries als Datentyp
countrySelector.setItems(countries);
countrySelector.setValue(countries.get(0));
//So würde ich es gerne machen
//ObservableList<String> countryNames = FXCollections.observableArrayList();
//for(int i=0; i<countries.size();i++)
//{
// countryNames.add(countries.get(i).getName());
//}
//countrySelector.setItems(countryNames);
//countrySelector.setValue(countries.get(0).getName);
//Wie gesagt, ich MUSS Country als Datentyp für die Checkbox verwenden.
}[/CODE]