JavaFX ToggleButton Character übergeben

Blabsl

Neues Mitglied
Hallo, ich habe ein TableView mit einem ToggleButton in einer Spalte und in einer separaten Scene mehrere ToggleButtons verbunden als Gruppe. Auf den ToggleButtons sind Symbole abgebildet. Ich möchte nun, dass der Nutzer zwischen den verschiedenen Symbolen auswählen kann und das jeweilige Symbol dann auf dem ToggleButton in der TableView erscheint. Versucht habe ich es mit einem changeListener, bekomme aber nur eine NullPointException. Mache ich beim Listener iwas falsch oder muss ich beim Button im TableView noch etwas ergänzen? Bin für alle Tipps dankbar. Hier der Code:

TableViewButton:

Code:
/**
         * Button click in column to get SymbolScene
         */
        Callback<TableColumn<Points, String>, TableCell<Points, String>> cellFactory = //
                new Callback<TableColumn<Points, String>, TableCell<Points, String>>() {
                    @Override
                    public TableCell call(final TableColumn<Points, String> param) {
                        final TableCell<Points, String> cell = new TableCell<Points, String>() {

                            final ToggleButton pointsSymbolButton = new ToggleButton("                             ");
                        
                            @Override
                            public void updateItem(String item, boolean empty) {
                                super.updateItem(item, empty);
                                if (empty) {
                                    setGraphic(null);
                                    setText(null);                            
                                } else {
                                    pointsSymbolButton.setOnAction(new EventHandler<ActionEvent>() {
                                        public void handle(ActionEvent event) {
                                            try {
                                                FXMLLoader fxmlLoader = new FXMLLoader(
                                                getClass().getResource("/address/view/SymbolView.fxml"));
                                                Parent root1 = (Parent) fxmlLoader.load();
                                                Stage stage = new Stage();
                                                stage.setScene(new Scene(root1));
                                                stage.show();
                                            } catch (Exception e) {
                                                e.printStackTrace();
                                            }
                                        }
                                    });
                                    setGraphic(pointsSymbolButton);
                                    pointsSymbolButton.setStyle("-fx-border-color: transparent; -fx-border-width: 0; -fx-background-radius: 0; -fx-background-color: transparent;");
                                
                                }
                            }
                        };
                        return cell;
                    }
                };

        pointsSymbolColumn.setCellFactory(cellFactory);


Separate Scene mit ToggleButtons:
Code:
public SymbolTableCell() {
    }
public void buildGridPaneAddButtons() {

        //empty the GridPane
        gridPane.getChildren().clear();

        //create GridPane
        int numRows = 14;
        int numColumns = 14;
        for (int row = 0; row < numRows; row++) {
            RowConstraints rc = new RowConstraints();
            rc.setFillHeight(true);
            rc.setVgrow(Priority.ALWAYS);
            gridPane.getRowConstraints().add(rc);
        }

        for (int col = 0; col < numColumns; col++) {
            ColumnConstraints cc = new ColumnConstraints();
            cc.setFillWidth(true);
            cc.setHgrow(Priority.ALWAYS);
            gridPane.getColumnConstraints().add(cc);
        }

        String selectedFamily = listView.getSelectionModel().getSelectedItem();
        if (selectedFamily != null) {
            // System.out.println("selected Font: '" + selectedFamily + "'");

            //Group for Buttons
            ToggleGroup groupForToggleButtons = new ToggleGroup();

            //create ToggleButtons raster
            for (int i = 0; i < 196; i++) {
                Font selectedFont = Font.font(selectedFamily, 18.0);
                Character character = new Character((char) (i));
                java.awt.Font awtFont = new java.awt.Font(selectedFamily, 0, 40);

                // int i 9,10,13 and 32 have empty characters, so we won't
                // display them in the panel
                if (awtFont.canDisplay(character.charValue()) && (i != 9) && (i != 10) && (i != 13) && (i != 32)) {

                    // System.out.println("create Button: int='" + i + "' ==>
                    // character='" + character + "'");

                    ToggleButton buttonForSymbols = createButton("" + character);
                    buttonForSymbols.setToggleGroup(groupForToggleButtons);
                    buttonForSymbols.setFont(selectedFont);
                    buttonForSymbols.setAlignment(Pos.CENTER);
                    buttonForSymbols.setUserData("" + character);

                    // Create BorderPane with Character(Top), Separator(Center),
                    // Label(Bottom)
                    HBox symbolHBox = new HBox();
                    symbolHBox.getChildren().add(buttonForSymbols);

                    Label symbolLabel = new Label();
                    symbolLabel.setText("" + i);

                    Separator symbolSeparator = new Separator();

                    BorderPane symbolBorderPane = new BorderPane();
                    symbolBorderPane.setTop(symbolHBox);
                    symbolBorderPane.setCenter(symbolSeparator);
                    symbolBorderPane.setBottom(symbolLabel);
                    symbolLabel.setAlignment(Pos.CENTER);
                    symbolBorderPane.setAlignment(symbolLabel, Pos.CENTER);

                    // when ToggleButton selected, set new Style of BorderPane
                    // (red border)
                    symbolBorderPane.styleProperty()
                            .bind(Bindings.when(buttonForSymbols.selectedProperty())
                                    .then("-fx-border-color: red; -fx-border-width: 2.5;")
                                    .otherwise("-fx-border-color: black; -fx-border-width: 1;"));

                    gridPane.add(symbolBorderPane, i % numRows, i / numColumns);

                    groupForToggleButtons.selectedToggleProperty().addListener(new ChangeListener<Toggle>() {
                        public void changed(ObservableValue<? extends Toggle> ov, Toggle toggle, Toggle new_toggle) {
                            if (new_toggle != null)
                                pointsSymbolButton.setText((String) groupForToggleButtons.getSelectedToggle().getUserData());
                        }
                    });            
                }
            }
        }
    }
    


    // ToggleButton to use .then .otherwise style properties
    private ToggleButton createButton(String text) {
        ToggleButton buttonPanelForSymbols = new ToggleButton(text);
        buttonPanelForSymbols.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);    
        buttonPanelForSymbols.setStyle(
                "-fx-border-color: transparent; -fx-border-width: 0; -fx-background-radius: 0; -fx-background-color: transparent;");
        return buttonPanelForSymbols;
    }

