JavaFX Boolean ändern Table View

Samofan

Aktives Mitglied
Hallo,

ich brauche noch einmal Eure Hilfe. Ich hab das Internet durchsucht und auch etwas dazu gefunden, nur weiß ich nicht, wie ich das in meinem Programm umgesetzt bekomme. Ich habe eine Spalte in einer JavaFX Table View, die einen Boolean als Bild anzeigt, welcher aus einer Datenbank gelesen wird. Jetzt hätte ich gerne, dass der Benutzer mit einem Doppelklick auf eine Zelle die Frage gestellt bekommt, ob er den Wert ändern möchte. Es reicht auch erstmal wenn auf der Konsole "double clicked" oder sowas erscheint. Ab da dürfte ich dann weiter kommen. Meine Cell Factory sieht so aus:

Java:
remoteColumn.setCellFactory(col -> new TableCell<Data, Boolean>()
    {
      private final ImageView imageView = new ImageView();


      {
        // initialize ImageView + set as graphic
        imageView.setFitWidth(20);
        imageView.setFitHeight(20);
        setGraphic(imageView);
      }

      @Override
      protected void updateItem(Boolean item, boolean empty)
      {
        if (empty || item == null)
        {
          // no image for empty cells
          imageView.setImage(null);
        }
        else
        {
          // set image for non-empty cell
          imageView.setImage(item ? imageTrue : imageFalse);
        }
      }

      @Override
      public Bounds sceneToLocal(Bounds sceneBounds)
      {
        // TODO: Auto-generated method stub
        return super.sceneToLocal(sceneBounds);
      }
    });
Ich weiß jetzt nicht, ob ich ein MouseListener in diese CellFactory einbauen soll oder ob ich eine neue anlegen soll. Ihr merkt, ich bin ein bisschen ratlos. Die Seiten habe ich mir grade schon angeschaut:
https://stackoverflow.com/questions...-a-tableview-cell-in-javafx?noredirect=1&lq=1
https://stackoverflow.com/questions/26563390/detect-doubleclick-on-row-of-tableview-javafx
Ich will wirklich nur diese eine Spalte überprüfen und nicht die komplette Zeile, da ich in anderen Spalten auch weitere Booleans habe, die ebenfalls mit dieser Methode verändert werden sollen. Ich hoffe, dass das verständlich ist
 

MoxxiManagarm

Top Contributor
Ich bin kein Profi in JavaFX. Aber...

https://stackoverflow.com/questions/26563390/detect-doubleclick-on-row-of-tableview-javafx

Du hast einen Link mit TableRow. Eine TableRow ist ein Parent. Eine TableCell kannst du sicherlich mit https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Parent.html#getChildren--
erreichen. Eine TableCell ist auch ein Node, damit dürfte das Event auch hier registriert werden können.

Best guess:
Java:
TableView<Item> table = new TableView<>();
       table.setRowFactory(tv -> {
           TableRow<Item> row = new TableRow<>();
           TableCell<Item, Boolean> cell = row.getChildren().get(columnOfTheBoolean);
           cell.setOnMouseClicked(event -> {
               if (event.getClickCount() == 2 && (! cell.isEmpty()) ) {
                   // do something here
               }
           });
           return row ;
       });
 

Samofan

Aktives Mitglied
Ich habe es jetzt mit
Java:
tableView.setRowFactory(tv ->
    {
      TableRow<Data> row = new TableRow<>();
      TableCell<Data, Boolean> cell = row.getChildren().get(remoteColumn);
       cell.setOnMouseClicked(event -> {
               if (event.getClickCount() == 2 && (! cell.isEmpty()) ) {
                   System.out.println("Test");
               }
           });
           return row ;
       });
