How to “do something” on Swing component resizing?

后端 未结 8 1202
遇见更好的自我
遇见更好的自我 2021-01-17 07:53

I\'ve a class which extends JPanel. I overwrote protected void paintComponent(Graphics g).

There is a variable which has to be recalculate

8条回答
  •  情书的邮戳
    2021-01-17 08:21

    This simple example is drawing a red circle in the resized frame....
    
    import java.awt.*;
    import java.awt.event.ComponentEvent;
    import java.awt.event.ComponentListener;
    import javax.swing.*;
    import java.awt.geom.*;
    
    public class RedCircle extends JFrame implements ComponentListener {
         int getWidth;
         int getHeight;
         
          public RedCircle() {
            super("Red Circle");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            addComponentListener(this);             
            pack();
            setVisible(true);
        }
        
          public void componentResized(ComponentEvent e) {
                getWidth = e.getComponent().getWidth();
                getHeight = e.getComponent().getHeight();
                
                Panel pane = new Panel(getWidth,getHeight);
                
                add(pane);
          }
        
       
        public static void main(String[] args) {
            
             RedCircle rc = new RedCircle();
        }
        
    
     
     public void componentMoved(ComponentEvent e) {
           
        }
    
        
        public void componentShown(ComponentEvent e) {
         
        }
    
        
        public void componentHidden(ComponentEvent e) {
        
        }
    
    
    }
    
    
    class Panel extends JPanel {
        int panelWidth;
        int panelHeight;
        
        public Panel(Integer getWidth,Integer getHeight) {
           
        panelWidth = getWidth;
        panelHeight = getHeight;
        
        }
        
    public void paintComponent(Graphics comp) {
            super.paintComponent(comp);
            Graphics2D comp2D = (Graphics2D) comp;
           
            int realWidth = panelWidth - 17;
            int realHeight = panelHeight - 40;
           
            float Height = (realHeight);
            float Width = (realWidth);
            
        // draw the Red Circle
            comp2D.setColor(Color.red);
            Ellipse2D.Float redCircle = new Ellipse2D.Float(0F, 0F, Width, Height);
            comp2D.fill(redCircle);
        }
    }
    
    

提交回复
热议问题