16.13
Posted 功夫茶茶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了16.13相关的知识,希望对你有一定的参考价值。
需要注意的是:image文件夹应该放在工程文件的文件夹处,而不是类文件夹里面
经过了2天的思考这个题目最终还是做出来了。
我的思路:由于题目提示是在框架中放置标签,然后将图像图标放置在标签中,于是我最开始想通过标签的初始化进行设计。但是这种方式是无法进行图标的改变的,因为一旦初始化以后,图标就已经固定且无法修改。
所以这种思路思考了2天也是无果,最终只能在paintComponent()函数里面做文章。而paintComponent()函数就好处理得多,因为对它进行调用,会重绘JLabel,这样只要是使用了paintComponent()的绘图都会重新加载。于是我找到了g.drawImage(im[i], 0, 0, 800, 600,this); 把图标做成数组,然后最后一个this是我瞎填的,毕竟第一次使用这个,也不知道最后一个参数 ImageObserver observer 到底填什么,于是随便填了个this姑且当做就是这个对象。结果居然成功了!
paintComponent会在初始化之前被swing调用,所以,一般如果初始化一个JComponent组件的话paintComponent会在初始化之前就调用一次
1 import java.awt.*; 2 import java.awt.event.ActionEvent; 3 import java.awt.event.ActionListener; 4 import java.util.Scanner; 5 6 import javax.swing.*; 7 8 public class Test_16_13 extends JFrame{ 9 Image im[] = {new ImageIcon("image/slide1.jpg").getImage(),new ImageIcon("image/slide2.jpg").getImage(),new ImageIcon("image/slide3.jpg").getImage(), 10 new ImageIcon("image/slide4.jpg").getImage(),new ImageIcon("image/slide5.jpg").getImage()}; 11 12 public Test_16_13(){ //page353 13 // JLabel1 j1 = new JLabel1(); 14 add(new JLabel1()); 15 } 16 17 public static void main(String[] args){ 18 Test_16_13 frame = new Test_16_13(); 19 frame.setSize(800, 600); 20 frame.setTitle("Exercise15_8"); 21 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 22 frame.setLocationRelativeTo(null); // Center the frame 23 frame.setVisible(true); 24 } 25 class JLabel1 extends JLabel{ 26 private ImageIcon ic; 27 int x = 300,y = 300,i=-1; 28 29 public JLabel1(){ 30 i = 0; 31 Timer timer = new Timer(30000,new TimerListener()); 32 timer.start(); 33 } 34 public JLabel1(ImageIcon ic){ 35 super(ic); 36 } 37 public JLabel1(String s){ 38 super(s); 39 i = 0; 40 Timer timer = new Timer(3000,new TimerListener()); 41 timer.start(); 42 } 43 public void setImageIcon(ImageIcon ic) 44 { 45 this.ic = ic; 46 } 47 protected void paintComponent(Graphics g){ 48 super.paintComponent(g); 49 g.drawImage(im[i], 0, 0, 800, 600,this); 50 if(i>4 || i < 0) 51 i = 0; 52 System.out.println(i); 53 i++; 54 } 55 class TimerListener implements ActionListener{ 56 57 @Override 58 public void actionPerformed(ActionEvent e) { 59 // TODO Auto-generated method stub 60 repaint(); 61 } 62 } 63 } 64 }
以上是关于16.13的主要内容,如果未能解决你的问题,请参考以下文章
Rails 仅在生产时才在页面重新加载时丢失会话变量 current_user_id(React 16.13、Rails 6、Heroku)