Java 如何在jlabel上显示字符串的arraylist?

Java 如何在jlabel上显示字符串的arraylist?,java,arraylist,Java,Arraylist,您好,我有一个字符串的arraylist,我想在JLabel上显示arraylist的内容,用空格或逗号分隔。但它只显示了一个字符串,最后一个 public void ShowMovie(int idMovie) throws SQLException, IOException { int ID = idMovie; String IDMOVIE = Integer.toString(ID); IDMovieLabel.setText(IDMOV

您好,我有一个字符串的arraylist,我想在JLabel上显示arraylist的内容,用空格或逗号分隔。但它只显示了一个字符串,最后一个

 public void ShowMovie(int idMovie) throws SQLException, IOException {
        int ID = idMovie;
        String IDMOVIE = Integer.toString(ID);
        IDMovieLabel.setText(IDMOVIE);

        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Cover.class.getName()).log(Level.SEVERE, null, ex);
        }
        con = DriverManager.getConnection("jdbc:mysql://localhost/whichmovie", "Asis", "dekrayat24");

        String sql = "SELECT Title,Year,Country,recomendacion,Cover,Rating,NameDirec,Name FROM movie "
                + "Inner join direction on (movie.idMovie=direction.idMovie5)"
                + "Inner join director on (direction.idDirector=director.idDirector)"
                + "Inner join cast on (movie.idMovie=cast.idMovie4)"
                + "Inner join actor on (cast.idActor=actor.idActor)"
                + "where idMovie= '" + ID + "'";

        st = con.prepareStatement(sql);
        rs = st.executeQuery(sql);

        while (rs.next()) {

            String titulo = rs.getString(1);
            int añoInt = rs.getInt(2);
            String año = Integer.toString(añoInt);

            byte[] imagedataCover = rs.getBytes("Country");
            byte[] imagedataCover1 = rs.getBytes("Cover");
            format = new ImageIcon(imagedataCover);
            format2 = new ImageIcon(imagedataCover1);

            TituloLabel.setText(titulo);
            AñoLabel.setText(año);
            CountryLabel.setIcon(format);
            DirectorLabel.setText(rs.getString(7));

            int Recomend = rs.getInt(4);
            String Recom = Integer.toString(Recomend);

            RecommendLabel.setText(Recom);

            int Rating = rs.getInt(6);
            String Rat = Integer.toString(Rating);

            RatingLabel.setText(Rat);
            starRater1.setSelection(Rating);
            starRater1.setEnabled(false);

            Image imgEscalada = format2.getImage().getScaledInstance(CoverLabel.getWidth(),
                    CoverLabel.getHeight(), Image.SCALE_SMOOTH);
            Icon iconoEscalado = new ImageIcon(imgEscalada);
            CoverLabel.setIcon(iconoEscalado);

            ArrayList<String> actors = new ArrayList<>();
            actors.add(rs.getString(8));
            System.out.println(actors);// Here i can see i get 9 actors.

            StringBuilder sb = new StringBuilder();

            boolean first = true;
            for (String s : actors) {
                if (!first) {
                    sb.append(' ');
                }
                sb.append(s);
                first = false;
            }

            CastLabel1.setText(sb.toString());

        }
        rs.close();
        st.close();
        con.close();

    }
public void ShowMovie(int-idMovie)抛出SQLException、IOException{
int ID=idMovie;
字符串IDMOVIE=Integer.toString(ID);
IDMovieLabel.setText(IDMOVIE);
试一试{
Class.forName(“com.mysql.jdbc.Driver”);
}捕获(ClassNotFoundException ex){
Logger.getLogger(Cover.class.getName()).log(Level.SEVERE,null,ex);
}
con=DriverManager.getConnection(“jdbc:mysql://localhost/whichmovie","Asis","dekrayat24",;
String sql=“选择标题、年份、国家、推荐、封面、评级、名称目录、电影名称”
+“打开内部连接方向(movie.idMovie=direction.idMovie5)”
+“内部联接控制器打开(direction.idDirector=director.idDirector)”
+“内部联接播放时间(movie.idMovie=cast.idMovie4)”
+“上的内部联接参与者(cast.idActor=actor.idActor)”
+其中idMovie='“+ID+”;
st=con.prepareStatement(sql);
rs=st.executeQuery(sql);
while(rs.next()){
String titulo=rs.getString(1);
int añoInt=rs.getInt(2);
字符串año=Integer.toString(añpoint);
byte[]imagedataCover=rs.getBytes(“国家”);
字节[]imagedataCover1=rs.getBytes(“封面”);
格式=新图像图标(imagedataCover);
format2=新的图像图标(imagedataCover1);
TituloLabel.setText(titulo);
AñoLabel.setText(Año);
CountryLabel.setIcon(格式);
DirectorLabel.setText(rs.getString(7));
int recoend=rs.getInt(4);
字符串Recom=Integer.toString(重新结束);
RecommendLabel.setText(推荐);
内部评级=rs.getInt(6);
字符串Rat=整数。toString(额定值);
RatingLabel.setText(大鼠);
Starter1.选举(评级);
starRater1.setEnabled(false);
Image imgEscalada=format2.getImage().getScaledInstance(CoverLabel.getWidth(),
CoverLabel.getHeight(),Image.SCALE\u平滑);
Icon iconoEscalado=新图像图标(imgEscalada);
CoverLabel.setIcon(iconoscalado);
ArrayList actors=新的ArrayList();
actors.add(rs.getString(8));
System.out.println(actors);//在这里我可以看到我有9个actors。
StringBuilder sb=新的StringBuilder();
布尔值优先=真;
对于(字符串s:演员){
如果(!第一个){
某人附加(“”);
}
某人追加;
第一个=假;
}
CastLabel1.setText(sb.toString());
}
rs.close();
圣克洛斯();
con.close();
}
有什么帮助吗


编辑:不幸的是,没有任何解决方案对我有所帮助,可能我在方法中做错了什么,我发布了完整的方法。

问题是您正在为for循环中的每个步骤重置标签,而不是创建累积结果。见下文:

StringBuilder buf = new StringBuilder();
for(int i = 0; i < actors.size(); i++){
    buf.append(actors.get(i));
    if(i < actors.size() -1){
        buf.append(" ");
    }
}
CastLabel1.setText(buf.toString())
StringBuilder buf=new StringBuilder();
对于(int i=0;i
字符串文本=”;
对于(int i=0;i
您应该首先构建要显示的字符串,然后将其设置为标签文本:

StringBuilder sb = new StringBuilder();

boolean first = true;
for (String s : actors) {
    if (!first)
        sb.append(' ');
    sb.append(s);
    first = false;
}

CastLabel1.setText(sb.toString());

当前所做的是在每次迭代期间更改整个标签文本,因此最终文本是列表中最后一个元素的文本。

当调用setText()时,将替换以前的文本。因此,您需要首先连接字符串,然后使用大字符串调用setText()。
m
超出范围,您正在赋值而不是连接,并且您正在使用无意义的参数调用
setText
StringBuilder sb = new StringBuilder();

boolean first = true;
for (String s : actors) {
    if (!first)
        sb.append(' ');
    sb.append(s);
    first = false;
}

CastLabel1.setText(sb.toString());