【问题标题】:Adding a listview to each element in a listview?向列表视图中的每个元素添加列表视图?
【发布时间】:2021-03-21 19:58:42
【问题描述】:

我正在尝试将一个列表视图附加到另一个列表视图中的每个元素,并且该列表视图连接到一个 sql 数据库。因此,您在列表视图中选择一个值,然后弹出另一个列表视图。但我不知道如何将它们与听众联系起来。 这是我到目前为止所拥有的,希望你能理解我的问题。 Its supposed to look like this

public static void main(String[] args) {
    launch(args);
}
private ArrayList<String> getArtister () {
    ArrayList<String> artister = new ArrayList<>();
    try (Connection conn = DriverManager.getConnection(
            "jdbc:mysql://vhost6.lnu.se:23306/1ik013v20-12?useSSL=false",
            "1ik013v20-12", "aubergine")) {
        Statement statement = conn.createStatement();
        ResultSet result = statement.executeQuery("SELECT Namn FROM artist");
        while (result.next()) {
            artister.add(result.getString(1));
        }
    } catch (SQLException ex) {
        System.out.println("Something went wrong...");
    }
    return artister;
}
private ArrayList<String> getLåtar () {
    ArrayList<String> låtar = new ArrayList<>();
    try (Connection conn = DriverManager.getConnection(
            "jdbc:mysql://vhost6.lnu.se:23306/1ik013v20-12?useSSL=false",
            "1ik013v20-12", "aubergine")) {
        Statement statement = conn.createStatement();
        ResultSet result = statement.executeQuery("SELECT Namn FROM album WHERE Artist = 'Bob Dylan'");
        while (result.next()) {
            låtar.add(result.getString(1));
        }
    } catch (SQLException ex) {
        System.out.println("Something went wrong...");
    }
    return låtar;
}


private ArrayList<String> getLåtar1 () {
    ArrayList<String> låtar = new ArrayList<>();
    try (Connection conn = DriverManager.getConnection(
            "jdbc:mysql://vhost6.lnu.se:23306/1ik013v20-12?useSSL=false",
            "1ik013v20-12", "aubergine")) {
        Statement statement = conn.createStatement();
        ResultSet result = statement.executeQuery("SELECT Namn FROM album WHERE Artist = 'Bob Marley'");
        while (result.next()) {
            låtar.add(result.getString(1));
        }
    } catch (SQLException ex) {
        System.out.println("Something went wrong...");
    }
    return låtar;
}
private ArrayList<String> getLåtar2 () {
    ArrayList<String> låtar = new ArrayList<>();
    try (Connection conn = DriverManager.getConnection(
            "jdbc:mysql://vhost6.lnu.se:23306/1ik013v20-12?useSSL=false",
            "1ik013v20-12", "aubergine")) {
        Statement statement = conn.createStatement();
        ResultSet result = statement.executeQuery("SELECT Namn FROM album WHERE Artist = 'Bob Marley'");
        while (result.next()) {
            låtar.add(result.getString(1));
        }
    } catch (SQLException ex) {
        System.out.println("Something went wrong...");
    }
    return låtar;
}
private ArrayList<String> getLåtar3 () {
    ArrayList<String> låtar = new ArrayList<>();
    try (Connection conn = DriverManager.getConnection(
            "jdbc:mysql://vhost6.lnu.se:23306/1ik013v20-12?useSSL=false",
            "1ik013v20-12", "aubergine")) {
        Statement statement = conn.createStatement();
        ResultSet result = statement.executeQuery("SELECT Namn FROM album WHERE Artist = 'Bob Marley'");
        while (result.next()) {
            låtar.add(result.getString(1));
        }
    } catch (SQLException ex) {
        System.out.println("Something went wrong...");
    }
    return låtar;
}

