我的问题是,当我在一个盒子中选择一个活动时,每个组合框都会改变,我真的不知道该怎么做,我发布了控制该标签的类的整个代码
public class ProgettiImp extends Fragment implements Initializable {
private final ObservableList<AttivitaGiornaliere> data = FXCollections.observableArrayList(getList());
private static final ObservableList<TypedActivites> datas = FXCollections.observableArrayList();
private String nomes = null;
private String cognomes = null;
@FXML
private TableView<TypedActivites> impieco = null;
@FXML
DatePicker iuorn;
public ProgettiImp() throws IOException, JSONException {
}
@Override
public void onCreateView(FXMLLoader fxmlLoader) {
fxmlLoader.setLocation(getClass().getResource("../mainWindow/progetti_imp.fxml"));
try {
fxmlLoader.load();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void initialize(URL location, ResourceBundle resources) {
Callback<TableColumn<TypedActivites,AttivitaGiornaliere>, TableCell<TypedActivites,AttivitaGiornaliere>> comboBoxCellFactory
= (TableColumn<TypedActivites,AttivitaGiornaliere> param) -> new ComboxEdit();
impieco.setEditable(true);
datas.forEach(dat -> System.out.println(dat.getN()+"\n"+dat.getS()));
impieco.setItems(datas);
TableColumn<TypedActivites, AttivitaGiornaliere> ora1 = new TableColumn("1a");
ora1.setMinWidth(50);
ora1.setCellValueFactory(cellData -> cellData.getValue().typObjProperty());
ora1.setCellFactory(comboBoxCellFactory);
ora1.setOnEditCommit(
(TableColumn.CellEditEvent<TypedActivites,AttivitaGiornaliere> t) ->
t.getTableView().getItems().get(t.getTablePosition().getRow()).setTypObj(t.getNewValue()));
TableColumn<TypedActivites, AttivitaGiornaliere> ora2 = new TableColumn("2a");
ora2.setMinWidth(50);
ora2.setCellValueFactory(cellData -> cellData.getValue().typObjProperty());
ora2.setCellFactory(comboBoxCellFactory);
ora2.setOnEditCommit(
(TableColumn.CellEditEvent<TypedActivites,AttivitaGiornaliere> t) ->
t.getTableView().getItems().get(t.getTablePosition().getRow()).setTypObj(t.getNewValue()));
TableColumn<TypedActivites, AttivitaGiornaliere> ora3 = new TableColumn("3a");
ora3.setMinWidth(50);
ora3.setCellFactory(comboBoxCellFactory);
ora3.setCellValueFactory(cellData -> cellData.getValue().typObjProperty());
ora3.setOnEditCommit(
(TableColumn.CellEditEvent<TypedActivites,AttivitaGiornaliere> t) ->
t.getTableView().getItems().get(t.getTablePosition().getRow()).setTypObj(t.getNewValue()));
TableColumn<TypedActivites, AttivitaGiornaliere> ora4 = new TableColumn("4a");
ora4.setMinWidth(50);
ora4.setCellFactory(comboBoxCellFactory);
ora4.setCellValueFactory(cellData -> cellData.getValue().typObjProperty());
ora4.setOnEditCommit(
(TableColumn.CellEditEvent<TypedActivites,AttivitaGiornaliere> t) ->
t.getTableView().getItems().get(t.getTablePosition().getRow()).setTypObj(t.getNewValue()));
TableColumn<TypedActivites, AttivitaGiornaliere> ora5 = new TableColumn("5a");
ora5.setMinWidth(50);
ora5.setCellFactory(comboBoxCellFactory);
ora5.setCellValueFactory(cellData -> cellData.getValue().typObjProperty());
ora5.setOnEditCommit(
(TableColumn.CellEditEvent<TypedActivites,AttivitaGiornaliere> t) ->
t.getTableView().getItems().get(t.getTablePosition().getRow()).setTypObj(t.getNewValue()));
TableColumn<TypedActivites, AttivitaGiornaliere> ora6 = new TableColumn("6a");
ora6.setMinWidth(50);
ora6.setCellFactory(comboBoxCellFactory);
ora6.setCellValueFactory(cellData -> cellData.getValue().typObjProperty());
ora6.setOnEditCommit(
(TableColumn.CellEditEvent<TypedActivites,AttivitaGiornaliere> t) ->
t.getTableView().getItems().get(t.getTablePosition().getRow()).setTypObj(t.getNewValue()));
TableColumn<TypedActivites, AttivitaGiornaliere> ora7 = new TableColumn("7a");
ora7.setMinWidth(50);
ora7.setCellFactory(comboBoxCellFactory);
ora7.setCellValueFactory(cellData -> cellData.getValue().typObjProperty());
ora7.setOnEditCommit(
(TableColumn.CellEditEvent<TypedActivites,AttivitaGiornaliere> t) ->
t.getTableView().getItems().get(t.getTablePosition().getRow()).setTypObj(t.getNewValue()));
TableColumn<TypedActivites, AttivitaGiornaliere> ora8 = new TableColumn("8a");
ora8.setMinWidth(50);
ora8.setCellFactory(comboBoxCellFactory);
ora8.setCellValueFactory(cellData -> cellData.getValue().typObjProperty());
ora8.setOnEditCommit(
(TableColumn.CellEditEvent<TypedActivites,AttivitaGiornaliere> t) ->
t.getTableView().getItems().get(t.getTablePosition().getRow()).setTypObj(t.getNewValue()));
impieco.setEditable(true);
impieco.getColumns().addAll(ora1,ora2,ora3,ora4,ora5,ora6,ora7,ora8);
}
public List<AttivitaGiornaliere> getList() throws IOException, JSONException {
List<String> list = new ArrayList<>();
List<AttivitaGiornaliere> a = new ArrayList<>();
String url = "http://localhost:8080/Alimos/api/attivita/id";
UtilitiesM m = null;
String json = getJson(url);
JSONArray jsn = new JSONArray(json);
int j = 0;
while (j<jsn.length()) {
JSONObject o = jsn.getJSONObject(j);
Iterator<String> keysIterator = o.keys();
while(keysIterator.hasNext()){
String key = keysIterator.next();
Object value = o.get(key);
list.add(value.toString());
a.add(new AttivitaGiornaliere(list.get(j).toString()));
}
j++;
}
return a;
}
public String getJson(String url) throws IOException {
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
// optional default is GET
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
System.out.println("\nSending 'GET' request to URL : " + url);
System.out.println("Response Code : " + responseCode);
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
//print result
System.out.println(response.toString());
inputLine = response.toString();
return inputLine;
}
public static String passDaThing(String name, String surname){
System.out.println(name+surname);
return String.valueOf(datas.add(new TypedActivites(name,surname)));
}
定义活动的本地类
public static class TypedActivites {
private SimpleObjectProperty<AttivitaGiornaliere> opters = new SimpleObjectProperty<>() ;
private SimpleStringProperty name;
private SimpleStringProperty surname;
public TypedActivites(AttivitaGiornaliere opters){
this.opters = new SimpleObjectProperty(opters);
}
public TypedActivites(String n,String s) {
this.name = new SimpleStringProperty(n);
this.surname = new SimpleStringProperty(s);
}
public AttivitaGiornaliere getTypObj() {
return opters.get();
}
public ObjectProperty<AttivitaGiornaliere> typObjProperty() {
return this.opters;
}
public void setTypObj(AttivitaGiornaliere opters) {
this.opters.set(opters);
}
public String getN() { return name.get(); }
public StringProperty nameProperty() { return this.name; }
public void setName(String str) {
this.name.set(str);
}
public String getS() { return surname.get(); }
public StringProperty stringProperty() { return this.surname; }
public void setSurname(String str) {
this.surname.set(str);
}
}
public static class AttivitaGiornaliere {
private SimpleStringProperty option = null;
public AttivitaGiornaliere(String option) {
this.option = new SimpleStringProperty(option);
}
public String getOption() {
return option.get();
}
public void setOption(String value) {
option.set(value);
}
public StringProperty optionProperty() {
return option;
}
@Override
public String toString() {
return option.get();
}
}
控制Comboboxs的本地类
class ComboxEdit extends TableCell<TypedActivites,AttivitaGiornaliere> {
private ComboBox<AttivitaGiornaliere> combo[];
combo[] = new ComboBox[] {
new ComboBox<>(),new ComboBox<>(),new ComboBox<>(),new ComboBox<>(),
new ComboBox<>(), new ComboBox<>(),new ComboBox<>(),new ComboBox<>() };
public ComboxEdit(){}
@Override
public void startEdit() {
if (!isEmpty()) {
super.startEdit();
createComboBox();
System.out.println("passare passa");
setText(null);
for (int i = 0; i < 7; i++) {
setGraphic(combo[i]);
}
}
}
@Override
public void cancelEdit() {
super.cancelEdit();
setText(String.valueOf(getAct()));
setGraphic(null);
}
@Override
public void updateItem(AttivitaGiornaliere item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
for (int i = 0; i < 7; i++) {
if (isEditing()) {
if (combo[i] != null) {
combo[i].setValue(getAct());
}
setText(getAct().getOption());
setGraphic(combo[i]);
} else {
setText(getAct().getOption());
setGraphic(null);
}
}
}
}
private void createComboBox() {
for(int i = 0; i<7; i++) {
combo[i] = new ComboBox<>(data);
comboBoxConverter(combo[i]);
combo[i].valueProperty().set(getAct());
combo[i].setMinWidth(this.getWidth() - this.getGraphicTextGap() * 0.6);
int finalI = i;
combo[i].setOnAction((e) -> {
System.out.println("Committed: " + combo[finalI].getSelectionModel().getSelectedItem());
commitEdit(combo[finalI].getSelectionModel().getSelectedItem());
});
}
}
private void comboBoxConverter(ComboBox<AttivitaGiornaliere> comboBox) {
// Define rendering of the list of values in ComboBox drop down.
for(int i = 0; i<7; i++) {
comboBox.setCellFactory((c) -> new ListCell<AttivitaGiornaliere>() {
@Override
protected void updateItem(AttivitaGiornaliere item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setText(null);
} else {
setText(item.getOption());
}
}
});
}
}
private AttivitaGiornaliere getAct(){
return getItem() == null ? new AttivitaGiornaliere("") : getItem();
}
}
}
答案 0 :(得分:0)
解决方案:
ora1.setCellFactory(ComboBoxTableCell.forTableColumn(data));