JavaFX Non-static method 'widthProperty()' cannot be referenced from a static context

morry329

Mitglied
Ich habe diesen Code, welches meckert, dass die Referenzierung vom statischen Kontext nicht geht. Ich habe versucht, um der Konstruktor ResizableCanvasPane statisch zu machen usw, but der Fehler bleibt. Vielleicht kann jemand mir eine Hilfsstellung geben?

Java:
public class ResizableCanvasPane extends Pane {
    
    /* der Code geht um den Pane mit dem veränderbaren Große.
     Deshalb werden zwei Variablen hier erstellt, um die veränderte Größe zu reflektieren
     */
    private int widthChanged = 0;
    private int heightChanged = 0;

    private SimpleObjectProperty<Dimension2D> dimension2DSimpleDoubleProperty = new SimpleObjectProperty<>();

    public ResizableCanvasPane(){
        dimension2DSimpleDoubleProperty.addListener((observable, oldValue, newValue) -> {
            HelloController.redraw();
        });

        widthProperty().addListener((observable, oldValue, newValue) -> {
            widthChanged++;
            checkRedraw();
        });

        heightProperty().addListener((observable, oldValue, newValue) -> {
            heightChanged++;
            checkRedraw();
        });
        
        //Leinwand mit dem veränderten Größe einfügen
        ResizableCanvas canvas = new ResizableCanvas();
        getChildren().add(canvas);
        
        //Non-static method 'heightProperty()' cannot be referenced from a static context
        ResizableCanvasPane.widthProperty().bind(widthProperty());
        
        //Non-static method 'heightProperty()' cannot be referenced from a static context
        ResizableCanvasPane.heightProperty().bind(heightProperty());
    }
    
    //bei Größeveränderung wird die checkRedraw() aufgerufen, um die dimension zu bestimmen
    private void checkRedraw(){
        if(widthChanged + heightChanged > 1){
            widthChanged = 0;
            heightChanged = 0;
            Dimension2D dimension = new Dimension2D(getWidth(), getHeight());
            dimension2DSimpleDoubleProperty.set(dimension);
        }
    }

    public SimpleObjectProperty<Dimension2D> dimension2DSimpleObjectProperty(){
        return dimension2DSimpleDoubleProperty;
    }

}
 

mihe7

Top Contributor
Vielleicht kann jemand mir eine Hilfsstellung geben?
Naja, der Fehler besagt, dass Du versuchst, über die Klasse auf eine Instanzmethode zuzugreifen - Du brauchst also ein Objekt.

Mir ist allerdings nicht klar, was Du hier
Java:
ResizableCanvasPane.widthProperty().bind(widthProperty());
eigentlich vorhast, denn widthProperty() bezieht sich ja auf this, also bereits auf eine Instanz von ResizableCanvasPane.
 

Marinek

Bekanntes Mitglied
Wenn es so eine Methode "widthProperty()" gibt, dann ist diese nicht statisch (e.g. public static ...).

Das bedeutet, dass du ein Objekt benötigst, auf dem die Methode ausgeführt wird.

Vermutlich kannst du einfach ResizableCanvasPane.widthProperty().bind(widthProperty()); Das ResizableCanvasPane weglassen.

Ob das dann Sinn macht, musst du entscheiden.
 

KonradN

Super-Moderator
Mitarbeiter
Evtl. will er die Größe des Canvas binden an die Größe der Pane. Denn eine Property an sich selbst zu binden macht wenig Sinn, aber er erstellt ja einen Canvas vor diesen Aufrufen.
 

morry329

Mitglied
Danke euch nochmals für die Tipps --- ich habe bisher so gemacht. Keine Ahnung ob es überhaupt Sinn macht aber. Zumindestens bekomme ich keine komische Fehler/UI.

Java:
public class ResizableCanvasPane extends Pane {

    public static int widthChanged = 0;
    public static int heightChanged = 0;

    public SimpleObjectProperty<Dimension2D> dimension2DSimpleDoubleProperty = new SimpleObjectProperty<>();

    public ResizableCanvasPane(){



        ResizableCanvas canvas = new ResizableCanvas();

        //einfach this beziehen lassen wie eure Tipps
        this.dimension2DSimpleDoubleProperty.addListener((observable, oldValue, newValue)->{
           redraw();
        });

        //hier auch
        this.heightProperty().addListener((observable, oldValue, newValue)->{
            checkRedraw();
        });

        //hier auch
        this.widthProperty().addListener((observable, oldValue, newValue)->{
            checkRedraw();
        });

        FlowPane pane = new FlowPane(canvas);

        pane.setPadding(new Insets(5));
        
        //pane mit canvas kombiniert
        canvas.widthProperty().bind(pane.widthProperty().subtract(pane.getInsets().getLeft() + pane.getInsets().getRight()));
        canvas.heightProperty().bind(pane.heightProperty().subtract(pane.getInsets().getTop() + pane.getInsets().getBottom()));
        getChildren().add(canvas);

    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Swing The serializable class FMFrame does not declare a static final serialVersionUID field of type long AWT, Swing, JavaFX & SWT 5
M Swing Public Static GUI für CRM / ERP AWT, Swing, JavaFX & SWT 6
P non-static variablen benutzen AWT, Swing, JavaFX & SWT 7
M Zugriff auf Variablen eines Objektes ohne sie auf static zu setzen AWT, Swing, JavaFX & SWT 9
J Swing JDialog mit static-Funktion anzeigen -> Rückgabewert AWT, Swing, JavaFX & SWT 3
Spin Innere Klasse : kein static? AWT, Swing, JavaFX & SWT 8
J serializable class GUI does not declare a static final s. AWT, Swing, JavaFX & SWT 2
G Probleme mit static Methoden in JFrame/JDialog AWT, Swing, JavaFX & SWT 7
F actionPerformed und static? AWT, Swing, JavaFX & SWT 20
beli3ver JavaFX Anwendung startet nicht, kann den Fehler nicht finden (Exception in Application start method) AWT, Swing, JavaFX & SWT 1
Z JavaFX Exception in Application start method AWT, Swing, JavaFX & SWT 2
B AWT actionPerformed Method funktioniert nicht AWT, Swing, JavaFX & SWT 12
S Java Swing Print() method AWT, Swing, JavaFX & SWT 4
U JavaFX Error: Handler Method not found AWT, Swing, JavaFX & SWT 3
H Swing Spiel: Maexchen: method cannot be applied to given types AWT, Swing, JavaFX & SWT 3
T Swing No suitable Method found for add AWT, Swing, JavaFX & SWT 4
H Event Handling Externe Method schliesst Hauptapplikation AWT, Swing, JavaFX & SWT 6
N Swing Exception: Comparison method violates its general contract! AWT, Swing, JavaFX & SWT 13
J Calling a method from another class AWT, Swing, JavaFX & SWT 2
hdi ViewportView der JScrollPane - welche Method synchronisiert? AWT, Swing, JavaFX & SWT 15
G Method drawLine() AWT, Swing, JavaFX & SWT 14

Ähnliche Java Themen

Neue Themen


Oben