CheckBoxListCell Selektion ermitteln

hk

Bekanntes Mitglied
Hallo Forum,
ich habe von GitHub eine CheckBoxListCellDemo geladen und versuche diese zu analysieren. Dabei ist mir aufgefallen, dass beim Mausklick in den Textteil der Callback zweimal aufgerufen wird und einmal das Element der bisherigen Selektion und einmal das neu geklickte Element zeigt. Allerdings hängt die Reihenfolge davon ab ob die neue Selektion vor oder nach der bisherigen Selektion ist. Dadurch ist eine eindeutige Identifikation nicht möglich.
Der Callback befindet sich nach der Kommentarzeile mit den XXXXXXX

Code:
public class App extends Application {

  public static void main(String[] args) {
    launch(args);
  }
  CheckBox cb = new CheckBox();
//    CheckBox cb = CheckBoxBuilder.create().build();
  final ObservableList<Employee> data = FXCollections.observableArrayList();

  ChangeListener<Boolean> listener = new ChangeListener<Boolean>() {
    @Override
    public void changed(ObservableValue<? extends Boolean> paramObservableValue, Boolean paramT1, Boolean selected) {
      if (selected) {
        boolean flag = true;
        for (Employee emp : data) {
          if (!emp.getSelected()) {
            flag = false;
            break;
          }
        }
        if (flag) {
          cb.setSelected(true);
        }
      } else {
        cb.setSelected(false);
      }
    }
  };

  @Override
  public void start(Stage primaryStage) {

    // alle Elemente selektieren / deselektieren
    cb.selectedProperty().addListener(new ChangeListener<Boolean>() {
      @Override
      public void changed(ObservableValue<? extends Boolean> paramObservableValue, Boolean paramT1, Boolean paramT2) {
        for (Employee emp : data) {
          emp.setSelected(paramT2);
        }
      }
    });
    //END Listener -----------------------------------
    
    primaryStage.setTitle("CheckBoxListCell Sample");
    for (int i = 0; i < 5; i++) {
      data.add(new Employee(i % 2 == 0 ? true : false, "Empl " + i));
    }

    final ListView<Employee> listView = new ListView<>();
    listView.setPrefSize(200, 250);
    listView.setEditable(false);

    // Listener zu jeden Element hinzufügen
    for (Employee employee : data) {
      employee.selectedProperty().addListener(listener);
    }
    // Daten nach ListView
    listView.setItems(data);

     // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    // Wird beim Erstellen der ListView für jedes Element aufgerufen
    // und bei jeden Click auf den Textteil der Liste
    Callback<Employee, ObservableValue<Boolean>> getProperty = new Callback<Employee, ObservableValue<Boolean>>() {
      @Override
      public BooleanProperty call(Employee layer) {
        System.out.println("Text selektiert: " + layer.getName());
        return layer.selectedProperty();
      }
    };
    //END Callback ---------------------------------------
    
    // Nur bei Erstellen
    // Erstellt CellFactory (Checkboxen)
    Callback<ListView<Employee>, ListCell<Employee>> forListView = CheckBoxListCell.forListView(getProperty);
    listView.setCellFactory(forListView);

    StackPane root = new StackPane();
    Button btn = new Button("Show");
    btn.setOnAction(new EventHandler<ActionEvent>() {
      @Override
      public void handle(ActionEvent paramT) {
        for (Employee employee : data) {
          System.out.println(employee.getSelected());
        }
      }
    });
    VBox vb = new VBox();
    vb.getChildren().addAll(listView, btn, cb);
    root.getChildren().add(vb);
    primaryStage.setScene(new Scene(root, 200, 250));
    primaryStage.show();
  }

  class Employee {

    private final SimpleBooleanProperty selected;
    private final SimpleStringProperty name;

    public Employee(boolean id, String name) {
      this.selected = new SimpleBooleanProperty(id);
      this.name = new SimpleStringProperty(name);
    }

    public boolean getSelected() {
      return selected.get();
    }

    public void setSelected(boolean selected) {
      this.selected.set(selected);
    }

    public String getName() {
      return name.get();
    }

    public void setName(String fName) {
      name.set(fName);
    }

    public SimpleBooleanProperty selectedProperty() {
      return selected;
    }

    @Override
    public String toString() {
      return getName();
    }
  }
}
 
Y

yfons123

Gast
du kannst für das einfach einen listener hernehmen
Java:
listView.getSelectionModel().selectedIndexProperty().addListener((var observable,var oldValue, var newValue)->{
            System.out.println("Old:"+oldValue+"#New:"+newValue);
        });;
das erste mal wo das aufgerufen wird ist der oldvalue auf -1 gesetzt, wieso auch immer

