Java 如何在jlabel上显示字符串的arraylist?
您好,我有一个字符串的arraylist,我想在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
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());