我是一名初學者,無法成功地將在網上找到的解決方案應用到我的應用程序結構中。這是我的第一篇文章,因此請寬大處理。
我有一個Factory/DAO/Singleton模板來連接數據庫。
即使我現在剛剛實現查找功能,它也能正常工作。處理從模型到控制器的observableArrayList
然後,我想實現一個MVC模式。
模型是例如名爲「Fichier」的類。這個類被FichierSQL用來填充「Fichier」的實例。
視圖由名爲「FenFichier」的FXML文件提供。 控制器是名爲「FenFichierController」的類。 另一個類管理不同的視圖,並命名爲「LoginManager」。
編輯:感謝@Jewelsea對GitHub的代碼約loginsession
由於這是在FichierSQL該數據庫查詢是,我認爲它應該在這裏實現observableArrayList的最佳場所。
問題是,無法從控制器訪問此類的「getFichierList」方法來填充TableView。
您的意見也歡迎關於LoginManager類,因爲我將有很多窗口管理,我不知道如何以完美的方式做到這一點。請告訴我,如果你需要更多的片段。
Fichier.class
public class Fichier {
private final IntegerProperty fichierID;
/** nom du fichier de mesure */
private final StringProperty nomFichier;
/** le fichier est-il un essai = 1 ? ou un OF = 0 (default) */
private final BooleanProperty isEssai;
/** date de création du fichier de mesure */
private final ObjectProperty<Date> dateCreation;
/** nom du client */
private final StringProperty client;
private static Date DATE_NULL = new Date(0);
/** création d'un fichier vide */
public Fichier() {
this(0,null,false,DATE_NULL,null);
}
/** création d'un fichier de mesure
* @param fid identification unique du fichier dans la BDD
* @param fichier nom du fichier de mesure
* @param ess essai = 1 ou OF = 0
* @param dtecreation date de création du fichier de mesure
* @param cli nom du client
*/
public Fichier(int fid, String fichier, Boolean ess, Date dtecreation, String cli) {
this.fichierID = new SimpleIntegerProperty(fid);
this.nomFichier = new SimpleStringProperty(fichier);
this.isEssai = new SimpleBooleanProperty(ess);
this.dateCreation = new SimpleObjectProperty<Date>(dtecreation);
this.client = new SimpleStringProperty(cli);
}
/**
* renvoie le numéro unique de fichier
* @return fichierID
*/
public int getFichierID() {
return fichierID.get();
}
public IntegerProperty fichierIDProperty() {
return fichierID;
}
/**
* renvoie le nom du fichier de mesure
* @return nomFichier
*/
public String getNomFichier() {
return nomFichier.get();
}
/**
* modifie le nom du fichier de mesure
* @param newFichier
*/
public void setNomFichier(String newFichier) {
this.nomFichier.set(newFichier);
}
public StringProperty nomFichierProperty() {
return nomFichier;
}
/**
* renvoie si le fichier de mesure est un essai = True ou OF = False
* @return isEssai
*/
public Boolean getIsEssai() {
return isEssai.get();
}
/**
* modifie le type de fichier de mesure en essai = True ou OF = False
* @param newIsEssai
*/
public void setIsEssai(Boolean newIsEssai) {
this.isEssai.set(newIsEssai);
}
public BooleanProperty isEssaiProperty() {
return isEssai;
}
/**
* renvoie la date de creation du fichier de mesure
* @return dateCreation
*/
public Date getDateCreation() {
return dateCreation.get();
}
/**
* modifie la date de creation du fichier de mesure
* @param newDateCreation
*/
public void setDateCreation(Date newDateCreation) {
this.dateCreation.set(newDateCreation);
}
public ObjectProperty<Date> dateCreationProperty() {
return dateCreation;
}
/**
* renvoie le client
* @return client
*/
public String getClient() {
return client.get();
}
/**
* modifie le client
* @param newClient
*/
public void setClient(String newClient) {
this.client.set(newClient);
}
public StringProperty nomClientProperty() {
return client;
}
FichierSQL.class
public class FichierSQL extends DAO<Fichier> {
private ObservableList<Fichier> fichierList = FXCollections.observableArrayList();
public FichierSQL(Connection conn) {
super(conn);
}
public boolean create(Fichier obj) {
return false;
}
public boolean delete(Fichier obj) {
return false;
}
public boolean update(Fichier obj) {
return false;
}
public Fichier find(String nomFichier) {
Fichier fich = new Fichier();
try {
ResultSet result = this.connect
.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)
.executeQuery("SELECT * FROM tb_fichier WHERE fichier LIKE '" + nomFichier + "'");
while (result.next())
fich = new Fichier(
result.getInt("fichierid"),
result.getString("fichier"),
result.getBoolean("isEssai"),
result.getDate("datecreation"),
result.getString("client")
);
fichierList.add(fich);
} catch (SQLException e) {
e.printStackTrace();
}
return fich;
}
public ObservableList<Fichier> getFichierList() {
return fichierList;
}
LoginManager.class
public class LoginManager {
private Scene scene;
private Stage stage;
private BorderPane fenMainLayout;
public LoginManager(Stage stage, Scene scene) {
this.scene = scene;
this.stage = stage;
}
/**
* Callback method invoked to notify that a user has been authenticated.
* Will show the main application screen.
*/
public void authenticated(String sessionID) {
showMainView(sessionID);
}
/**
* Callback method invoked to notify that a user has logged out of the main
* application. Will show the login application screen.
*/
public void logout() {
showLoginScreen();
}
public void showLoginScreen() {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("login.fxml"));
scene.setRoot((Parent) loader.load());
LoginController controller = loader.<LoginController> getController();
controller.initManager(this);
} catch (IOException ex) {
Logger.getLogger(LoginManager.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void showMainView(String sessionID) {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/applicationTelabFX/FenMain.fxml"));
fenMainLayout = (BorderPane) loader.load();
Scene scene = new Scene(fenMainLayout);
stage.setScene(scene);
stage.setWidth(800);
stage.setHeight(600);
FenMainController controller = loader.<FenMainController> getController();
controller.initSessionID(this, sessionID);
stage.setTitle("TestLL");
stage.show();
showFichierView();
} catch (IOException ex) {
Logger.getLogger(LoginManager.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void showFichierView() {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/applicationTelabFX/FenFichier.fxml"));
AnchorPane fichierView = (AnchorPane) loader.load();
fenMainLayout.setCenter(fichierView);
FenFichierController controller = loader.getController();
} catch (IOException ex) {
Logger.getLogger(LoginManager.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
FenFichierController。類
public class FenFichierController {
@FXML
private TableView<Fichier> fichierTable;
@FXML
private TableColumn<Fichier, Integer> fichierIDCol;
@FXML
private TableColumn<Fichier, String> fichierMesCol;
@FXML
private Label fichierIDLabel;
@FXML
private Label nomFichierLabel;
@FXML
private CheckBox isEssaiCB;
@FXML
private Label dateCreationLabel;
@FXML
private Label clientLabel;
/**
* The constructor.
* The constructor is called before the initialize() method.
*/
public FenFichierController() { }
/**
* Initializes the controller class. This method is automatically called
* after the fxml file has been loaded.
*/
@FXML
private void initialize() {
// Initialize the person table with the two columns.
fichierIDCol.setCellValueFactory(cellData -> cellData.getValue().fichierIDProperty().asObject());
fichierMesCol.setCellValueFactory(cellData -> cellData.getValue().nomFichierProperty());
fichierTable.setItems(getFichierList);
}
public ObservableList<Fichier> fichiersData;
public void creationData(){
fichiersData = FXCollections.observableArrayList();
try{
AbstractDAOFactory adf = AbstractDAOFactory.getFactory(AbstractDAOFactory.SQLSERVER_DAO_FACTORY);
DAO<Fichier> fichierDao = adf.getFichierDAO();
Fichier fich = fichierDao.find("%");
}
catch(Exception e){
e.printStackTrace();
System.out.println("Erreur de création des données");
}
}
}
@James_D:你或者想法已經在其他類中實現,如下所示:public DAO getFichierDAO(){return new fichierSQL(conn);}所以我認爲我誤解了一些東西。應該是DAO ??? –
cosmo
我的意思是將該方法的返回類型改爲'FichierSQL'。所以你可以直接調用現有的'getFichierList()'方法而不用改變抽象DAO類的API(或者將會變得醜陋)。 –
某些內部類必須修改specfics基本對象(如「fichier」)而無需用戶交互,但需要爲用戶顯示更改。所以,這就是爲什麼我要感謝基本的工作。你給我寶貴的幫助。非常感謝。最後的評論,因爲我顯示一個警告消息:這不是聊天大聲笑。 Thx – cosmo