Zum Inhalt springen

Ein icon(.png) in ChoiceBox setzen??


Empfohlene Beiträge

Geschrieben

Aloha Leute,

könnt ihr mir Sagen wie ich hier ein Icon reinkriegen soll?? z.B Polen.png

es soll so aussehen das die Fahne links ist und das Land rechts.

geht es überhaupt das es im code gemacht wird und dann an die Fxml geschickt wird und das man den Text als ein String bekommt??

coutryChoiceBox.setItems( FXCollections.observableArrayList(
                "Deutsch", "Englisch", "Polnisch" ) );

        coutryChoiceBox.getSelectionModel().selectFirst();

        label1.setText( coutryChoiceBox.getSelectionModel().getSelectedItem().toString() );
        coutryChoiceBox.getSelectionModel().selectedItemProperty().addListener((ObservableValue observable,Object oldValue, Object newValue) -> {
            label1.setText(newValue.toString());
        });

Danke im vorraus

Geschrieben

Du meinst in der Auswahlbox?

Entweder indem du es der entsprechenden Sprache in der Auswahl voranstellst, oder aber, falls die Funktion dies nicht unterstützt, indem du dir deine eigene Auswahlfunktion bastelst, die den Bild Pfad z.B. als Übergabeparameter (optional?) erwartet oder aber eine passende im Internet suchst.
Je nach Framework sollten ja auch mehrere Klassen verfügbar sein, die für die Auswahl genommen werden können.

 

Wo genau liegt denn dein Problem? Dass du nicht weißt, wie man ein Bild einbindet, oder dass dies. so wie du es kennst, bei dieser Funktion nicht funktioniert?

Geschrieben

@Crash2001  Dass ich nicht weißt, wie man ein Bild einbindet, ich habe versucht mit (new ImageView()). ich weiß auch nicht op die .Fxml dies dann auch aus dem Code annimmt. oder ob ich es in der .Fxml machen sollte. ich dank aber auch das es im code besser wäre da man dort leichter erweitern könnte auf mehr Sprachen.

Geschrieben

Dann such doch mal z.B. bei Google nach "Java Bild einbinden" oder "Java HowTo Bilder einbinden".

Da landet man z.B. hier.
Da sollten eigentlich alle Informationen drin stehen, die du dafür benötigst.

Geschrieben

@Crash2001 irgendwie ist das noch nicht das was ich suche also mein Code sieht folgendermaßen aus update

private final String[] language = {"Deutsch", "Englisch", "Polnisch"};
coutryComboBox.setPromptText( "Sprache Wählen..." );
        coutryComboBox.setItems( FXCollections.observableArrayList( language ) );

und was ich jetzt haben möchte ist das

private final String[] language = {Deuschland.png" Deutsch", England.png" Englisch", Polnisch.png" Polnisch"};
coutryComboBox.setPromptText( "Sprache Wählen..." );
        coutryComboBox.setItems( FXCollections.observableArrayList( language ) );

 

Geschrieben

Ich würde dir vorschlagen, du probierst es erst einmal generell, ein Bild einzubinden, so dass du die Grundlagen dazu kennen lernst und im zweiten Schritt versuchst du es dann erst so wie du es brauchst umzusetzen.

Ich selber kenne mich mit Java gar nicht aus, sondern nur etwas mit 3 anderen Programmiersprachen.
Ich denke aber, man sollte es z.B. mittels einer Variable, in der man das jeweilige Bild speichert, eigentlich problemlos lösen können, falls es durch die Funktion unterstützt wird (also dass Bilder da möglich sind und nicht rausgefiltert werden oder einen Fehler bringen). Falls es nicht unterstützt wird, muss man entweder eine andere Funktion nehmen, oder aber sich die Funktion selber schreiben.

Schau mal hier.

P.S.:
So einfache Dinge sollte eigentlich JEDER Azubi problemlos sich selber ergoogeln / recherchieren können. Ansonsten such dir einfach mal ein entsprechendes Java Tutorial und schreib mal, womit du überhaupt arbeitest. "Java" ist da nicht wirklich sonderlich hilfreich, da es diverse Frameworks gibt und ein Applet wohl auch etwas anders programmiert wird, als ein auf dem Rechner laufendes Java-Programm.

  • 2 Wochen später...
Geschrieben

Hey, noch einer der mit JavaFX arbeitet (Y)

Dein Vorhaben ist eigentlich ganz einfach. Dafür brauchst du eine überarbeitete ListCell. Leider kann man in einer ChoiceBox die CellFactory nicht setzen, deshalb habe ich jetzt ein Beispiel mit einer ComboBox gemacht.

Zuerst habe ich mir die Enum "Language" angelegt. Und da wir in Java vollwertige Klassen als Enums haben, können wir hier auch ein wenig Funktionialität mit reinbringen.

 

package application;

import javafx.beans.property.ReadOnlyObjectProperty;
import javafx.beans.property.ReadOnlyObjectWrapper;
import javafx.beans.property.ReadOnlyStringProperty;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.scene.image.Image;


public enum Language
{
	GERMAN("Deutsch", "german.png"),
	ENGLISH("Englisch", "english.png");
	
	private final ReadOnlyStringWrapper name;
	private final ReadOnlyObjectWrapper<Image> image;
	
	private Language(String name, String image)
	{
		this.name = new ReadOnlyStringWrapper(name);
		this.image = new ReadOnlyObjectWrapper<>(
			new Image(getClass().getResourceAsStream(image))
		);
	}
	
	public ReadOnlyStringProperty nameProperty()
	{
		return this.name.getReadOnlyProperty();
	}
	
	public ReadOnlyObjectProperty<Image> imageProperty()
	{
		return this.image.getReadOnlyProperty();
	}
}

Anschließend können wir die eigene ListCell erstellen.

package application;

import javafx.geometry.Pos;
import javafx.scene.control.Label;
import javafx.scene.control.ListCell;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;


public class LanguageListCell extends ListCell<Language>
{
	private final HBox graphic;
	private final ImageView image;
	private final Label text;
	
	public LanguageListCell()
	{
		this(false);
	}
	
	public LanguageListCell(boolean useBlackText)
	{
		super();
		this.graphic = new HBox(5.0);
		this.image = new ImageView();
		this.text = new Label();
		
		if (useBlackText)
		{
			this.text.setTextFill(Color.BLACK);
		}
		
		this.graphic.setAlignment(Pos.CENTER_LEFT);
		this.graphic.getChildren().setAll(this.image, this.text);
	}
	
	@Override
	protected void updateItem(Language language, boolean empty)
	{
		super.updateItem(language, empty);
		if (!empty && language != null)
		{
			this.image.imageProperty().bind(language.imageProperty());
			this.text.textProperty().bind(language.nameProperty());
			
			setGraphic(this.graphic);
		}
		else
		{
			this.image.imageProperty().unbind();
			this.text.textProperty().unbind();
			
			setGraphic(null);
		}
	}
}

Und zum Schluss wie man das ganze in eine ComboBox zieht:

		ComboBox<Language> cb = new ComboBox<>();
		cb.setCellFactory((param) -> new LanguageListCell());
		cb.setButtonCell(new LanguageListCell(true));
		cb.getItems().setAll(Language.values());

 

Ich hoffe du siehst das noch. Probier einfach mal ein bischen damit rum. Mit den CellFactories usw. kann man echt vieles in JavaFX machen.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...