【发布时间】:2017-01-02 19:01:59
【问题描述】:
我的问题是我需要帮助从 fxml 文件中的 imageview 中的图像获取路径,因为我需要将图像的路径存储在对象中。我正在使用文件选择器将图像输入到 imageView。我计划将该路径存储到一个对象中,并在稍后将其声明出来,就像个人资料页面会保留个人资料图片一样。我知道这有点简短,但我希望如果你们有任何帮助我的方法,我将不胜感激。
所以根据我编辑的 cmets: 我的问题是,尽管我使用了文件选择器,但我无法声明图像路径的 URL。 实际上,我已经删除了与声明 URL 有关的所有相关部分,因为我无法声明它。
package orgRegistrationtest;
public class OrgRegistrationController {
@FXML
private JFXHamburger hamburger;
@FXML
private JFXTextField email;
@FXML
private JFXCheckBox health;
@FXML
private JFXCheckBox animal;
@FXML
private JFXCheckBox children;
@FXML
private JFXCheckBox elderly;
@FXML
private JFXCheckBox environment;
@FXML
private JFXCheckBox others;
@FXML
private JFXTextField name;
@FXML
private JFXTextField contact;
@FXML
private JFXTextField address;
@FXML
private JFXPasswordField password;
@FXML
private JFXPasswordField password2;
@FXML
private JFXTextArea desc;
//pic not added
@FXML
private ImageView pic;
@FXML
private JFXButton upload;
@FXML
private JFXButton clear;
@FXML
private JFXButton confirm;
@FXML
private JFXDrawer drawer;
@FXML
void handleClear(ActionEvent event) {
}
private String type=null;
@FXML
private void handleConfirmButtonAction(ActionEvent event) throws IOException {
if(health.isSelected())
type=health.getText();
if(animal.isSelected()){
type+=";"+animal.getText();
}
if(children.isSelected()){
type+=";"+children.getText();
}
if(elderly.isSelected()){
type+=";"+elderly.getText();
}
if(environment.isSelected()){
type+=";"+environment.getText();
}
if(others.isSelected()){
type+=";"+others.getText();
}
String Email=email.getText();
String Password = password.getText();
String Password2=password2.getText();
String Name = name.getText();
String Contact= contact.getText();
String Address=address.getText();
String Type = ""+type;
String Desc = desc.getText();
//String url = pic.getImage()._____
//.getURL(); i know getURL is not inside same for getPath();
// So how am i able to claim the Path of the Image and store it?
OrgData table = new OrgData(Email,Password,Password2,Name, Contact,Address,Type,Desc,url);
OrgDataDAO dao = new OrgDataDAO();
dao.createFriend(table);
}
@FXML
public void handleUpload(ActionEvent t) {
FileChooser fileChooser = new FileChooser();
//Set extension filter
//Show open file dialog
File file = fileChooser.showOpenDialog(null);
try {
BufferedImage bufferedImage = ImageIO.read(file);
Image image = SwingFXUtils.toFXImage(bufferedImage, null);
pic.setImage(image);
} catch (IOException ex) {
System.out.println(ex);
}
}
private Main Main;
public Main getMainApp() {
return Main;
}
// setter for mainApp
public void setMainApp(Main testmainApp) {
this.Main = testmainApp;
}
这是我从未为 URL 输入字符串的模型,因为我无法声明它并且可能有更好的方法来代替使用路径,尽管我确实尝试过并且它给出了我什么都没有。
public class OrgData implements Serializable {
private String email, pw, pw2, name, contact, address, type, desc,url;
final static ObservableList<OrgData> data = FXCollections.observableArrayList();
public OrgData(String email, String pw, String pw2, String name, String contact, String address, String type,
String desc,String url) {
super();
this.email = email;
this.pw = pw;
this.pw2 = pw2;
this.name = name;
this.contact = contact;
this.address = address;
this.type = type;
this.desc = desc;
//this.url = url;
}
//public String getUrl() {
// return url;
//}
//public void setUrl(String url) {
// this.url= url;
//}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public String getPw2() {
return pw2;
}
public void setPw2(String pw2) {
this.pw2 = pw2;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getContact() {
return contact;
}
public void setContact(String contact) {
this.contact = contact;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getType() {
return type;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public static ObservableList<OrgData> getData() {
return data;
}
public String toString(){
return "["+email+","+pw+","+name+","+contact+","+address+","+type+","+desc+","+url+"]";
}
所以这是 DAO,我在用户单击注册按钮后最后保存文件详细信息并存储在 OrgRegData.dat 文件中。 所以就像我说的,我的问题是我无法从我从文件选择器中选择的 imageView 图像中获取路径并将其存储到我的模型中,即使没有 getPath() 或 getURL();点击注册后的那种方法。我没有使用数据库或仅使用文件和文本文件来存储数据并从文件中读取数据的任何东西,所以我希望现在我的问题更清楚
public class OrgDataDAO {
private static final String Friend_File="OrgRegData.dat";
private File dataFile;
public OrgDataDAO() {
Path dPath = FileSystems.getDefault().getPath("resources/data/",Friend_File);
dataFile=new File(dPath.toString());
}
public ObservableList<OrgData> getAllFriends() {
Scanner in;
String record=null;
String[] fields;
ImageView[] images;
ObservableList<OrgData> friends=FXCollections.observableArrayList();;
try {
in=new Scanner(dataFile);
while (in.hasNextLine()) {
record=in.nextLine();
fields=record.split(",");
String email=fields[0];
String password=fields[1];
String password2=fields[2];
String name=fields[3];
String contact = fields[4];
String address=fields[5];
String type=fields[6];
String desc=fields[7];
//String url = fields[8];
OrgData f=new OrgData(email,password,password2,name,contact,address,type,desc,url);
friends.add(f);
}
in.close();
} catch (FileNotFoundException e) {
System.out.println("No record found!");
//e.printStackTrace();
}
return friends;
}
/* assuming friend has a unique name, otherwise may return a list */
public OrgData getEvent(String email) {
// TODO Auto-generated method stub
ObservableList<OrgData> event=getAllFriends();
OrgData Event=null;
for (OrgData f:event) {
if (f.getEmail().equals(email)){
Event=f;
break;
}
}
return Event;
}
public void updateEvent(OrgData Event) {
ObservableList<OrgData> Events=getAllFriends();
for (int i=0; i<Events.size(); i++) {
OrgData f=Events.get(i);
if (f.getEmail().equals(Event.getEmail())){
Events.set(i, Event);
}
}
synToFile(Events);
}
public void deleteEvent(OrgData Event) {
ObservableList<OrgData> Events=getAllFriends();
OrgData delEvent=null;
for (OrgData f:Events) {
if (Event.getEmail().equals(f.getEmail())){
delEvent=f;
break;
}
}
if (delEvent!=null){
Events.remove(delEvent);
synToFile(Events);
}
}
public boolean createFriend(OrgData Event) {
boolean existing=false;
ObservableList<OrgData> Events=getAllFriends();
for (OrgData f:Events) {
if (f.getEmail().equals(Event.getEmail())){
existing=true;
break;
}
}
if (!existing) {
Events.add(Event);
synToFile(Events);
}
return !existing;
}
private void synToFile(ObservableList<OrgData> EventList) {
if (EventList==null)
return;
try {
FileWriter out = new FileWriter(dataFile);
for (OrgData f: EventList) {
out.append(f.toString()+"\n");
}
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
【问题讨论】:
-
那么您遇到了什么样的困难 - 请编辑问题并添加相关代码。
-
当你从
FileChooser获取文件时,你知道路径,那么问题出在哪里??? -
编辑了问题,如果需要显示 fxml 外观的物理视图,我稍后会发布
标签: image javafx imageview fxml filechooser