Auf Thema antworten

Danke erst mal für das Code Snippet. Bin die ganze Zeit schon am probieren, aber ich bekomm es nicht hin. Hab zwar keine Fehlermeldung, aber das Image wird nicht geändert. Vielleicht siehst du einen Fehler in meinem Code?


Mein Custom Control:

[CODE]

public class StatusBar extends GridPane {

   

    //public static final Image imageBenutzerStatusBar = new Image("/icons/user.png");

   

    @FXML

    private GridPane ctrlStatusBar;

    @FXML

    private ImageView imgView;

    @FXML

    private Label lblStatusUser;

    @FXML

    private Label lblStatusText;

    @FXML

    private Label lblStatusServer;

    @FXML

    private Label lblStatusVersion;

    @FXML

    private Line lineSeparator;

   

    private ObjectProperty<Image> icon;

   

   

    public StatusBar() {

        FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/StatusBar.fxml"));

        loader.setRoot(this);

        loader.setController(this);

       

        try {

            loader.load();

            Image imageBenutzerStatusBar = new Image(getClass().getResourceAsStream("/icons/user.png"));

            if (imageBenutzerStatusBar != null) {

                imgView.setImage(imageBenutzerStatusBar);

            }

            lineSeparator.endXProperty().bind(ctrlStatusBar.widthProperty());

        }

        catch (IOException ioe) {

            throw new RuntimeException(ioe);

        }

    }

   

    public GridPane getCtrlStatusBar() {

        return ctrlStatusBar;

    }

   

    public ImageView getImgView() {

        return imgView;

    }

   

    public Label getLblStatusUser() {

        return lblStatusUser;

    }

   

    public Label getLblStatusText() {

        return lblStatusText;

    }

   

    public Label getLblStatusServer() {

        return lblStatusServer;

    }

   

    public Label getLblStatusVersion() {

        return lblStatusVersion;

    }

   

    public Line getLineSeparator() {

        return lineSeparator;

    }

   

    public ObjectProperty<Image> iconProperty() {

        if (icon == null) {

            icon = new ObjectPropertyBase<Image>() {

                @Override

                public Object getBean() {

                    return StatusBar.this;

                }

 

                @Override

                public String getName() {

                    return "icon";

                }

            };

        }

        return icon;

    }

   

    public void setIcon(Image icon) {

        iconProperty().setValue(icon);

    }

 

    public Image getIcon() {

        return icon == null ? null : icon.getValue();

    }

}

[/CODE]


FXML-Ausschnitt:

[CODE]

   <bottom>

      <StatusBar fx:id="statusBar" BorderPane.alignment="CENTER">

         <icon>

            <Image url="@../icons/16/dialog-error.png" />

         </icon>

      </StatusBar>

   </bottom>

[/CODE]


Ich glaube, das Property weiß nicht, daß es das Image der ImageView ändern soll. Aber ich blick das grad nicht, wie ich das mitteilen kann. Du benutzt ja Node und in eine Node kann man ja alles einfügen. Ich würd gern direkt Image verwenden, da ich ja direkt das Image der ImageView setzen will. Oder geht das so nicht?



Oben