BackgroundPopUp.java 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. package ui.view;
  2. import javax.swing.JDialog;
  3. import javax.swing.JFileChooser;
  4. import javax.swing.JPanel;
  5. import javax.swing.JTextField;
  6. import javax.swing.filechooser.FileNameExtensionFilter;
  7. import javax.swing.ButtonGroup;
  8. import javax.swing.ImageIcon;
  9. import javax.swing.JButton;
  10. import org.eclipse.wb.swing.FocusTraversalOnArray;
  11. import classes.CpsUpperNode;
  12. import java.awt.Component;
  13. import java.awt.event.ActionEvent;
  14. import java.awt.event.ActionListener;
  15. import java.awt.event.ComponentAdapter;
  16. import java.awt.event.ComponentEvent;
  17. import java.io.File;
  18. import java.io.FileInputStream;
  19. import java.io.FileOutputStream;
  20. import java.io.IOException;
  21. import java.io.InputStream;
  22. import java.io.OutputStream;
  23. import java.awt.BorderLayout;
  24. import javax.swing.JLabel;
  25. import javax.swing.JOptionPane;
  26. import javax.swing.JRadioButton;
  27. import javax.swing.SwingConstants;
  28. import java.awt.GridLayout;
  29. import java.awt.Color;
  30. import java.awt.FlowLayout;
  31. /**
  32. * Popup for setting the Background Image for the current View.
  33. **/
  34. public class BackgroundPopUp extends JDialog {
  35. /**
  36. *
  37. */
  38. private static final long serialVersionUID = 1L;
  39. private final JTextField textPath = new JTextField("");
  40. private final JButton btnBrowse = new JButton("Browse");
  41. private JPanel panelImageRadio = new JPanel();
  42. private String path = "";
  43. private final JPanel panelBrowse = new JPanel();
  44. private final JPanel panelOK = new JPanel();
  45. private final JButton btnOK = new JButton("OK");
  46. private final JLabel lblImage = new JLabel();
  47. private ImageIcon icon = null;
  48. private double imgScale = 1;
  49. private final JButton btnCancel = new JButton("Cancel");
  50. private final JPanel panelRadio = new JPanel();
  51. private final JRadioButton rdbtnImagePixel = new JRadioButton("Use Image Size");
  52. private final JRadioButton rdbtnStretched = new JRadioButton("Strech Image");
  53. private final JRadioButton rdbtnCustom = new JRadioButton("Custom Size");
  54. // Modes
  55. public static final int IMAGE_PIXELS = 0, STRETCHED = 1, CUSTOM = 2;
  56. private int mode = 0;
  57. private final JPanel panel = new JPanel();
  58. private final JTextField imageWidth = new JTextField();
  59. private final JTextField imageHeight = new JTextField();
  60. JFileChooser fileChooser;
  61. public BackgroundPopUp(MyCanvas canvas, CpsUpperNode uNode) {
  62. super((java.awt.Frame) null, true);
  63. getContentPane().setBackground(Color.WHITE);
  64. this.setTitle("Set View Background");
  65. setBounds(100, 100, 600, 340);
  66. panelBrowse.setBorder(null);
  67. panelImageRadio.setBorder(null);
  68. panelOK.setBorder(null);
  69. panelRadio.setBorder(null);
  70. getContentPane().add(panelImageRadio, BorderLayout.CENTER);
  71. panelImageRadio.setLayout(new BorderLayout(0, 0));
  72. lblImage.setBackground(Color.WHITE);
  73. lblImage.setHorizontalAlignment(SwingConstants.LEFT);
  74. panelImageRadio.add(lblImage, BorderLayout.CENTER);
  75. panelImageRadio.add(panelRadio, BorderLayout.EAST);
  76. // Radio Buttons
  77. panelRadio.setLayout(new GridLayout(0, 1, 0, 0));
  78. rdbtnImagePixel.setBackground(Color.WHITE);
  79. rdbtnImagePixel.setSelected(true);
  80. panelRadio.add(rdbtnImagePixel);
  81. rdbtnStretched.setBackground(Color.WHITE);
  82. panelRadio.add(rdbtnStretched);
  83. panelBrowse.setBackground(Color.WHITE);
  84. ButtonGroup bgroup = new ButtonGroup();
  85. bgroup.add(rdbtnImagePixel);
  86. bgroup.add(rdbtnStretched);
  87. panelRadio.add(rdbtnCustom);
  88. rdbtnCustom.setBackground(new Color(255, 255, 255));
  89. bgroup.add(rdbtnCustom);
  90. panel.setBackground(Color.WHITE);
  91. panelRadio.add(panel);
  92. panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
  93. panel.add(imageWidth);
  94. imageWidth.setColumns(10);
  95. panel.add(imageHeight);
  96. imageHeight.setColumns(10);
  97. // Browse Panel
  98. getContentPane().add(panelBrowse, BorderLayout.NORTH);
  99. panelBrowse.setLayout(new BorderLayout(0, 0));
  100. panelBrowse.add(btnBrowse, BorderLayout.WEST);
  101. // Browse Row Functions
  102. btnBrowse.addActionListener(new ActionListener() {
  103. @Override
  104. public void actionPerformed(ActionEvent e) {
  105. fileChooser = new JFileChooser();
  106. FileNameExtensionFilter filter = new FileNameExtensionFilter("png, jpg or jpeg", "png", "jpg", "jpeg");
  107. fileChooser.setFileFilter(filter);
  108. if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
  109. path = fileChooser.getSelectedFile().getPath();
  110. textPath.setText(path);
  111. icon = new ImageIcon(textPath.getText());
  112. imageWidth.setText("" + icon.getIconWidth());
  113. imageHeight.setText("" + icon.getIconHeight());
  114. // Calculate the Image scale to fit the Panel
  115. if (Math.min(panelImageRadio.getWidth() - panelRadio.getWidth(),
  116. panelImageRadio.getHeight()) == (panelImageRadio.getWidth() - panelRadio.getWidth())) {
  117. imgScale = (double) Math.min(icon.getIconWidth(), icon.getIconHeight())
  118. / panelImageRadio.getWidth();
  119. } else {
  120. imgScale = (double) Math.min(icon.getIconWidth(), icon.getIconHeight())
  121. / panelImageRadio.getHeight();
  122. }
  123. lblImage.setIcon(new ImageIcon(
  124. new ImageIcon(path).getImage().getScaledInstance((int) (icon.getIconWidth() / imgScale),
  125. (int) (icon.getIconHeight() / imgScale), java.awt.Image.SCALE_FAST)));
  126. }
  127. }
  128. });
  129. textPath.setEditable(false);
  130. panelBrowse.add(textPath, BorderLayout.CENTER);
  131. textPath.setColumns(20);
  132. panelImageRadio.setFocusTraversalPolicy(new FocusTraversalOnArray(new Component[] { btnBrowse, textPath }));
  133. panelOK.setBackground(Color.WHITE);
  134. getContentPane().add(panelOK, BorderLayout.SOUTH);
  135. panelOK.add(btnOK);
  136. btnOK.addActionListener(new ActionListener() {
  137. @Override
  138. public void actionPerformed(ActionEvent e) {
  139. //Bild ausgewählt?
  140. if (!path.isEmpty()) {
  141. if (rdbtnImagePixel.isSelected()) {
  142. mode = 0;
  143. } else if (rdbtnStretched.isSelected()) {
  144. mode = 1;
  145. } else if (rdbtnCustom.isSelected()) {
  146. mode = 2;
  147. }
  148. if (canvas != null) {
  149. copieImage();
  150. canvas.setBackgroundImage(path, mode, Integer.parseInt(imageWidth.getText()),
  151. Integer.parseInt(imageHeight.getText()));
  152. canvas.repaint();
  153. } else if (uNode != null) {
  154. copieImage();
  155. uNode.setBackgroundImage(path, mode, Integer.parseInt(imageWidth.getText()),
  156. Integer.parseInt(imageHeight.getText()));
  157. }
  158. dispose();
  159. } else {
  160. JOptionPane.showMessageDialog(null,
  161. "No image selected!",
  162. "Warning!",
  163. JOptionPane.WARNING_MESSAGE);
  164. }
  165. }
  166. });
  167. panelOK.add(btnCancel);
  168. btnCancel.addActionListener(new ActionListener() {
  169. @Override
  170. public void actionPerformed(ActionEvent e) {
  171. dispose();
  172. }
  173. });
  174. this.addComponentListener(new ComponentAdapter() {
  175. @Override
  176. public void componentResized(ComponentEvent e) {
  177. if (icon != null) {
  178. // Calculate the Image scale to fit the Panel
  179. if (Math.min(panelImageRadio.getWidth() - panelRadio.getWidth(),
  180. panelImageRadio.getHeight()) == (panelImageRadio.getWidth() - panelRadio.getWidth())) {
  181. imgScale = (double) Math.min(icon.getIconWidth(), icon.getIconHeight())
  182. / panelImageRadio.getWidth();
  183. } else {
  184. imgScale = (double) Math.min(icon.getIconWidth(), icon.getIconHeight())
  185. / panelImageRadio.getHeight();
  186. }
  187. lblImage.setIcon(new ImageIcon(
  188. new ImageIcon(path).getImage().getScaledInstance((int) (icon.getIconWidth() / imgScale),
  189. (int) (icon.getIconHeight() / imgScale), java.awt.Image.SCALE_SMOOTH)));
  190. }
  191. }
  192. });
  193. }
  194. protected void copieImage() {
  195. InputStream inStream = null;
  196. OutputStream outStream = null;
  197. try {
  198. File source = new File(path);
  199. File dest = new File(System.getProperty("user.home") + "/HolonGUI/Images/");
  200. dest.mkdirs();
  201. dest = new File(dest, source.getName());
  202. path = "" + dest;
  203. inStream = new FileInputStream(source);
  204. outStream = new FileOutputStream(dest);
  205. byte[] buffer = new byte[1024];
  206. int length;
  207. while ((length = inStream.read(buffer)) > 0) {
  208. outStream.write(buffer, 0, length);
  209. }
  210. if (inStream != null)
  211. inStream.close();
  212. if (outStream != null)
  213. outStream.close();
  214. } catch (IOException eex) {
  215. eex.printStackTrace();
  216. }
  217. }
  218. }