Bildschirmleser kann nicht Text von Javafx Desktop -Anwendung lesen, die in Java Swing integriert sindJava

Java-Forum
Anonymous
 Bildschirmleser kann nicht Text von Javafx Desktop -Anwendung lesen, die in Java Swing integriert sind

Post by Anonymous »

Wir haben eine Java -Swing -Desktop -Anwendung und haben einige Seiten mit Javafx und für ein besseres UI -Design und integrierte Javafx mit JFXPanel als Brücke für Java Swing aktualisiert. Integration erfolgreich gemacht, aber Bildschirmleser kann Javafx -Komponenten Text und Beschreibung nicht lesen. Wir haben bereits alle Accessibility -Text und Beschreibung hinzugefügt, aber dennoch den Bildschirmleser wie NVDA kann die Javafx -Seite nicht lesen. Können Sie bitte helfen und eine Lösung vorschlagen, wie wir damit fortfahren können?

Code: Select all

package org.example.javafx.hellojavafx;

import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.AccessibleRole;
import javafx.scene.Scene;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.BorderPane;
import org.controlsfx.control.PopOver;

import javax.swing.*;
import java.awt.*;

public class AccessiblePaneExample {

public static void main(String[] args) {
System.setProperty("javafx.accessible.force", "true");
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("Accessible Pane Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 600);
frame.setLayout(new BorderLayout());

JFXPanel fxPanel = new JFXPanel();
frame.add(fxPanel, BorderLayout.CENTER);

Platform.runLater(() -> initFX(fxPanel));

frame.setVisible(true);
});
}

private static void initFX(JFXPanel fxPanel) {
// Button
Button button = new Button("Click Me");
button.setAccessibleRole(AccessibleRole.BUTTON);
button.setAccessibleRoleDescription("A button that can be clicked");
button.setAccessibleHelp("Clickable Button");

// ComboBox
ComboBox comboBox = new ComboBox();
comboBox.getItems().addAll("Item 1", "Item 2", "Item 3", "Item 4");
comboBox.setAccessibleRole(AccessibleRole.COMBO_BOX);
comboBox.setAccessibleRoleDescription("A combo box for selecting items");
comboBox.setAccessibleHelp("Item Selection ComboBox");

// BarChart
final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis();
final BarChart barChart = new BarChart(xAxis, yAxis);
barChart.setTitle("Item Summary");
xAxis.setLabel("Item");
yAxis.setLabel("Value");

XYChart.Series series = new XYChart.Series();
series.setName("2023");
series.getData().add(new XYChart.Data("Item 1", 50));
series.getData().add(new XYChart.Data("Item 2", 80));
series.getData().add(new XYChart.Data("Item 3", 30));
series.getData().add(new XYChart.Data("Item 4", 60));

barChart.getData().add(series);
barChart.setAccessibleRoleDescription("Bar chart showing item summary");
barChart.setAccessibleHelp("Bar chart showing item summary");

for (XYChart.Data data : series.getData()) {
PopOver popOver = new PopOver();
popOver.setContentNode(new javafx.scene.control.Label(data.getXValue() + ": " + data.getYValue()));
data.getNode().setOnMouseEntered(event -> popOver.show(data.getNode()));
data.getNode().setOnMouseExited(event -> popOver.hide());
data.getNode().setAccessibleRole(AccessibleRole.TEXT);
data.getNode().setAccessibleRoleDescription(data.getXValue() + ": " + data.getYValue());
data.getNode().setAccessibleHelp(data.getXValue() + ": " + data.getYValue());
}

// Layout
BorderPane root = new BorderPane();
root.setTop(button);
root.setCenter(comboBox);
root.setBottom(barChart);
root.setFocusTraversable(true);

Scene scene = new Scene(root, 800, 600);
fxPanel.setScene(scene);
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post