versucht aber leider klappt es nicht so ganz, wie ich will. Ich bekomme einfach nicht die Zelle der Zeile. Als Fehler bekomme ich:
Code:
getChildren() has protected access in Parent
und
Code:
incompatible types: TableColumn<Data,Boolean> cannot be converted to int
. Wenn ich "TableCell" rausnehme und sage
Java:
cell.setOnMouseClicked(event ->...
funktioniert alles wunderbar. Wie komme ich an die Zelle ran?
 

Robat

Top Contributor
Zum Bleistift:
Java:
column.setCellFactory(tableCell -> {
    TableCell<Wrapper, String> cell = new TableCell<>() {
        @Override
        protected void updateItem(String item, boolean empty) {
            super.updateItem(item, empty);
            setText(empty ? "" : item);
        }
    };
    cell.setOnMouseClicked(event -> {
        if(event.getClickCount() == 2) {
            System.out.println("Cell [" + cell.getText() + "] clicked");
        }
    });
    return cell;
});
 

Samofan

Aktives Mitglied
So hat es geklappt aber die Spalte zeigt die Bilder, die ich vorher drin hatte nicht mehr an und der Inhalt ist null...
Java:
remoteColumn.setCellFactory(tableCell ->
    {
      TableCell<Data, Boolean> cell = new TableCell()
      {
        protected void updateItem(String item, boolean empty)
        {
          super.updateItem(item, empty);
          setText(empty ? "" : item);
        }
      };
      cell.setOnMouseClicked(event ->
      {
        if (event.getClickCount() == 2)
        {
          System.out.println("Cell [" + cell.getText() + "] clicked");
        }
      });
      return cell;
    });
 

Robat

Top Contributor
Du darfst es auch nicht einfach nur rein kopieren - das war nur ein Beispiel ;)
Deine updateItem() Methode muss schon so bleiben wie sie war ;)
 

Samofan

Aktives Mitglied
In etwa so? Weiß grade leider echt nicht weiter...
Java:
remoteColumn.setCellFactory(col -> new TableCell<Data, Boolean>()
    {
      private final ImageView imageView = new ImageView();


      {
        // initialize ImageView + set as graphic
        imageView.setFitWidth(20);
        imageView.setFitHeight(20);
        setGraphic(imageView);

//dieser Teil funktioniert nicht. Ich kann kein MouseEvent auf die Spalte setzen
        col.onMouseClicked(event ->
        {
          if (event.getClickCount() == 2)
          {
            System.out.println("Cell [" + col.getText() + "] clicked");
          }
        });
      }

      @Override
      protected void updateItem(Boolean item, boolean empty)
      {
        if (empty || item == null)
        {
          // no image for empty cells
          imageView.setImage(null);
        }
        else
        {
          // set image for non-empty cell
          imageView.setImage(item ? imageTrue : imageFalse);
        }
      }

      @Override
      public Bounds sceneToLocal(Bounds sceneBounds)
      {
        // TODO: Auto-generated method stub
        return super.sceneToLocal(sceneBounds);
      }

      @Override
      public Point2D sceneToLocal(Point2D scenePoint)
      {
        // TODO: Auto-generated method stub
        return super.sceneToLocal(scenePoint);
      }
    });
Das "col.onMouseClicked(event ->" funktioniert leider nicht
 
Zuletzt bearbeitet:

Robat

Top Contributor
Java:
remoteColumn.setCellFactory(col -> {
    TableCell<Data, Boolean> cell = new TableCell<Data, Boolean>()
    {
        @Override
        protected void updateItem(Boolean item, boolean empty)
        {
            final ImageView imageView = new ImageView();
            imageView.setFitHeight(20);
            imageView.setFitWidth(20);

            if (empty || item == null)
            {
                // no image for empty cells
                imageView.setImage(null);
            }
            else
            {
                // set image for non-empty cell
                imageView.setImage(item ? imageTrue : imageFalse);
            }
        }
        @Override
        public Bounds sceneToLocal(Bounds sceneBounds)
        {
            return super.sceneToLocal(sceneBounds);
        }
    };
    cell.onMouseClicked(event ->
    {
        if (event.getClickCount() == 2)
        {
            System.out.println("Cell [" + col.getText() + "] clicked");
        }
    });
});
 

Samofan

Aktives Mitglied
Vielen, vielen Dank! So klappt es. Das ist mir leider noch etwas zu hoch. Deswegen wusste ich echt nicht was zu tun war. Dann werde ich mich jetzt mal dran machen, den Code zu verstehen ;)

Java:
    remoteColumn.setCellFactory(col ->
    {
      TableCell<Data, Boolean> cell = new TableCell<Data, Boolean>()
      {
        @Override
        protected void updateItem(Boolean item, boolean empty)
        {
          final ImageView imageView = new ImageView();
          imageView.setFitHeight(20);
          imageView.setFitWidth(20);
          setGraphic(imageView);
          if (empty || item == null)
          {
            // no image for empty cells
            imageView.setImage(null);
          }
          else
          {
            // set image for non-empty cell
            imageView.setImage(item ? imageTrue : imageFalse);
          }
        }
        @Override
        public Bounds sceneToLocal(Bounds sceneBounds)
        {
          return super.sceneToLocal(sceneBounds);
        }
        @Override
        public Point2D sceneToLocal(Point2D scenePoint)
        {
          // TODO: Auto-generated method stub
          return super.sceneToLocal(scenePoint);
        }
      };
      cell.setOnMouseClicked(event ->
      {
        if (event.getClickCount() == 2)
        {
          System.out.println("Cell [" + col.getText() + "] clicked");
        }
      });
      return cell;
    });
 

Samofan

