SlideShow.java
上传用户:songled
上传日期:2022-07-14
资源大小:94k
文件大小:3k
源码类别:

进程与线程

开发平台:

Java

  1. import java.awt.*;
  2. import java.awt.image.*;
  3. import javax.swing.*;
  4. public class SlideShow extends JComponent {
  5. private BufferedImage[] slide;
  6. private Dimension slideSize;
  7. private volatile int currSlide;
  8. private Thread internalThread;
  9. private volatile boolean noStopRequested;
  10. public SlideShow() {
  11. currSlide = 0;
  12. slideSize = new Dimension(50, 50);
  13. buildSlides();
  14. setMinimumSize(slideSize);
  15. setPreferredSize(slideSize);
  16. setMaximumSize(slideSize);
  17. setSize(slideSize);
  18. noStopRequested = true;
  19. Runnable r = new Runnable() {
  20. public void run() {
  21. try {
  22. runWork();
  23. } catch ( Exception x ) {
  24. // in case ANY exception slips through
  25. x.printStackTrace(); 
  26. }
  27. }
  28. };
  29. internalThread = new Thread(r, "SlideShow");
  30. internalThread.start();
  31. }
  32. private void buildSlides() {
  33. // Request that the drawing be done with anti-aliasing
  34. // turned on and the quality high.
  35. RenderingHints renderHints = new RenderingHints(
  36. RenderingHints.KEY_ANTIALIASING,
  37. RenderingHints.VALUE_ANTIALIAS_ON);
  38. renderHints.put(
  39. RenderingHints.KEY_RENDERING,
  40. RenderingHints.VALUE_RENDER_QUALITY);
  41. slide = new BufferedImage[20];
  42. Color rectColor = new Color(100, 160, 250);   // blue
  43. Color circleColor = new Color(250, 250, 150); // yellow
  44. for ( int i = 0; i < slide.length; i++ ) {
  45. slide[i] = new BufferedImage(
  46. slideSize.width,
  47. slideSize.height,
  48. BufferedImage.TYPE_INT_RGB);
  49. Graphics2D g2 = slide[i].createGraphics();
  50. g2.setRenderingHints(renderHints);
  51. g2.setColor(rectColor);
  52. g2.fillRect(0, 0, slideSize.width, slideSize.height);
  53. g2.setColor(circleColor);
  54. int diameter = 0;
  55. if ( i < ( slide.length / 2 ) ) {
  56. diameter = 5 + ( 8 * i );
  57. } else {
  58. diameter = 5 + ( 8 *  ( slide.length - i ) );
  59. }
  60. int inset = ( slideSize.width - diameter ) / 2;
  61. g2.fillOval(inset, inset, diameter, diameter);
  62. g2.setColor(Color.black);
  63. g2.drawRect(
  64. 0, 0, slideSize.width - 1, slideSize.height - 1);
  65. g2.dispose();
  66. }
  67. }
  68. public void paint(Graphics g) {
  69. g.drawImage(slide[currSlide], 0, 0, this);
  70. }
  71. private void runWork() {
  72. while ( noStopRequested ) {
  73. try {
  74. Thread.sleep(100);  // 10 frames per second
  75. // increment the slide pointer
  76. currSlide = ( currSlide + 1 ) % slide.length;
  77. // signal the event thread to call paint()
  78. repaint();
  79. } catch ( InterruptedException x ) {
  80. Thread.currentThread().interrupt(); 
  81. }
  82. }
  83. }
  84. public void stopRequest() {
  85. noStopRequested = false;
  86. internalThread.interrupt();
  87. }
  88. public boolean isAlive() {
  89. return internalThread.isAlive();
  90. }
  91. public static void main(String[] args) {
  92. SlideShow ss = new SlideShow();
  93. JPanel p = new JPanel(new FlowLayout());
  94. p.add(ss);
  95. JFrame f = new JFrame("SlideShow Demo");
  96. f.setContentPane(p);
  97. f.setSize(250, 150);
  98. f.setVisible(true);
  99. }
  100. }