JFrame中用循环控制JLabel加载图片导致图片丢失,这个问题有解决办法吗?

2019-11-21 10:27发布

正常代码段:

 

 1     private void newJLabel() {
 2         JLabel[] thum=new JLabel[12];
 3         int line=1;
 4         for(int i=1;i<=12;i++) {
 5             thum[i-1]=new JLabel();
 6             if(i%5==1) {
 7                 if(line==1) {
 8                     thum[i-1].setBounds(75*1, 50*line, 196, 282);
 9                 }else{
10                     thum[i-1].setBounds(75*1, 50*line+282*(line-1), 196, 282);
11                 }    
12             }else if(i%5==2){
13                 if(line==1) {
14                     thum[i-1].setBounds(75*2+(296*1), 50*line, 196, 282);
15                 }else {
16                     thum[i-1].setBounds(75*2+(296*1), 50*line+282*(line-1), 196, 282);
17                 }
18                 
19             }else if(i%5==3){
20                 if(line==1) {
21                     thum[i-1].setBounds(75*3+(296*2), 50*line, 196, 282);
22                 }else {
23                     thum[i-1].setBounds(75*3+(296*2), 50*line+282*(line-1), 196, 282);
24                 }
25                 
26             }else if(i%5==4){
27                 if(line==1) {
28                     thum[i-1].setBounds(75*4+(296*3), 50*line, 196, 282);
29                 }else {
30                     thum[i-1].setBounds(75*4+(296*3), 50*line+282*(line-1), 196, 282);
31                 }
32             }else if(i%5==0){
33                 if(line==1) {
34                     thum[i-1].setBounds(75*5+(296*4), 50*line, 196, 282);
35                 }else {
36                     thum[i-1].setBounds(75*5+(296*4), 50*line+282*(line-1), 196, 282);
37                 }
38                 
39             }
40             if(i%5==0) {
41                 line++;
42             }
43             thum[i-1].setOpaque(true);
44             thum[i-1].setIcon(new ImageIcon("src/thumbnails/3.jpg"));//问题出在这里
45             thum[i-1].setVerticalAlignment(JLabel.TOP);
46             this.add(thum[i-1]);
47         }
48     }

正常显示:

异常代码段:

 1     private void newJLabel() {
 2         JLabel[] thum=new JLabel[12];
 3         int line=1;
 4         for(int i=1;i<=12;i++) {
 5             thum[i-1]=new JLabel();
 6             if(i%5==1) {
 7                 if(line==1) {
 8                     thum[i-1].setBounds(75*1, 50*line, 196, 282);
 9                 }else{
10                     thum[i-1].setBounds(75*1, 50*line+282*(line-1), 196, 282);
11                 }    
12             }else if(i%5==2){
13                 if(line==1) {
14                     thum[i-1].setBounds(75*2+(296*1), 50*line, 196, 282);
15                 }else {
16                     thum[i-1].setBounds(75*2+(296*1), 50*line+282*(line-1), 196, 282);
17                 }
18                 
19             }else if(i%5==3){
20                 if(line==1) {
21                     thum[i-1].setBounds(75*3+(296*2), 50*line, 196, 282);
22                 }else {
23                     thum[i-1].setBounds(75*3+(296*2), 50*line+282*(line-1), 196, 282);
24                 }
25                 
26             }else if(i%5==4){
27                 if(line==1) {
28                     thum[i-1].setBounds(75*4+(296*3), 50*line, 196, 282);
29                 }else {
30                     thum[i-1].setBounds(75*4+(296*3), 50*line+282*(line-1), 196, 282);
31                 }
32             }else if(i%5==0){
33                 if(line==1) {
34                     thum[i-1].setBounds(75*5+(296*4), 50*line, 196, 282);
35                 }else {
36                     thum[i-1].setBounds(75*5+(296*4), 50*line+282*(line-1), 196, 282);
37                 }
38                 
39             }
40             if(i%5==0) {
41                 line++;
42             }
43             thum[i-1].setOpaque(true);
44             thum[i-1].setIcon(new ImageIcon("src/thumbnails/"+i+".jpg"));//这里改成i就出毛病了
45             thum[i-1].setVerticalAlignment(JLabel.TOP);
46             this.add(thum[i-1]);
47         }
48     }

异常显示:

2条回答
聊天终结者
2楼-- · 2019-11-21 11:00

是不是你图片大小不一样

查看更多
迷人小祖宗
3楼-- · 2019-11-21 11:04

出现这个问题是因为加了这个:setOpaque(true);注释掉就可以了

查看更多
登录 后发表回答