Aktives Mitglied
Habe meine ganze initialize-Methode in einzelne Methoden zusammengefasst und aufgeräumt. So ist der Code viel besser lesbar. Danke. Durch euch werde ich jeden Tag ein Stück besser
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P thread nimmt veränderte boolean nicht AWT, Swing, JavaFX & SWT 7
maximstein JavaFX WebView - java.lang.NoSuchMethodError: 'boolean com.sun.prism.ResourceFactory.isDisposed()' AWT, Swing, JavaFX & SWT 4
Z Methode bei Boolean change neu Ausführen AWT, Swing, JavaFX & SWT 9
B TableCellRenderer rendert Integer/Boolean Felder nicht AWT, Swing, JavaFX & SWT 4
M JavaFX TableView mit CheckBox als Boolean AWT, Swing, JavaFX & SWT 5
C Swing Was macht die Methode "setDataProviderCreditShown(boolean b)" AWT, Swing, JavaFX & SWT 4
H Frage zu übergebenem Vector bzw. Boolean AWT, Swing, JavaFX & SWT 3
Z Swing JTable: Boolean Renderer AWT, Swing, JavaFX & SWT 3
G Auf Canvas zeichnen nur über boolean-Abfragen? AWT, Swing, JavaFX & SWT 5
F LayoutManager und Component.setVisible(boolean) AWT, Swing, JavaFX & SWT 2
J SwingWorker, get und boolean AWT, Swing, JavaFX & SWT 6
V JTable - farbige Boolean-Felder - geht das? AWT, Swing, JavaFX & SWT 3
G Action.setCheck(boolean)? AWT, Swing, JavaFX & SWT 6
E JComboBox Methode setItemEnabeld(boolean) AWT, Swing, JavaFX & SWT 6
T Boolean an beliebiger Stelle in Tabelle AWT, Swing, JavaFX & SWT 13
F JTable CellRenderer über boolean AWT, Swing, JavaFX & SWT 12
R JTable - Boolean-Wert aus Zelle auslesen. AWT, Swing, JavaFX & SWT 9
H Swing Componente zur Läufzeit ändern AWT, Swing, JavaFX & SWT 3
H JDialog in Größe ändern - Resize-Cursor bleibt betreten der Komponente AWT, Swing, JavaFX & SWT 1
H AWT Dialog Größe ändern - Schwarzer Inhalt beim groß ziehen AWT, Swing, JavaFX & SWT 1
_user_q ChoiceBox Elemente: Sprache ändern AWT, Swing, JavaFX & SWT 7
raeuchertofu Text von JTextfield und JLabel ändern AWT, Swing, JavaFX & SWT 2
B Deckraft ändern AWT, Swing, JavaFX & SWT 1
Davee JavaFX ListView = null wenn ich sie in Laufzeit ändern will! AWT, Swing, JavaFX & SWT 16
missy72 JavaFX RowFactory Schriftfarbe ändern AWT, Swing, JavaFX & SWT 6
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
Hatsi09 GUI Input Farbe ändern AWT, Swing, JavaFX & SWT 0
W JavaFX CSS ändern wirft NPE AWT, Swing, JavaFX & SWT 8
E Keystroke für Ausschneiden läßt sich nicht ändern AWT, Swing, JavaFX & SWT 2
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
sascha-sphw JavaFX ListCell höhe verändert sich beim ändern der Text-Farbe AWT, Swing, JavaFX & SWT 14
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
R Swing JTextField - Schriftgröße je nach Länge und Größe ändern AWT, Swing, JavaFX & SWT 0
OSchriever Layout über Radiobuttons ändern AWT, Swing, JavaFX & SWT 4
S Swing JLabel Text mit der Zeit ändern AWT, Swing, JavaFX & SWT 1
S JavaFX ListView Inhalte während Laufzeit ändern AWT, Swing, JavaFX & SWT 23
Shallty JavaFX MenuItem (Info) Icon ändern AWT, Swing, JavaFX & SWT 7
J Schriftart über einen Button ändern AWT, Swing, JavaFX & SWT 1
J JButton zum ändern Der Schriftart/Schriftgröße AWT, Swing, JavaFX & SWT 2
C Bilder so einbinden, dass sie sich ändern AWT, Swing, JavaFX & SWT 6
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
L JavaFX TableView kein content text ändern AWT, Swing, JavaFX & SWT 2
I Java Bildfarbe ändern wie bei Photoshop AWT, Swing, JavaFX & SWT 9
cool_brivk24 Swing Button Farbe ändern AWT, Swing, JavaFX & SWT 2
B Observer Pattern JLabel ändern AWT, Swing, JavaFX & SWT 7
K JavaFX TextInputDialog Button Text ändern AWT, Swing, JavaFX & SWT 1
Tronert JavaFX Linienstärke eines Separators ändern? AWT, Swing, JavaFX & SWT 3
das_leon AWT Button Design ändern AWT, Swing, JavaFX & SWT 5
S JavaFX GridPane Zellen Seitenverhätnis passend ändern mit der Stage AWT, Swing, JavaFX & SWT 0
S Parameter ändern in try/catch AWT, Swing, JavaFX & SWT 5
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
J 2D-Grafik Background einer Jpanel Klasse ändern AWT, Swing, JavaFX & SWT 1
G JavaFX TableView Wert in Spalte ändern AWT, Swing, JavaFX & SWT 0
C JavaFX Inhalt eines SplitPane's durch Menü-Auswahl ändern? AWT, Swing, JavaFX & SWT 13
DaCrazyJavaExpert Swing Größe des JPanel ändern/wird nicht geändert. AWT, Swing, JavaFX & SWT 3
L JavaFX button über andere Klasse ändern AWT, Swing, JavaFX & SWT 7
T JavaFX Text des ProgressIndicators ändern AWT, Swing, JavaFX & SWT 2
T JavaFx Examples ändern liefert unerwartetes Ergebnis AWT, Swing, JavaFX & SWT 5
Z Swing JTree DefaultMultipleTreeNode Repräsentation ändern AWT, Swing, JavaFX & SWT 1
MaxG. Swing Farbe von Button beim drücken ändern AWT, Swing, JavaFX & SWT 4
MaxG. JFrame Größe ändern AWT, Swing, JavaFX & SWT 16
K Liniendicke für Line Chart dynamisch ändern AWT, Swing, JavaFX & SWT 0
K Sprache ändern AWT, Swing, JavaFX & SWT 11
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
S JavaFX fxml datein mit menübar ändern AWT, Swing, JavaFX & SWT 20
W Kodierung (CharSet) beim Schreiben ändern AWT, Swing, JavaFX & SWT 1
Neumi5694 LookAndFeel Look & Feel nicht angezeigter Komponenten ändern AWT, Swing, JavaFX & SWT 6
T AWT Farben in einem Bild ändern AWT, Swing, JavaFX & SWT 8
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
krgewb Swing JTree - Farbe von nodes ändern AWT, Swing, JavaFX & SWT 4
D Swing JScrollPane Tabelle ändern (2 Tabellen) AWT, Swing, JavaFX & SWT 7
Sugan Inhalte mit Threads ändern -> java.lang.IllegalStateException AWT, Swing, JavaFX & SWT 6
X JMenu Menu-Bar ausrichtung ändern im Programm AWT, Swing, JavaFX & SWT 0
D JavaFX Probleme bei Service-Klasse beim ändern der GUI AWT, Swing, JavaFX & SWT 8
P im JTable die Schriftfarbe ändern AWT, Swing, JavaFX & SWT 19
F GUI Auflösung ändern - Koordianten und Proportions Problem AWT, Swing, JavaFX & SWT 21
R Hilfe beim ändern des Hintergrundes eines JFrames AWT, Swing, JavaFX & SWT 9
R LookAndFeel Wie kann man die Textfarbe der Nimbus ProgressBar nach Füllstand ändern? AWT, Swing, JavaFX & SWT 2
J JavaFX Bestimmte Zellen im TableView ändern (Farbe und Text) AWT, Swing, JavaFX & SWT 1
J JTable bounds ändern durch resizing des Fensters AWT, Swing, JavaFX & SWT 9
F JTable Zellen-Hintergrund ändern AWT, Swing, JavaFX & SWT 7
B Jlabel Text von anderen Klasse aus ändern AWT, Swing, JavaFX & SWT 9
P Fenstergröße ändern, Panel soll gleich bleiben AWT, Swing, JavaFX & SWT 2
S JavaFX NullPointerException bei Versuch ImageView zu ändern AWT, Swing, JavaFX & SWT 1
F JavaFX Timeline Animation soll X- und Y-Position während Animation ändern AWT, Swing, JavaFX & SWT 2
E JLabel aus Runnable ändern AWT, Swing, JavaFX & SWT 2
Tom299 JavaFX TreeView Expanded-Icon ändern AWT, Swing, JavaFX & SWT 0
M JavaFX Progressbar bar und track Komponente zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
B 3D-Grafik Java 3D Licht während Laufzeit ändern AWT, Swing, JavaFX & SWT 0
T JavaFX "DefaultButton"-Design ändern AWT, Swing, JavaFX & SWT 8
D Event Handling Aus einer anderen Klasse heraus einen Text des JLabels ändern. AWT, Swing, JavaFX & SWT 12
Z Möglichkeit mit Listerners die Farbe meiner Objekte zu ändern AWT, Swing, JavaFX & SWT 15
K (GUI) JButton Farbe bei druck ändern AWT, Swing, JavaFX & SWT 3
E JTable Hintergrund von geklickter Zelle ändern AWT, Swing, JavaFX & SWT 2
T JFileChooser Rahmenfarbe ändern AWT, Swing, JavaFX & SWT 1
Z JavaFX Inhalt einer ViewTable durch Aktion einer Menubar ändern welche in einer anderen fxml ist AWT, Swing, JavaFX & SWT 4
Joew0815 Dropdown meue während der Laufzeit ändern. AWT, Swing, JavaFX & SWT 6
T MausClick soll TExt ändern AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben