首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ListView和FileChooser

ListView和FileChooser
EN

Stack Overflow用户
提问于 2017-05-17 08:31:48
回答 2查看 694关注 0票数 0

我在ListView接受内容方面遇到了麻烦。这是代码,如果有人能给我建议的话:

代码语言:javascript
复制
  public void button1Action(){
    Main main=new Main();
    FileChooser fc=new FileChooser();
    fc.setInitialDirectory(new File("C:\\Users"));
    List<File>selectedFiles=fc.showOpenMultipleDialog(null);
    if(selectedFiles!=null){
       for(int i=0;i<selectedFiles.size();i++){
           main.lview.getItems().add(selectedFiles.get(i).getAbsolutePath());
       } 
    }else{
        System.out.println("File is not Valid");
    }
}

在我选择完文件之后,这些路径不会显示在listview上。

编辑:即使我手动地通过代码添加一些字符串,它也不会显示任何内容,这是我的主要类:

代码语言:javascript
复制
public class Main extends Application {
BorderPane root=new BorderPane();
ListView<String> lview=new ListView<String>();

 Button btn_load = new Button("Load");
Button btn_play = new Button("Play");
Button btn_stop = new Button("Stop");
Button btn_next = new Button("Next");
Button btn_previous = new Button("Previous");
Button btn_rewind = new Button("Rewind");
TextField tf_pesma=new TextField();
Slider slider=new Slider();
HBox hbox=new HBox();
HBox hbox1=new HBox();

@Override
public void start(Stage primaryStage) {
    Logic logic=new Logic();
    slider.setValue(50);
    slider.setMin(0);
    slider.setMax(100);
    slider.setMaxWidth(100);
    lview.setDisable(false);
    lview.setVisible(true);
    lview.setPrefWidth(800);

 btn_load.setOnAction(e->{
     logic.button1Action();
    });
 lview.setOnMouseClicked(new EventHandler<MouseEvent>(){
     @Override
     public void handle(MouseEvent event){

     }
 });


    VBox floor = new VBox();
    floor.setPadding(new Insets(10,10,10,10)); 
    floor.setSpacing(10);
    floor.getChildren().addAll(addInHBox(),addInHBox1());
    VBox right=new VBox();
    right.setPadding(new Insets(10,10,10,10));
    right.setSpacing(10);
    HBox button=new HBox();
    button.setAlignment(Pos.CENTER);
    button.getChildren().add(btn_load);
    right.getChildren().addAll(lview,button);
    root.setBottom(floor);
    root.setRight(right);
    Scene scene = new Scene(root, 900, 580);

    primaryStage.setTitle("Music Player");
    primaryStage.setScene(scene);
    primaryStage.show();
}

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    launch(args);
}
public HBox addInHBox(){
    hbox.setPadding(new Insets(10,10,10,10));
    hbox.setSpacing(10);
    hbox.getChildren().addAll(btn_play,btn_stop,btn_next,btn_previous,btn_rewind);
    return hbox;
}
public HBox addInHBox1(){
    hbox1.setPadding(new Insets(10,10,10,10));
    hbox1.setSpacing(10);
    tf_pesma.setPrefWidth(700);
    hbox1.getChildren().addAll(tf_pesma,slider);
    return hbox1;
}
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-17 11:58:48

您正在Logic类中创建新的Logic实例。显示在屏幕上的ListView不属于您创建的新的主实例。

为了解决这个问题,访问已经存在的Main的lview

代码语言:javascript
复制
// Add this in Main class
private void button1Action() {
    FileChooser fc = new FileChooser();
    fc.setInitialDirectory(new File("C:\\Users"));
    List<File> selectedFiles = fc.showOpenMultipleDialog(null);
    if (selectedFiles != null) {
        for (int i = 0; i < selectedFiles.size(); i++) {
            lview.getItems().add(selectedFiles.get(i).getAbsolutePath());
        }
    } else {
        System.out.println("File is not Valid");
    }
}

改变处理程序。

代码语言:javascript
复制
btn_load.setOnAction(e->{
    button1Action();
});
票数 1
EN

Stack Overflow用户

发布于 2017-05-17 11:28:32

您正在尝试将元素直接添加到由ObservableList提供的main.lview.getItems()中。

我建议你这样做:

代码语言:javascript
复制
if(selectedFiles!=null){
   List<String> lpaths = new ArrayList<>();
   for(int i=0;i<selectedFiles.size();i++){
       lpaths.add(selectedFiles.get(i).getAbsolutePath());
   } 
   main.lview.setItems(FXCollections.observableArrayList(lpaths))
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44019540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档