0 Daumen
412 Aufrufe

Ich arbeite gerade mit JavaFX und möchte, wenn ich auf den Button drücke das beim DatePicker das beim heutigen Datum (wenn ich morgen das Programm starte soll das beim morgigen Datum sein, also immer das aktuelle Datum) dort eine kleine Zahl zu sehen ist (geht auch wenn man mit der Maus darüber geht). Drücke ich den Button erneut soll die Zahl erhöht werden (quasi wie in einer Schleife i++). Hat jemand hierfür eine Lösung?

Weiter unten sieht ihr meinen Code.

---------------------------

Main.java

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {

  @Override
  public void start(Stage primaryStage) throws Exception{
      Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
      primaryStage.setTitle("Hello World");
      primaryStage.setScene(new Scene(root, 600, 400));
      primaryStage.show();
  }


  public static void main(String[] args) {
      launch(args);
  }
}

Controller.java

package sample;


import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.DateCell;
import javafx.scene.control.DatePicker;
import javafx.scene.control.Label;

import javax.security.auth.callback.Callback;
import java.net.URL;
import java.time.LocalDate;
import java.util.Date;
import java.util.ResourceBundle;

public class Controller {

  @FXML
  private Button button1;


  @FXML
  private DatePicker datePicker;





}



sample.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.DatePicker?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
<children>
    <Button fx:id="button1" layoutX="344.0" layoutY="68.0" mnemonicParsing="false" text="selected" />
    <DatePicker fx:id="datePicker" layoutX="45.0" layoutY="56.0" />
</children>
</AnchorPane>

Avatar von

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Um die gewünschte Funktionalität in deinem JavaFX Programm zu implementieren, wirst du einige Änderungen am Controller-Klasse vornehmen müssen. Die Grundidee besteht darin, einen Zähler einzuführen, der jedes Mal, wenn auf den Button geklickt wird, inkrementiert wird. Anschließend soll dieser Zähler in Bezug auf das aktuelle Datum visuell im DatePicker dargestellt oder angezeigt werden, wenn man mit der Maus darüber fährt.

JavaFX bietet jedoch keine direkte Möglichkeit, Zahlen oder irgendeine Art von Metadaten direkt im DatePicker selbst zu annotieren. Eine übliche praktische Lösung ist, die Datumsauswahl visuell zu ändern, um eine Benutzerinteraktion darzustellen, oder ein separates Label zur Anzeige des Zählers zu verwenden. Beachte jedoch, dass JavaFX's DatePicker keine direkte Unterstützung für das Hinzufügen solcher Metadaten direkt in den Kalender bietet, weswegen die Implementierung etwas anders als direkt gefragt erfolgt.

Hier ist ein Beispiel-Code, wie du einen Zähler im Zusammenhang mit dem gewählten Datum implementieren kannst, und die Auswahl in einem Label anzeigen könntest, da eine direkte Manipulation des DatePicker-UIs für spezielle Annotations beschränkt ist:

Controller.java

java
package sample;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.DatePicker;
import javafx.scene.control.Label;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.Map;

public class Controller {
    @FXML private DatePicker datePicker;
    @FXML private Label dateLabel; // Stelle sicher, dass du dieses Label in deiner FXML hast.
    private Map<LocalDate, Integer> dateCounter = new HashMap<>(); // Zum Speichern des Zählerstands für bestimmte Daten

    // Diese Methode wird bei Button-Klick aufgerufen
    @FXML
    private void incrementAndShowDateCounter(ActionEvent event) {
        LocalDate today = LocalDate.now(); // Das heutige Datum holen
        // Den Zählerstand für das heutige Datum holen oder auf 0 setzen, wenn es heute noch keinen Zähler gibt
        int count = dateCounter.getOrDefault(today, 0);
        count++; // Zählerstand erhöhen
        dateCounter.put(today, count); // Aktualisierten Zählerstand speichern
        
        // Den neuen Zählerstand im Label anzeigen
        dateLabel.setText("Zähler für " + today + ": " + count);
    }

}


sample.fxml

Stelle sicher, dass du ein Label mit fx:id="dateLabel" in deine FXML Datei hinzufügst. Es könnte ungefähr so aussehen:

xml
<Label fx:id="dateLabel" layoutX="50.0" layoutY="100.0" />


Halte einfach das Layout deiner Wahl bei. Wichtig ist, dass das Label passend platziert und über fx:id richtig an den Controller angebunden wird.

Mit dieser Lösung kannst du einen Zähler für das aktuelle Datum führen und diesen in einem Label anzeigen. Beachte, dass der Zähler im dateCounter-Map für jedes Datum separat geführt wird. Dadurch kannst du das Datum flexibel wechseln und für jedes Datum einen separaten Zählerstand führen. Da JavaFX allerdings keine native Unterstützung bietet, Zähler oder andere Metadaten direkt im DatePicker-UI zu präsentieren, wäre die Anzeige in einem Label eine praktikable Alternative.
Avatar von 4,6 k

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community