Hier noch ein Screenshot welcher es vll. besser erklärt was ich will :)
https://pl.vc/19nl24
 
Zuletzt bearbeitet:

dzim

Top Contributor
1) Wo kommt es zum Fehler (Zeile in deinem Code)
2) Ich verstehe nicht, wie es aussehen soll: Soll woanders ein Toggle sein und in der Tabelle nur das Ergebnis? Oder sollen die Toggles in der Zelle der Tabelle sein?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Swing Togglebutton AWT, Swing, JavaFX & SWT 5
C JavaFX Character Comparator für TableColumn AWT, Swing, JavaFX & SWT 0
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
B Slider-Wert an anderen Slider übergeben AWT, Swing, JavaFX & SWT 5
D JavaFX Ein Parameter von einem Stage(GUI) zu einem anderen übergeben AWT, Swing, JavaFX & SWT 6
FRI3ND JavaFX: Wie kann ich einer Scene Argumente übergeben? AWT, Swing, JavaFX & SWT 14
karlmasutra JavaFX Verzeichnispfad wählen und an Textfeld übergeben AWT, Swing, JavaFX & SWT 2
A Swing JLabel als Parameter übergeben AWT, Swing, JavaFX & SWT 9
K JavaFX Titel und Fenstergröße aus Main.java übergeben AWT, Swing, JavaFX & SWT 0
T JavaFX Model Daten übergeben AWT, Swing, JavaFX & SWT 4
Z ActionListener Variable übergeben AWT, Swing, JavaFX & SWT 12
L Input aus Sub-Fenster Startfenster übergeben AWT, Swing, JavaFX & SWT 5
C JComboBox Objecte übergeben und Eintrag auswählen AWT, Swing, JavaFX & SWT 3
E JavaFX Eingabeparamter vom Typ path übergeben AWT, Swing, JavaFX & SWT 2
A Slider soll einen Wert übergeben AWT, Swing, JavaFX & SWT 1
boscho87 JavaFX Variabeln an neue Scene übergeben AWT, Swing, JavaFX & SWT 0
Z Wird die Variable nicht übergeben ? AWT, Swing, JavaFX & SWT 16
L ActionPerformed Variable übergeben AWT, Swing, JavaFX & SWT 3
M Swing JTextField getText Mehtode übergeben in eine Klasse zu einer Rechnung AWT, Swing, JavaFX & SWT 1
M Java FX Daten an Controller übergeben AWT, Swing, JavaFX & SWT 3
T action für Button übergeben - bitte um Segen AWT, Swing, JavaFX & SWT 1
M JavaFX Parameter für Custom Control in FXML übergeben? AWT, Swing, JavaFX & SWT 4
J JavaFX Variable an neue Scene übergeben AWT, Swing, JavaFX & SWT 8
S ComboBox-Werte aus einem Array an Textfields übergeben AWT, Swing, JavaFX & SWT 3
M Event Handling ActionListener übergeben ich checks net AWT, Swing, JavaFX & SWT 4
J Zwei GUIs - Nach button-Klick soll ein Wert an die andere GUI übergeben werden AWT, Swing, JavaFX & SWT 15
D Daten von JDialog an JTable in JFrame übergeben AWT, Swing, JavaFX & SWT 7
M private Variable übergeben AWT, Swing, JavaFX & SWT 12
C Gedrückter Button in andere Klasse übergeben AWT, Swing, JavaFX & SWT 5
M Dialog soll etwas an "Oberklasse" übergeben AWT, Swing, JavaFX & SWT 3
L Graphics Objekt - aus anderer Klasse aufrufen / übergeben AWT, Swing, JavaFX & SWT 5
F Wert durch ActionListener an Klasse übergeben AWT, Swing, JavaFX & SWT 3
C File-Objekte an JList übergeben und abrufen AWT, Swing, JavaFX & SWT 6
D Buttons übergeben AWT, Swing, JavaFX & SWT 2
B Anonymer Klass Parameter übergeben AWT, Swing, JavaFX & SWT 3
P 2D-Grafik String übergeben, PNG soll rauskommen AWT, Swing, JavaFX & SWT 9
M ISelection an Filter übergeben AWT, Swing, JavaFX & SWT 2
J Swing kann window nicht übergeben AWT, Swing, JavaFX & SWT 14
V Parameter an Runnable-Objekt übergeben AWT, Swing, JavaFX & SWT 6
Dit_ Objekt mit ActionEvent übergeben AWT, Swing, JavaFX & SWT 2
K TableModel Daten übergeben AWT, Swing, JavaFX & SWT 9
N Variablen an JDialog übergeben AWT, Swing, JavaFX & SWT 2
N JTable als parameter übergeben AWT, Swing, JavaFX & SWT 4
M Swing ComboBox ein SelectedItem übergeben/anzeigen AWT, Swing, JavaFX & SWT 7
J paintComponent() übergeben AWT, Swing, JavaFX & SWT 4
E ResultSet als Array an JTable übergeben AWT, Swing, JavaFX & SWT 9
A Swing JFrame Werte aus JDialog übergeben AWT, Swing, JavaFX & SWT 4
U Swing Eingabe von JTextField in einen String übergeben. AWT, Swing, JavaFX & SWT 3
S Swing Bei Klick auf OK Daten übergeben AWT, Swing, JavaFX & SWT 6
T Panelgröße mit übergeben? AWT, Swing, JavaFX & SWT 3
B ActionEvent Dateipfad als String übergeben AWT, Swing, JavaFX & SWT 11
SebSnake Popup-JFrame soll Daten an Parent-JFrame übergeben AWT, Swing, JavaFX & SWT 3
G Variblenwert zwischen zwei Klassen übergeben AWT, Swing, JavaFX & SWT 3
Daniel_L Swing-Komponenten als Parameter an eine Klasse übergeben? AWT, Swing, JavaFX & SWT 4
C Parameter von GUI an Klasse übergeben. AWT, Swing, JavaFX & SWT 2
K Focus an das JPanel übergeben AWT, Swing, JavaFX & SWT 2
S String an eine andere Klasse im anderem package übergeben AWT, Swing, JavaFX & SWT 3
C Parameter übergeben in Eclipse AWT, Swing, JavaFX & SWT 3
P Bei Buttons Werte übergeben AWT, Swing, JavaFX & SWT 2
R JFilechooser: gewählte Datei in mein FileReader übergeben AWT, Swing, JavaFX & SWT 18
O Titel in "Subwin" übergeben AWT, Swing, JavaFX & SWT 3
E Variable übergeben AWT, Swing, JavaFX & SWT 4
M Wert von einem Fenster zum anderen übergeben AWT, Swing, JavaFX & SWT 3
G JTable setValueAt und getValueAt übergeben columnIndex nicht AWT, Swing, JavaFX & SWT 6
B JTable String übergeben AWT, Swing, JavaFX & SWT 3
S ButtonGroup übergeben! AWT, Swing, JavaFX & SWT 3
A Vektor in Anonyme Klasse übergeben AWT, Swing, JavaFX & SWT 2
G variable übergeben in andere klasse AWT, Swing, JavaFX & SWT 4
M Exception Meldung aus Thread an jTextField1 übergeben AWT, Swing, JavaFX & SWT 6
D Wert von Kasse2 an Klasse1 übergeben AWT, Swing, JavaFX & SWT 3
A String aus einem JTextField an ein JLabel übergeben AWT, Swing, JavaFX & SWT 10
S Methode übergeben AWT, Swing, JavaFX & SWT 16
K Swing-Komponente casten und übergeben AWT, Swing, JavaFX & SWT 4
M Parameter übergeben AWT, Swing, JavaFX & SWT 13
T Jtable falscher Wert wird übergeben AWT, Swing, JavaFX & SWT 13
R Pfadname herrausfinden und an Textfeld übergeben AWT, Swing, JavaFX & SWT 13
K Methode übergeben AWT, Swing, JavaFX & SWT 8
S JEditorPane setText() Problem mit String übergeben AWT, Swing, JavaFX & SWT 3
L-ectron-X Daten aus einem JDialog einem JFrame übergeben AWT, Swing, JavaFX & SWT 4
K String übergeben AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben