步骤 1 : 先看效果-拉伸居中 步骤 2 : 先看效果-非拉伸居中 步骤 3 : 居中面板CenterPanel 
					在面板上放一个按钮,这个按钮会自动拉伸居中。 拉伸的程度也可以控制
					 
					
				
					在面板上放一个按钮,这个按钮会使用默认大小,并且垂直方向和水平方向都居中
					 
					
				
				
					
						增值内容,请先登录
					
				
				 
		
					
		
		
					
					完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
					 
			增值内容,点击购买 
					使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
					 
					
				package util;
 
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
 
public class CenterPanel extends JPanel {
 
    private double rate;//拉伸比例
    private JComponent c; //显示的组件
    private boolean strech; //是否拉伸
 
    public CenterPanel(double rate,boolean strech) {
        this.setLayout(null);
        this.rate = rate;
        this.strech = strech;
    }
     
    public CenterPanel(double rate) {
        this(rate,true);
    }   
 
    public void repaint() {
        if (null != c) {
            Dimension containerSize = this.getSize();
            Dimension componentSize= c.getPreferredSize();
             
            if(strech)
                c.setSize((int) (containerSize.width * rate), (int) (containerSize.height * rate));
            else
                c.setSize(componentSize);
 
            c.setLocation(containerSize.width / 2 - c.getSize().width / 2, containerSize.height / 2 - c.getSize().height / 2);
        }
        super.repaint();
    }
 
    public void show(JComponent p) {
        this.c = p;
        Component[] cs = getComponents();
        for (Component c : cs) {
            remove(c);
        }
        add(p);
        this.updateUI();
    }
     
    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setSize(200, 200);
        f.setLocationRelativeTo(null);
        CenterPanel cp = new CenterPanel(0.85,true);
        f.setContentPane(cp);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
        JButton b  =new JButton("abc");
        cp.show(b);
         
    }
 
}
 
								
										
									
								
							
				HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
			 
			 
			
			
			
			
			
		
		
		
		 	问答区域     
		 	
				
		  
	 
	  		
	  
	  	2021-01-20
	  		
	  				
	  					 
	  
					
						请问为什么要在repaint方法中加super.repaint(); 
					
					
						
							
						
											
							
					
					
					
	   
	  
	  
	  
 
1 个答案 
	 
how2j 跳转到问题位置 答案时间:2021-01-22 因为 super.repaint里有业务逻辑要执行,仅仅是重写就吧这部分逻辑顶掉了,所以还是需要手动调用一次父类的 repaint才行哦。 
		
							
		
		
		
		
	
	
	
		回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢	
	 
	  		
	  
	  	2020-11-03
	  		
	  				
	  					 
	  
					
						没有参考代码 
					
					
						
							
						
											
							
					
					
					
	   
	  
	  
	  
 
		回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢	
	 
	  		
	  
	  	2020-10-17
	  		
	  				
	  					 
	  
					
						repaint方法是什么时候调用的,我没看到调用啊,这个方法是什么意思? 
					
					
						
							
						
											
							
					
					
					
	   
	  
	  
	  	    
	    
	  
	  		
	  
	  	2020-08-22
	  		
	  				
	  					 
	  
					
						setVisible位置放置 
					
					
						
							
						
											
							
					
					
					
	   
	  
	  
	  	    
	    
	  
	  		
	  
	  	2020-08-05
	  		
	  				
	  					 
	  
					
						关于cp的初始宽高 
					
					
						
							
						
											
							
					
					
					
	   
	  
	  
	  	    
	    
	  提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 40 条以前的提问,请 点击查看 
			
			提问之前请登陆
			
		 
		提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢	
	 
 | 
	|||||||||||||||||