Je construis un système de gestion d'inventaire et j'ai créé un bouton qui ouvre un nouveau FXML pour entrer un nouvel élément dans la base de données. J'ai créé la possibilité d'ajouter une image et met à jour la colonne d'image de la base de données avec l'URL et quand je clique sur sauvegarder, elle copie l'image de l'emplacement source à l'emplacement cible (qui est un paquet dans le programme). Si je sauvegarde et ferme le programme, je peux actualiser le projet dans eclipse, me reconnecter au programme et l'élément nouvellement ajouté s'affichera dans la tableView peuplée de la base de données sans aucun problème. Le problème que j'ai, c'est que lorsque je clique sur le bouton Sauvegarder, je voudrais 'rafraîchir' les programmes et les paquets, donc quand j'interroge la base de données des pièces, elle affiche les nouvelles pièces et ne me renvoie pas une erreur. ne voit pas l'image dans le paquet d'image que j'ai créé (il montre là quand le programme est fermé et rafraîchi). Est-il possible de rafraîchir ces paquets d'images avec du code? Les images doivent-elles être stockées dans un fichier externe à la place? Si non, est-il possible d'enregistrer des images dans les paquets du programme sans avoir à utiliser le chemin absolu?Est-il possible d'actualiser des fichiers programme dans JavaFX lorsqu'une instance est en cours d'exécution?
Le code que j'ai à ce jour est:
// Event Listener on Button[#saveItemBtn].onAction
@FXML
public void saveNewItemClicked(ActionEvent event) {
try{
this.dbState = (String) databaseChoiceBox.getValue();
DBConnection dBC = new DBConnection();
con = dBC.getDBConnection();
String maxSQL = "SELECT MAX(id) FROM " + dbState + "_parts_list";
ResultSet rs = con.createStatement().executeQuery(maxSQL);
int idNumber = rs.getInt(1);
idNumber++;
quantity = Integer.parseInt(quantityTxt.getText());
min = Integer.parseInt(minTxt.getText());
max = Integer.parseInt(maxTxt.getText());
double price = Double.parseDouble(priceTxt.getText());
SelectedItem selectedItem = new SelectedItem();
selectedItem.setId(idNumber);
selectedItem.setQuantity(quantity);
selectedItem.setMin(min);
selectedItem.setMax(max);
selectedItem.setEquipment_id(equipmentIDTxt.getText());
selectedItem.setEquipment_group(equipmentGroupTxt.getText());
selectedItem.setPrice(price);
selectedItem.setManufacturer_name(manufacturerNameTxt.getText());
selectedItem.setModel_number(modelNumberTxt.getText());
selectedItem.setVendor_name(vendorNameTxt.getText());
selectedItem.setVendor_part_number(vendorPartNumberTxt.getText());
selectedItem.setTolmar_part_number(tolmarPartNumberTxt.getText());
selectedItem.setDescription(descriptionTxt.getText());
selectedItem.setAdditional_notes(additionalNotesTxt.getText());
selectedItem.setPart_location(locationTxt.getText());
if (img != null) {
selectedItem.setImage("/" + dbState + "Images/" + imagePath);
} else {
selectedItem.setImage("/img/NoImageFound.png");
}
selectedItem.setDepartment(databaseChoiceBox.getValue().toLowerCase());
String sql = "INSERT INTO " + dbState + "_parts_list VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
PreparedStatement myStmt = con.prepareStatement(sql);
myStmt.setInt(1, idNumber);
myStmt.setString(2, selectedItem.getManufacturer_name());
myStmt.setString(3, selectedItem.getModel_number());
myStmt.setString(4, selectedItem.getVendor_name());
myStmt.setString(5, selectedItem.getVendor_part_number());
myStmt.setString(6, selectedItem.getTolmar_part_number());
myStmt.setString(7, selectedItem.getPart_location());
myStmt.setDouble(8, selectedItem.getPrice());
myStmt.setInt(9, selectedItem.getQuantity());
myStmt.setInt(10, selectedItem.getMin());
myStmt.setInt(11, selectedItem.getMax());
myStmt.setString(12, selectedItem.getImage());
myStmt.setString(13, selectedItem.getEquipment_group());
myStmt.setString(14, selectedItem.getEquipment_id());
myStmt.setString(15, selectedItem.getAdditional_notes());
myStmt.setString(16, selectedItem.getDescription());
myStmt.setString(17, selectedItem.getDepartment());
myStmt.executeUpdate();
saveStatusLbl.setText("New Item Saved");
Path source = Paths.get(img);
Path target = Paths.get("E:/Programming/workspace/Inventory Management System 4/src/" + dbState + "Images/", file.getName());
try {
//replace existing file using java nio package
Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
e.printStackTrace();
}
con.close();
PauseTransition delay = new PauseTransition(Duration.seconds(2));
delay.setOnFinished(e -> window.close());
delay.play();
}catch(Exception exc){
System.out.println(exc);
exc.printStackTrace();
}
}
techniquement, je n'ai pas besoin de fermer le programme. J'ai pu cliquer sur mon IDE et F5 pour actualiser et je peux voir l'image sauvegardée apparaître dans mon paquet, revenir au programme et il ne se trompe pas et montre le nouvel élément dans tableView. Je me demande simplement s'il y a du code pour faire ceci quand je clique sur le bouton de sauvegarde. – dubski