我想单击一列并将单元格索引发送到新阶段。但我不能传递我的参数( int clickIndex
)到另一个控制器 EditClientController
. 我什么都试过了,但还是不行。
主控制器
package controller;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.MouseEvent;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.util.Callback;
import model.Table;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
public class MainController implements Initializable {
@FXML
TableView<Table> tableID;
@FXML
TableColumn iLp;
@FXML
TableColumn iCity;
@FXML
TableColumn iDeviceName;
@FXML
TableColumn iSerialNumber;
@FXML
TableColumn iCompanyName;
@FXML
TableColumn iContact;
@FXML
TableColumn iSellDate;
@FXML
TableColumn iWarranty;
@FXML
TableColumn iNextReview;
@FXML
TableColumn iWarrantyTrue;
@FXML
Button addButton;
@FXML
ComboBox warrantyLength;
@FXML
ComboBox nextReview;
@FXML
ComboBox warrantyTrue;
//Define variables
private int iNumber= 1;
public int clickIndex;
//Create table data
ObservableList<Table> data = FXCollections.observableArrayList();
//Combo box
final ObservableList warranty = FXCollections.observableArrayList("---",12,24,36);
final ObservableList review = FXCollections.observableArrayList("---","tydzień","miesiąc","2 miesiące", "6 miesięcy");
final ObservableList warrantyTF = FXCollections.observableArrayList("---","tak","nie");
Callback<TableColumn, TableCell> cellFactory2 =
new Callback<TableColumn, TableCell>() {
public TableCell call(TableColumn p) {
final TableCell cell = new TableCell<Table, Integer>() {
@Override
public void updateItem(Integer item, boolean empty) {
super.updateItem(item, empty);
setText(empty ? null : getString());
setGraphic(null);
}
private String getString() {
return getItem() == null ? "" : getItem().toString();
}
};
cell.addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (event.getClickCount() > 1) {
clickIndex=cell.getIndex();
try {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("editClient.fxml"));
Parent root1 = (Parent) fxmlLoader.load();
Stage stage = new Stage();
stage.setTitle("Edytuj klienta");
stage.setScene(new Scene(root1));
stage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
}
});
return cell;
}
};
Callback<TableColumn, TableCell> cellFactory =
new Callback<TableColumn, TableCell>() {
public TableCell call(TableColumn p) {
final TableCell cell = new TableCell<Table, String>() {
private Text text;
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
text = new Text(item);
text.setWrappingWidth(100);
setGraphic(text);
}
private String getString() {
return getItem() == null ? "" : getItem().toString();
}
};
cell.addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (event.getClickCount() > 1) {
clickIndex = cell.getIndex();
try {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("editClient.fxml"));
Parent root1 = (Parent) fxmlLoader.load();
Stage stage = new Stage();
stage.setTitle("Edytuj klienta");
stage.setScene(new Scene(root1));
stage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
}
});
return cell;
}
};
public void setClickedIndex(int click){
this.clickIndex=click;
}
public int getClickIndex(){
return clickIndex;
}
//Plik
public void openFile() {
FileReader plik = null;
int tab0=1;
int tab7=0;
String tab9=null;
try {
plik = new FileReader("dane.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
BufferedReader bfr = new BufferedReader(plik);
String linia = null;
try {
while ((linia = bfr.readLine()) != null) {
String[] tab = linia.split(";");
tab7=Integer.parseInt(tab[7]);
if(tab.length==10) {
if(tab[9].contains(tab[8])){
tab9="Tak";
}else{
tab9="Nie";
}
}
Table tablica = new Table(tab0++, tab[1], tab[2], tab[3], tab[4], tab[5], tab[6], tab7, tab[8], tab9);
data.add(tablica);
}
} catch (Exception e) {
System.out.println("BŁĄD ODCZYTU Z PLIKU!");
System.exit(2);
}
try {
plik.close();
} catch (IOException e) {
System.out.println("BŁĄD PRZY ZAMYKANIU PLIKU!");
System.exit(3);
}
}
public void setData(ObservableList<Table> newData){
data=newData;
}
public ObservableList<Table> getData(){
return data;
}
public void pressButton(ActionEvent event) throws Exception {
try {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("addClient.fxml"));
Parent root1 = (Parent) fxmlLoader.load();
Stage stage = new Stage();
stage.setTitle("Dodaj klienta");
stage.setScene(new Scene(root1));
stage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
@Override
public void initialize(URL location, ResourceBundle resources) {
openFile();
iLp.setCellValueFactory(new PropertyValueFactory<Table, Integer>("rLp"));
iCity.setCellValueFactory(new PropertyValueFactory<Table, String>("rCity"));
iDeviceName.setCellValueFactory(new PropertyValueFactory<Table, String>("rDeviceName"));
iSerialNumber.setCellValueFactory(new PropertyValueFactory<Table, String>("rSerialNumber"));
iCompanyName.setCellValueFactory(new PropertyValueFactory<Table, String>("rCompanyName"));
iContact.setCellValueFactory(new PropertyValueFactory<Table, String>("rContact"));
iSellDate.setCellValueFactory(new PropertyValueFactory<Table, String>("rSellDate"));
iWarranty.setCellValueFactory(new PropertyValueFactory<Table, Integer>("rWarranty"));
iNextReview.setCellValueFactory(new PropertyValueFactory<Table, String>("rNextReview"));
iWarrantyTrue.setCellValueFactory(new PropertyValueFactory<Table, String>("rWarrantyTrue"));
iLp.setCellFactory(cellFactory2);
iCity.setCellFactory(cellFactory);
iDeviceName.setCellFactory(cellFactory);
iSerialNumber.setCellFactory(cellFactory);
iCompanyName.setCellFactory(cellFactory);
iContact.setCellFactory(cellFactory);
iSellDate.setCellFactory(cellFactory);
iWarranty.setCellFactory(cellFactory2);
iNextReview.setCellFactory(cellFactory);
iWarrantyTrue.setCellFactory(cellFactory);
tableID.setItems(data);
//comboboxy
warrantyLength.setItems(warranty);
warrantyLength.getSelectionModel().select(0);
nextReview.setItems(review);
nextReview.getSelectionModel().select(0);
warrantyTrue.setItems(warrantyTF);
warrantyTrue.getSelectionModel().select(0);
}
}
编辑客户端控制器
package controller;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
import java.net.URL;
import java.util.ResourceBundle;
/**
* Created by Krzysztof on 2015-01-14.
*/
public class EditClientController implements Initializable {
@FXML
ComboBox warrantyLength;
@FXML
TextField city;
public int index;
//Combo box dla okresu gwarancyjnego
final ObservableList warranty = FXCollections.observableArrayList("---", 12, 24, 36);
public void setIndex(int index){
this.index=index;
}
public int getIndex(){
return index;
}
@Override
public void initialize(URL location, ResourceBundle resources) {
// city.setText(tablica.get(index).getRCity());
warrantyLength.setItems(warranty);
warrantyLength.getSelectionModel().select(0);
}
}
3条答案
按热度按时间gzszwxb41#
如果要在fxml文件中指定控制器(因此不能使用deepak的答案),并且要访问
initialize()
方法(所以不能使用josé'答案),您可以使用控制器工厂:2eafrhcq2#
您只需获取第二个控制器的示例:
现在您可以发送所需的索引:
这是所有需要的:
编辑
作为
clickIndex
将在第二个控制器初始化后发送,此值在上不可用Initialize
.解决此问题的有效方法是向更改添加侦听器:
14ifxucb3#
从一个控制器移动到另一个控制器(从一个视图移动到另一个视图)时,可以使用所需的参数初始化editclientcontroller
如:
如果在fxml文件中指定了控制器,则可以使用:
其中editcontrollerwrapper是加载新视图的类,它有一个返回javafx控制器示例的方法getcurrentcontroller。
例如:公共类EditControllerRapper{