BackgroundPopUp.java 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  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.awt.BorderLayout;
  18. import javax.swing.JLabel;
  19. import javax.swing.JRadioButton;
  20. import javax.swing.SwingConstants;
  21. import java.awt.GridLayout;
  22. import java.awt.Color;
  23. import java.awt.FlowLayout;
  24. /**
  25. * Popup for setting the Background Image for the current View.
  26. **/
  27. public class BackgroundPopUp extends JDialog {
  28. /**
  29. *
  30. */
  31. private static final long serialVersionUID = 1L;
  32. private final JTextField textPath = new JTextField("");
  33. private final JButton btnBrowse = new JButton("Browse");
  34. private JPanel panelImageRadio = new JPanel();
  35. private String path = "";
  36. private final JPanel panelBrowse = new JPanel();
  37. private final JPanel panelOK = new JPanel();
  38. private final JButton btnOK = new JButton("OK");
  39. private final JLabel lblImage = new JLabel();
  40. private ImageIcon icon = null;
  41. private double imgScale = 1;
  42. private final JButton btnCancel = new JButton("Cancel");
  43. private final JPanel panelRadio = new JPanel();
  44. private final JRadioButton rdbtnImagePixel = new JRadioButton("Use Image Size");
  45. private final JRadioButton rdbtnStretched = new JRadioButton("Strech Image");
  46. private final JRadioButton rdbtnCustom = new JRadioButton("Custom Size");
  47. // Modes
  48. public static final int IMAGE_PIXELS = 0, STRETCHED = 1, CUSTOM = 2;
  49. private int mode = 0;
  50. private final JPanel panel = new JPanel();
  51. private final JTextField imageWidth = new JTextField();
  52. private final JTextField imageHeight = new JTextField();
  53. public BackgroundPopUp(MyCanvas canvas, CpsUpperNode uNode) {
  54. super((java.awt.Frame) null, true);
  55. getContentPane().setBackground(Color.WHITE);
  56. this.setTitle("Set View Background");
  57. setBounds(100, 100, 600, 340);
  58. panelBrowse.setBorder(null);
  59. panelImageRadio.setBorder(null);
  60. panelOK.setBorder(null);
  61. panelRadio.setBorder(null);
  62. getContentPane().add(panelImageRadio, BorderLayout.CENTER);
  63. panelImageRadio.setLayout(new BorderLayout(0, 0));
  64. lblImage.setBackground(Color.WHITE);
  65. lblImage.setHorizontalAlignment(SwingConstants.LEFT);
  66. panelImageRadio.add(lblImage, BorderLayout.CENTER);
  67. panelImageRadio.add(panelRadio, BorderLayout.EAST);
  68. // Radio Buttons
  69. panelRadio.setLayout(new GridLayout(0, 1, 0, 0));
  70. rdbtnImagePixel.setBackground(Color.WHITE);
  71. rdbtnImagePixel.setSelected(true);
  72. panelRadio.add(rdbtnImagePixel);
  73. rdbtnStretched.setBackground(Color.WHITE);
  74. panelRadio.add(rdbtnStretched);
  75. panelBrowse.setBackground(Color.WHITE);
  76. ButtonGroup bgroup = new ButtonGroup();
  77. bgroup.add(rdbtnImagePixel);
  78. bgroup.add(rdbtnStretched);
  79. panelRadio.add(rdbtnCustom);
  80. rdbtnCustom.setBackground(new Color(255, 255, 255));
  81. bgroup.add(rdbtnCustom);
  82. panel.setBackground(Color.WHITE);
  83. panelRadio.add(panel);
  84. panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
  85. panel.add(imageWidth);
  86. imageWidth.setColumns(10);
  87. panel.add(imageHeight);
  88. imageHeight.setColumns(10);
  89. // Browse Panel
  90. getContentPane().add(panelBrowse, BorderLayout.NORTH);
  91. panelBrowse.setLayout(new BorderLayout(0, 0));
  92. panelBrowse.add(btnBrowse, BorderLayout.WEST);
  93. // Browse Row Functions
  94. btnBrowse.addActionListener(new ActionListener() {
  95. @Override
  96. public void actionPerformed(ActionEvent e) {
  97. JFileChooser fileChooser = new JFileChooser();
  98. FileNameExtensionFilter filter = new FileNameExtensionFilter("png, jpg or jpeg", "png", "jpg", "jpeg");
  99. fileChooser.setFileFilter(filter);
  100. if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
  101. path = fileChooser.getSelectedFile().getPath();
  102. textPath.setText(path);
  103. icon = new ImageIcon(textPath.getText());
  104. imageWidth.setText(""+icon.getIconWidth());
  105. imageHeight.setText(""+icon.getIconHeight());
  106. // Calculate the Image scale to fit the Panel
  107. if (Math.min(panelImageRadio.getWidth() - panelRadio.getWidth(),
  108. panelImageRadio.getHeight()) == (panelImageRadio.getWidth() - panelRadio.getWidth())) {
  109. imgScale = (double) Math.min(icon.getIconWidth(), icon.getIconHeight())
  110. / panelImageRadio.getWidth();
  111. } else {
  112. imgScale = (double) Math.min(icon.getIconWidth(), icon.getIconHeight())
  113. / panelImageRadio.getHeight();
  114. }
  115. lblImage.setIcon(new ImageIcon(
  116. new ImageIcon(path).getImage().getScaledInstance((int) (icon.getIconWidth() / imgScale),
  117. (int) (icon.getIconHeight() / imgScale), java.awt.Image.SCALE_FAST)));
  118. }
  119. }
  120. });
  121. textPath.setEditable(false);
  122. panelBrowse.add(textPath, BorderLayout.CENTER);
  123. textPath.setColumns(20);
  124. panelImageRadio.setFocusTraversalPolicy(new FocusTraversalOnArray(new Component[] { btnBrowse, textPath }));
  125. panelOK.setBackground(Color.WHITE);
  126. getContentPane().add(panelOK, BorderLayout.SOUTH);
  127. panelOK.add(btnOK);
  128. btnOK.addActionListener(new ActionListener() {
  129. @Override
  130. public void actionPerformed(ActionEvent e) {
  131. if (rdbtnImagePixel.isSelected()) {
  132. mode = 0;
  133. } else if (rdbtnStretched.isSelected()) {
  134. mode = 1;
  135. } else if (rdbtnCustom.isSelected()) {
  136. mode = 2;
  137. }
  138. if (canvas != null) {
  139. canvas.setBackgroundImage(path, mode, Integer.parseInt(imageWidth.getText()), Integer.parseInt(imageHeight.getText()));
  140. canvas.repaint();
  141. } else if (uNode != null) {
  142. uNode.setBackgroundImage(path, mode, Integer.parseInt(imageWidth.getText()), Integer.parseInt(imageHeight.getText()));
  143. }
  144. dispose();
  145. }
  146. });
  147. panelOK.add(btnCancel);
  148. btnCancel.addActionListener(new ActionListener() {
  149. @Override
  150. public void actionPerformed(ActionEvent e) {
  151. dispose();
  152. }
  153. });
  154. this.addComponentListener(new ComponentAdapter() {
  155. @Override
  156. public void componentResized(ComponentEvent e) {
  157. if (icon != null) {
  158. // Calculate the Image scale to fit the Panel
  159. if (Math.min(panelImageRadio.getWidth() - panelRadio.getWidth(),
  160. panelImageRadio.getHeight()) == (panelImageRadio.getWidth() - panelRadio.getWidth())) {
  161. imgScale = (double) Math.min(icon.getIconWidth(), icon.getIconHeight())
  162. / panelImageRadio.getWidth();
  163. } else {
  164. imgScale = (double) Math.min(icon.getIconWidth(), icon.getIconHeight())
  165. / panelImageRadio.getHeight();
  166. }
  167. lblImage.setIcon(new ImageIcon(
  168. new ImageIcon(path).getImage().getScaledInstance((int) (icon.getIconWidth() / imgScale),
  169. (int) (icon.getIconHeight() / imgScale), java.awt.Image.SCALE_SMOOTH)));
  170. }
  171. }
  172. });
  173. }
  174. }