das passt dann halt nicht mehr mit der checklistboxcell zusammen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J CheckBoxListCell auf click event in listView reagieren AWT, Swing, JavaFX & SWT 1
D JavaFX Scene Builder 2.0 einfügen einer CheckBoxListCell AWT, Swing, JavaFX & SWT 0
F Zeile in mehreren Jtables bei Selektion markieren AWT, Swing, JavaFX & SWT 11
T Zelle- und die Zeile-Farbenwechsel bei der Selektion in der Tabelle AWT, Swing, JavaFX & SWT 4
MiMa Selektion aus einer ListView AWT, Swing, JavaFX & SWT 5
P JTable - bei Eingabe Selektion AWT, Swing, JavaFX & SWT 0
K JTabbedPane Tab Markierung / Selektion AWT, Swing, JavaFX & SWT 4
S Selektion bei Drag&Drop AWT, Swing, JavaFX & SWT 4
M Probleme mit der Selektion einer JTextArea AWT, Swing, JavaFX & SWT 3
B JTable Selektion von Zellen AWT, Swing, JavaFX & SWT 3
S Swing Jlist - CellRenderer/ Selektion AWT, Swing, JavaFX & SWT 2
F Swing JTable Einfach-Selektion überschreiben AWT, Swing, JavaFX & SWT 4
M Swing Selektion mehrerer JToggleButton's in einer Gruppe AWT, Swing, JavaFX & SWT 5
L JTree Selektion "füllen" AWT, Swing, JavaFX & SWT 4
hdi Swing JTable: Selektion beim Umsortieren anpassen AWT, Swing, JavaFX & SWT 7
hdi Swing JTable - Selektion aufheben AWT, Swing, JavaFX & SWT 3
M Swing JList --> Selektion für bestimmte Indexe verbieten? AWT, Swing, JavaFX & SWT 8
P Selektion in JXTreeTable von SwingX AWT, Swing, JavaFX & SWT 5
R JTabbedPane Selektion verfolgen? AWT, Swing, JavaFX & SWT 2
M JList.clearSelection() hebt Selektion nicht auf AWT, Swing, JavaFX & SWT 6
T JTree macht mich wahnsinnig (selektion) AWT, Swing, JavaFX & SWT 2
C Selektion einer JList aufheben AWT, Swing, JavaFX & SWT 3
technolion FileDialog/keine Multi-Selektion vs. JFileCHooser/kein LaF AWT, Swing, JavaFX & SWT 2
W JTree je nach selektion JPane ein und ausblenden AWT, Swing, JavaFX & SWT 7
sparrow JComboBox soll Selektion anhand der Eingabe ändern AWT, Swing, JavaFX & SWT 2
R JTree: TreeCellRenderer und Selektion eines Knoten AWT, Swing, JavaFX & SWT 10
F JTable: Selektion einer kompletten Zeile AWT, Swing, JavaFX & SWT 5
G JTable selektion der Zeile bei Fokusieren mit der Maus AWT, Swing, JavaFX & SWT 5
G JTable - PopUpMenu nur bei Selektion anzeigen. AWT, Swing, JavaFX & SWT 8
C JTable update: Selektion beibehalten AWT, Swing, JavaFX & SWT 12
E Kreuztabelle mit Selektion AWT, Swing, JavaFX & SWT 20
L JTextField: Kompletten Text bei Selektion markieren AWT, Swing, JavaFX & SWT 5
F Selektion im JTree AWT, Swing, JavaFX & SWT 2
D Visualisierung einer Selektion in einer Grafik. AWT, Swing, JavaFX & SWT 7
D JTable - Auto-Selektion NACH Zelleditierung steuern AWT, Swing, JavaFX & SWT 2
M JTree und Selektion AWT, Swing, JavaFX & SWT 2
N Selektion von Text bei JTextArea - - Aktualisierungsproblem? AWT, Swing, JavaFX & SWT 2
M JTree: Selektion der Elemente nicht mehr sichtbar AWT, Swing, JavaFX & SWT 6
K MenuItem: Farbe bei Selektion AWT, Swing, JavaFX & SWT 4
K property panel und selektion einer componente in panel AWT, Swing, JavaFX & SWT 5
E JTable: Selektion nur mit einem Doppelklick? AWT, Swing, JavaFX & SWT 7
X JTree: Selektion nach dem Entfernen von Knoten AWT, Swing, JavaFX & SWT 2
B Minimum x und y von Children-JPanels ermitteln AWT, Swing, JavaFX & SWT 3
P JavaFX aktuelle Tabellenzeile bei Choice-Box-Auswahl in Zelle ermitteln AWT, Swing, JavaFX & SWT 28
P JavaFX Key-Value-Paar auf TreeItem ermitteln AWT, Swing, JavaFX & SWT 6
L JComponent aus JPanel anhand Mausposition ermitteln AWT, Swing, JavaFX & SWT 10
H automatische Anzahl der Spalten ermitteln -> geht nicht AWT, Swing, JavaFX & SWT 6
C JavaFX Positionen auf dem Bildschirm ermitteln AWT, Swing, JavaFX & SWT 1
M Schnittpunkte zwischen zwei Graphics2D Elemente ermitteln. AWT, Swing, JavaFX & SWT 5
C TableModel zugehörige Table ermitteln AWT, Swing, JavaFX & SWT 3
C Größe des Mauszeigers ermitteln AWT, Swing, JavaFX & SWT 5
J JavaFX Länge von Line ermitteln AWT, Swing, JavaFX & SWT 9
M JavaFX Stage in einer FXML-Controllerklasse ermitteln? AWT, Swing, JavaFX & SWT 5
J Swing Letzten Tab einer JTabbedPane ermitteln AWT, Swing, JavaFX & SWT 6
hdi Swing JFrame Größe ermitteln AWT, Swing, JavaFX & SWT 6
hdi Shift Modifier zur Laufzeit ermitteln AWT, Swing, JavaFX & SWT 3
B Position in einem Bild ermitteln AWT, Swing, JavaFX & SWT 3
I Textbreite von Font inklusive Tabs ermitteln AWT, Swing, JavaFX & SWT 4
A Swing Alle Komponenten auf JFrame ermitteln AWT, Swing, JavaFX & SWT 4
B Label breite ermitteln vor dem rendern? AWT, Swing, JavaFX & SWT 7
G Applet, Link ermitteln, dem der Benutzer gefolgt ist AWT, Swing, JavaFX & SWT 2
C Caret Position mit X-Y-Koordinaten ermitteln AWT, Swing, JavaFX & SWT 2
C Swing Inhalt eines JPanels ermitteln & bearbeiten AWT, Swing, JavaFX & SWT 5
B aktuelle Position des Fensters ermitteln AWT, Swing, JavaFX & SWT 3
N Methode zum ermitteln der editierte Zeile/Zelle in jTable AWT, Swing, JavaFX & SWT 8
H Eltern-Frame von JPanel ermitteln AWT, Swing, JavaFX & SWT 2
C Ermitteln ob JComponent einen Listener besitzt AWT, Swing, JavaFX & SWT 2
S Swing JTree expandierte Pfade ermitteln AWT, Swing, JavaFX & SWT 6
S Swing Swing maximale Fenstergrösse ermitteln AWT, Swing, JavaFX & SWT 5
R Focus ermitteln AWT, Swing, JavaFX & SWT 2
ElViZ End-Position eines gezeichneten Strings ermitteln. AWT, Swing, JavaFX & SWT 2
H Name einer Komponente ermitteln AWT, Swing, JavaFX & SWT 5
F Pixelfarbe von Panel ermitteln AWT, Swing, JavaFX & SWT 14
R Suchbare Zeilen von JTable in JScrollPane ermitteln AWT, Swing, JavaFX & SWT 9
M Schriftgröße ermitteln AWT, Swing, JavaFX & SWT 7
T Button des Popup-Menüs ermitteln AWT, Swing, JavaFX & SWT 4
Iron Monkey JPopupMenu/JMenuItem Index für getSubElements()[] ermitteln AWT, Swing, JavaFX & SWT 8
D printdialog ausgewählten drucker ermitteln AWT, Swing, JavaFX & SWT 2
J absolute Position einer JComponent ermitteln AWT, Swing, JavaFX & SWT 4
R JScrollBar / JScrollPane: Ermitteln ob ganz unten AWT, Swing, JavaFX & SWT 2
F JScrollbar Verschiebung des Viewport ermitteln AWT, Swing, JavaFX & SWT 3
M Wirkliche Größe eines JPanels/o.ä. ermitteln AWT, Swing, JavaFX & SWT 3
S Parent eines Menu-Eintrages ermitteln? AWT, Swing, JavaFX & SWT 3
D Ergebnis des Listeners ermitteln AWT, Swing, JavaFX & SWT 8
K DefaultTableModel makierte Row ermitteln AWT, Swing, JavaFX & SWT 6
I font-größe ermitteln AWT, Swing, JavaFX & SWT 4
F Komponente der GUI ermitteln AWT, Swing, JavaFX & SWT 3
F Größe ermitteln AWT, Swing, JavaFX & SWT 3
P ID einer ausgewaehlten Node aus JTree ermitteln AWT, Swing, JavaFX & SWT 6
L Schnittpunkt von 2 Strecken ermitteln AWT, Swing, JavaFX & SWT 4
H Node neben dem Expand/Collapse Symbol ermitteln AWT, Swing, JavaFX & SWT 4
G TableModelEvent ermitteln AWT, Swing, JavaFX & SWT 18
I Popup-Trigger-Maustaste gleich beim Programmstart ermitteln? AWT, Swing, JavaFX & SWT 7
S JPanel Größe ermitteln AWT, Swing, JavaFX & SWT 9
J Grösse eines Graphikobjektes ermitteln AWT, Swing, JavaFX & SWT 3
C SWT - Fontgröße des aktuellen Fonts ermitteln AWT, Swing, JavaFX & SWT 2
P Wie das Component Object des Hauptfensters ermitteln? AWT, Swing, JavaFX & SWT 4
G Klasse Image - Höhe und Breite ermitteln AWT, Swing, JavaFX & SWT 12
L TreePath eines Objektes innerhalb eines JTree ermitteln? AWT, Swing, JavaFX & SWT 1
K Höhe und Breite eines Panels im GridBagLayout ermitteln AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben