Advertisement
Oslapas

Untitled

Nov 30th, 2019
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.56 KB | None | 0 0
  1. import java.awt.Color;
  2. import java.awt.Graphics;
  3. import java.awt.Graphics2D;
  4. import java.awt.Point;
  5. import java.awt.RenderingHints;
  6. import java.awt.event.ComponentAdapter;
  7. import java.awt.event.ComponentEvent;
  8. import java.awt.event.KeyAdapter;
  9. import java.awt.event.MouseAdapter;
  10. import java.awt.event.MouseEvent;
  11. import java.awt.event.MouseMotionAdapter;
  12. import java.awt.image.BufferedImage;
  13. import java.io.File;
  14. import java.io.IOException;
  15.  
  16. import javax.imageio.ImageIO;
  17. import javax.swing.ImageIcon;
  18. import javax.swing.JComponent;
  19. import javax.swing.JFrame;
  20. import javax.swing.JLabel;
  21. import javax.swing.JPanel;
  22. import javax.swing.SwingUtilities;
  23.  
  24. public class GlassPaneDemo {
  25.         private static BufferedImage bi;
  26.  
  27.         public static void main(String[] args){
  28.             try {
  29.                 loadImages();
  30.  
  31.                 SwingUtilities.invokeLater(new Runnable(){
  32.                     @Override
  33.                     public void run() {
  34.                         createAndShowGUI();            
  35.                     }
  36.                 });
  37.             } catch (IOException e) {
  38.                 // handle exception
  39.             }
  40.         }
  41.  
  42.         private static void loadImages() throws IOException{
  43.             bi = ImageIO.read(new File("src/resources/person.png"));
  44.         }
  45.  
  46.         private static void createAndShowGUI(){
  47.             final JFrame frame = new JFrame();
  48.             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  49.             frame.setResizable(false);
  50.             frame.setGlassPane(new CustomGlassPane());
  51.             frame.getContentPane().add(getButtonPanel());
  52.             frame.pack();
  53.             frame.setLocationRelativeTo(null);
  54.             frame.getGlassPane().setVisible(true);
  55.             frame.setVisible(true);
  56.         }
  57.  
  58.         private static final JPanel getButtonPanel(){
  59.             @SuppressWarnings("serial")
  60.             final JPanel panel = new JPanel(){
  61.                 @Override
  62.                 protected void paintComponent(Graphics g){
  63.                     Graphics gCopy = g.create();
  64.  
  65.                     gCopy.setColor(Color.BLUE.darker());
  66.                     gCopy.fillRect(0, 0, getWidth(), getHeight());
  67.  
  68.                     gCopy.dispose();
  69.                 }
  70.             };
  71.  
  72.             final JLabel labelOne = new JLabel();
  73.             labelOne.setIcon(new ImageIcon(bi));
  74.             final JLabel labelTwo = new JLabel();
  75.             labelTwo.setIcon(new ImageIcon(bi));
  76.             panel.add(labelOne);
  77.             panel.add(labelTwo);
  78.  
  79.             return panel;
  80.         }
  81.  
  82.         @SuppressWarnings("serial")
  83.         private static class CustomGlassPane extends JComponent{
  84.             private Point p1;
  85.             private Point p2;
  86.             private boolean lineDrawn;
  87.  
  88.             public CustomGlassPane(){
  89.                 addMouseListener(new MouseAdapter(){
  90.                     @Override
  91.                     public void mouseClicked(MouseEvent e){
  92.                         if(p1 == null || lineDrawn){
  93.                             if(lineDrawn){
  94.                                 p1 = null;
  95.                                 p2 = null;
  96.                                 lineDrawn = false;
  97.                             }
  98.                             p1 = e.getPoint();
  99.                         }else{
  100.                             p2 = e.getPoint();
  101.                             repaint(); // not optimal
  102.                             lineDrawn = true;
  103.                         }
  104.                     }
  105.                 });
  106.  
  107.                 // Block all other input events
  108.                 addMouseMotionListener(new MouseMotionAdapter(){});
  109.                 addKeyListener(new KeyAdapter(){});
  110.                 addComponentListener(new ComponentAdapter(){
  111.                     @Override
  112.                     public void componentShown(ComponentEvent e){
  113.                         requestFocusInWindow();
  114.                     }
  115.                 });
  116.                 setFocusTraversalKeysEnabled(false);
  117.             }
  118.  
  119.             @Override
  120.             protected void paintComponent(Graphics g){
  121.                 if(p1 != null && p2 != null){
  122.                     Graphics2D g2 = (Graphics2D) g.create();
  123.  
  124.                     g2.setRenderingHint(
  125.                             RenderingHints.KEY_ANTIALIASING,
  126.                             RenderingHints.VALUE_ANTIALIAS_ON);
  127.                     g2.setColor(Color.RED);
  128.                     g2.drawLine((int)p1.getX(), (int)p1.getY(), (int)p2.getX(), (int)p2.getY());
  129.  
  130.                     g2.dispose();
  131.                 }
  132.             }
  133.         }
  134.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement