Программисты JAVA общаются здесь
Anonymous
Как динамически обновлять пользовательский интерфейс в javaFX?
Сообщение
Anonymous » 14 дек 2024, 15:55
Извините, если это глупый вопрос, я впервые использую javafx и пытаюсь изучить. Я создаю проект JavaFX, который включает обновление содержимого панели путем щелчка элемента. Это работает следующим образом: при нажатии на элемент данные будут переданы в карточку выбранного товара. Однако, когда я пытаюсь это сделать, хотя он обновляет метки и изображения, он не показывает их на выбранной карточке товара. Коды ниже — это контроллер, который обновляет компоненты в выбранной карточке товара.
Код: Выделить всё
package Controller;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.VBox;
import application.MyListener;
import item.*;
public class OrderController {
SceneLoader object = new SceneLoader();
MyListener myListener;
private Image image;
@FXML
private ImageView ImageChosen;
@FXML
private Button addCartButton;
@FXML
private VBox buyBox;
@FXML
private AnchorPane buyPanel;
@FXML
private VBox chosenSeed;
@FXML
private Label descriptionLabel;
@FXML
private Button fruitsButton;
@FXML
private Button herbButton;
@FXML
private AnchorPane itemPane;
@FXML
private Label nameLabel;
@FXML
private Label priceLabel;
@FXML
private Button vegetableButton;
@FXML
private Button detailsButton;
@FXML
public void switchSelection(String rqstPane) {
try {
itemPane.getChildren().clear();
Parent newPane = object.getPage(rqstPane);
if (newPane != null) {
itemPane.getChildren().add(newPane);
} else {
System.out.println("Failed to load pane: " + rqstPane);
}
} catch (Exception e) {
System.out.println("Error while switching pane: " + e.getMessage());
e.printStackTrace();
}
}
@FXML
private void selectButton(Button selectedButton) {
vegetableButton.getStyleClass().remove("selected");
fruitsButton.getStyleClass().remove("selected");
herbButton.getStyleClass().remove("selected");
selectedButton.getStyleClass().add("selected");
}
@FXML
void fruitsPage() {
switchSelection ("Fruits");
selectButton (fruitsButton);
}
@FXML
void herbsPage() {
switchSelection ("Herbs");
selectButton (herbButton);
}
@FXML
void vegetablePage() {
switchSelection ("Vegetables");
selectButton (vegetableButton);
}
public void setChosenItem (Ardealya item) {
if (item == null) return;
Platform.runLater(() -> {
nameLabel.setText(item.getItemName());
priceLabel.setText("Php " + item.getPrice());
descriptionLabel.setText(item.getDescription());
// Ensure the image is updated correctly
Image image = new Image(getClass().getResourceAsStream(item.getImageSource()));
ImageChosen.setImage(image);
buyPanel.setVisible(true);
// Force the layout to update
buyPanel.requestLayout();
});
System.out.println("\nName Label Updated: " + nameLabel.getText());
System.out.println("Price Label Updated: " + priceLabel.getText());
System.out.println("Description Label Updated: " + descriptionLabel.getText());
System.out.println("Image Updated: " + item.getImageSource());
}
@FXML
private void calculator () {
new SimpleCalculatorClass ();
}
}
это запись моей проблемы:
https://drive.google.com/file/d/17KOrGr ... sp=sharing
Я попробовал реле, которое заставляет пользовательский интерфейс обновляться, но мне это тоже не помогает.
Подробнее здесь:
https://stackoverflow.com/questions/792 ... -in-javafx
1734180907
Anonymous
Извините, если это глупый вопрос, я впервые использую javafx и пытаюсь изучить. Я создаю проект JavaFX, который включает обновление содержимого панели путем щелчка элемента. Это работает следующим образом: при нажатии на элемент данные будут переданы в карточку выбранного товара. Однако, когда я пытаюсь это сделать, хотя он обновляет метки и изображения, он не показывает их на выбранной карточке товара. Коды ниже — это контроллер, который обновляет компоненты в выбранной карточке товара. [code]package Controller; import javafx.application.Platform; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.Parent; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.VBox; import application.MyListener; import item.*; public class OrderController { SceneLoader object = new SceneLoader(); MyListener myListener; private Image image; @FXML private ImageView ImageChosen; @FXML private Button addCartButton; @FXML private VBox buyBox; @FXML private AnchorPane buyPanel; @FXML private VBox chosenSeed; @FXML private Label descriptionLabel; @FXML private Button fruitsButton; @FXML private Button herbButton; @FXML private AnchorPane itemPane; @FXML private Label nameLabel; @FXML private Label priceLabel; @FXML private Button vegetableButton; @FXML private Button detailsButton; @FXML public void switchSelection(String rqstPane) { try { itemPane.getChildren().clear(); Parent newPane = object.getPage(rqstPane); if (newPane != null) { itemPane.getChildren().add(newPane); } else { System.out.println("Failed to load pane: " + rqstPane); } } catch (Exception e) { System.out.println("Error while switching pane: " + e.getMessage()); e.printStackTrace(); } } @FXML private void selectButton(Button selectedButton) { vegetableButton.getStyleClass().remove("selected"); fruitsButton.getStyleClass().remove("selected"); herbButton.getStyleClass().remove("selected"); selectedButton.getStyleClass().add("selected"); } @FXML void fruitsPage() { switchSelection ("Fruits"); selectButton (fruitsButton); } @FXML void herbsPage() { switchSelection ("Herbs"); selectButton (herbButton); } @FXML void vegetablePage() { switchSelection ("Vegetables"); selectButton (vegetableButton); } public void setChosenItem (Ardealya item) { if (item == null) return; Platform.runLater(() -> { nameLabel.setText(item.getItemName()); priceLabel.setText("Php " + item.getPrice()); descriptionLabel.setText(item.getDescription()); // Ensure the image is updated correctly Image image = new Image(getClass().getResourceAsStream(item.getImageSource())); ImageChosen.setImage(image); buyPanel.setVisible(true); // Force the layout to update buyPanel.requestLayout(); }); System.out.println("\nName Label Updated: " + nameLabel.getText()); System.out.println("Price Label Updated: " + priceLabel.getText()); System.out.println("Description Label Updated: " + descriptionLabel.getText()); System.out.println("Image Updated: " + item.getImageSource()); } @FXML private void calculator () { new SimpleCalculatorClass (); } } [/code] это запись моей проблемы: https://drive.google.com/file/d/17KOrGrjkfDi3cBYF2YUKyRzyUu47VjtV/view?usp=sharing Я попробовал реле, которое заставляет пользовательский интерфейс обновляться, но мне это тоже не помогает. Подробнее здесь: [url]https://stackoverflow.com/questions/79280658/how-to-dynamically-update-ui-in-javafx[/url]