YauhenMardan

Untitled

Mar 12th, 2019
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.73 KB | None | 0 0
  1. package com.company;
  2.  
  3. import javax.imageio.ImageIO;
  4. import javax.swing.*;
  5. import javax.swing.event.ChangeEvent;
  6. import javax.swing.event.ChangeListener;
  7. import java.awt.*;
  8. import java.awt.event.ActionEvent;
  9. import java.awt.event.ActionListener;
  10. import java.awt.image.BufferedImage;
  11. import java.io.File;
  12. import java.io.IOException;
  13.  
  14. public class BallDialog extends JDialog {
  15.  
  16. //const
  17. public static int SCREEN_WIDTH=200;
  18. public static int SCREEN_HEIGHT=200;
  19. public static int IMAGE_WIDTH=30;
  20. public static int IMAGE_HEIGHT=30;
  21. public static String IMAGE_FILE_NAME="img_311846.png";
  22. public static int TIMER_SPEED=50;
  23. public static int MIN_SPEED=1;
  24. public static int MAX_SPEED=50;
  25. public static int INT_SPEED=1;
  26. public static int T=10;
  27. public static String[] items={"Inward","Backward"};
  28. //gui
  29. private JSlider slider;
  30. private JPanel drawPanel;
  31. private JPanel menuPanel;
  32. private JPanel mainPanel;
  33. private JComboBox comboBox;
  34. private Timer timer;
  35. //
  36. private BufferedImage dbImage =null;
  37. private BufferedImage image;
  38. private int t=MAX_SPEED/2;
  39. private int direction=1;
  40.  
  41. private double tempAngle;
  42. private double currAngle;
  43.  
  44. BallDialog(JFrame owner){
  45. super(owner,true);
  46. //panel
  47. mainPanel=new JPanel(new BorderLayout());
  48. menuPanel=new JPanel(new BorderLayout());
  49. //slider
  50. slider=new JSlider(MIN_SPEED,MAX_SPEED,INT_SPEED);
  51. slider.setValue(t);
  52. menuPanel.add(slider,BorderLayout.EAST);
  53. //combobox
  54. comboBox=new JComboBox(items);
  55. menuPanel.add(comboBox,BorderLayout.WEST);
  56. //panel
  57. drawPanel =new JPanel(){
  58. @Override
  59. public void paintComponent(Graphics g){
  60. super.paintComponent(g);
  61. g.drawImage(dbImage,0,0,this);
  62. }
  63. };
  64. drawPanel.setPreferredSize(new Dimension(SCREEN_WIDTH,SCREEN_HEIGHT));
  65. drawPanel.setDoubleBuffered(true);
  66. drawPanel.setFocusable(true);
  67. drawPanel.setBackground(Color.white);
  68. //image
  69. readImage(IMAGE_FILE_NAME);
  70. //timer
  71. timer =new Timer(TIMER_SPEED/t, new ActionListener() {
  72. int elapsedTime=0;
  73. @Override
  74. public void actionPerformed(ActionEvent e) {
  75. // if(elapsedTime==TIMER_SPEED){
  76. // elapsedTime=0;
  77. // }
  78. int width= drawPanel.getWidth();
  79. int height= drawPanel.getHeight();
  80. int diam=Math.min(width,height);
  81. dbImage = new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);
  82. Graphics dbStartGraphics= dbImage.getGraphics();
  83. dbStartGraphics.setColor(Color.WHITE);
  84. dbStartGraphics.fillRect(0,0,width,height);
  85. int x=getCircleX(diam/2,diam/2-IMAGE_WIDTH,elapsedTime);
  86. int y=getCircleY(diam/2,diam/2-IMAGE_HEIGHT,elapsedTime);
  87. dbStartGraphics.drawImage(image,x-IMAGE_WIDTH/2,y-IMAGE_HEIGHT/2,IMAGE_WIDTH,IMAGE_HEIGHT,null);
  88. elapsedTime++;
  89. repaint();
  90. }
  91. });
  92. timer.start();
  93. //window
  94. mainPanel.add(menuPanel, BorderLayout.NORTH);
  95. mainPanel.add(drawPanel,BorderLayout.CENTER);
  96. setContentPane(mainPanel);
  97. setResizable(true);
  98. setMinimumSize(new Dimension(SCREEN_WIDTH,SCREEN_HEIGHT));
  99. pack();
  100. //
  101. slider.addChangeListener(new ChangeListener() {
  102. @Override
  103. public void stateChanged(ChangeEvent e) {
  104. t=slider.getValue();
  105. timer.setDelay(TIMER_SPEED/t);
  106. }
  107. });
  108. comboBox.addActionListener(new ActionListener() {
  109. @Override
  110. public void actionPerformed(ActionEvent e) {
  111. if(comboBox.getSelectedIndex()==0){
  112. direction=1;
  113. } else{
  114. direction=-1;
  115. currAngle=tempAngle;
  116. }
  117. }
  118. });
  119. }
  120. int getCircleX(int o,int r,int time){
  121. tempAngle=2*Math.PI*time/1000;
  122. Double x=r*Math.cos(2*Math.PI*time/1000)+o;
  123. return x.intValue();
  124. }
  125. int getCircleY(int o,int r,int time){
  126. Double y=r*Math.sin(2*Math.PI*time/1000)+o;
  127. return y.intValue();
  128. }
  129. void readImage(String filename){
  130. try{
  131. File file=new File(filename);
  132. image = ImageIO.read(file);
  133. }catch (IOException e){
  134. JOptionPane.showMessageDialog(this, "Cannot open image.", "Waring", JOptionPane.WARNING_MESSAGE);
  135. }
  136. }
  137. }
Advertisement
Add Comment
Please, Sign In to add comment