@Override
public void start(Stage primaryStage) {
    BorderPane pane = new BorderPane();
    ListView art = new ListView();
    art.getItems().addAll(getArtister());
    ListView alb = new ListView();
    ListView alb1 = new ListView();
    ListView alb2 = new ListView();
    ListView alb3 = new ListView();


    art.getSelectionModel().selectedIndexProperty().addListener(ov -> {

    });

    Text text = new Text("MUSIK");
    text.setFont(new Font(20));
    text.setFill(Color.DARKBLUE);
    pane.setLeft(art);
    pane.setTop(text);
    BorderPane.setAlignment(art, Pos.CENTER_LEFT);
    BorderPane.setAlignment(text, Pos.TOP_LEFT);

    Scene scene = new Scene(pane, 500, 500);
    primaryStage.setTitle("Musiken");
    primaryStage.setScene(scene);
    primaryStage.show();
}

}

【问题讨论】:

  • 在命名方法和变量时始终使用拉丁字符
  • 抱歉,刚接触编程!
  • 不用担心。顺便说一句,你的方法似乎有点不寻常。您想为 4 位不同的艺术家创建 4 个不同的列表,对吗?如果你有 100 位艺术家呢?你必须想得更有活力。您可以将单个集合作为 Pair ,而第一个字符串是艺术家,第二个字符串是专辑。
  • 好的,我明白了。我不必有 4 个不同的列表,它只是我现在所在的位置。最初的想法是有两个列表,一个是艺术家,一个是艺术家的歌曲。我在(艺术家)列表中按下的艺术家确定了另一个列表应该显示的内容。
  • 解决方案有效吗?

标签: java mysql listview javafx


【解决方案1】:

好的,试试这个。像下面这样创建一个新类

private class Vinyl
{
    String artist;
    List<String> listAlbums;
    
    public Vinyl(String artist) {
        this.artist = artist;
        listAlbums = new ArrayList<String>();
    }
    
    public void AddToListAlbums(String album)
    {
        listAlbums.add(album);
    }

    public String getArtist() {
        return artist;
    }

    public List<String> getListAlbums() {
        return listAlbums;
    }               
}

我只是将它命名为乙烯基。你可以随意命名。

现在回到你的主类,在全局范围内定义一个 Vinyl 列表。仅调用这些方法来填充您的列表。

List<Vinyl> listVinyl = new ArrayList<>();  

private void GetArtists () {
    
    try (Connection conn = DriverManager.getConnection(
            "jdbc:mysql://vhost6.lnu.se:23306/1ik013v20-12?useSSL=false",
            "1ik013v20-12", "aubergine")) {
        Statement statement = conn.createStatement();
        ResultSet result = statement.executeQuery("SELECT Namn FROM artist");
        while (result.next()) {
            listVinyl.add(new Vinyl(result.getString(1))); 
        }
    } catch (SQLException ex) {
        System.out.println("Something went wrong...");
    }        
}   

private void GetAlbums () {      
    try (Connection conn = DriverManager.getConnection(
            "jdbc:mysql://vhost6.lnu.se:23306/1ik013v20-12?useSSL=false",
            "1ik013v20-12", "aubergine")) {
        Statement statement = conn.createStatement();
        ResultSet result = statement.executeQuery("SELECT Namn FROM album");
        
        Vinyl currentVinyl;
        String album = "";
        
        while (result.next()) {
            
            String artist = result.getString(1); // TODO you must correct the number. I don't know which field is it.
            
            currentVinyl = listVinyl.stream()
                    .filter(u -> u.artist.equals(artist))
                    .findAny()
                    .orElse(null);
            
            album = result.getString(2); // TODO you must correct the number. I don't know which field is it.               
            
            currentVinyl.AddToListAlbums(album);                
        }
    } catch (SQLException ex) {
        System.out.println("Something went wrong...");
    }
}

请注意,有 2 个待办事项供您使用。这些是您的字段索引。我不知道你的数据库的结构,所以我只写了1和2。那些必须是你的艺术家名和专辑名的字段。

在此结束时,您将只有 1 个集合,涵盖您需要的所有内容。

【讨论】:

  • 不客气。请让我知道这是否有效。
  • java 命名约定,拜托
猜你喜欢
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2022-08-11
相关资源
最近更新 更多