how2j.cn

下载区
文件名 文件大小
请先登录 8k
增值内容 8k
8k
使用站长秘制下载工具

工具版本兼容问题
Swing并没有提供一种可以很简单就居中的布局器,但是这样的布局器又很常见,所以在这里就自己开发一个专门用于居中的面板



5分39秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器

步骤 1 : 先看效果-拉伸居中   
步骤 2 : 先看效果-非拉伸居中   
步骤 3 : 居中面板CenterPanel   

步骤 1 :

先看效果-拉伸居中

edit
在面板上放一个按钮,这个按钮会自动拉伸居中。 拉伸的程度也可以控制
先看效果-拉伸居中
步骤 2 :

先看效果-非拉伸居中

edit
在面板上放一个按钮,这个按钮会使用默认大小,并且垂直方向和水平方向都居中
先看效果-非拉伸居中
步骤 3 :

居中面板CenterPanel

edit
增值内容,请先登录
完整的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();
quan25617600

请问为什么要在repaint方法中加super.repaint(); 子类已经重写了repaint方法,不调用父类方法也可以update,请问站长有调用的必要吗




1 个答案

how2j
答案时间:2021-01-22
因为 super.repaint里有业务逻辑要执行,仅仅是重写就吧这部分逻辑顶掉了,所以还是需要手动调用一次父类的 repaint才行哦。



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2020-11-03 没有参考代码
lfj1996915

怎么没有代码呢?




1 个答案

how2j
答案时间:2020-11-04
有啊,步骤3不是有代码吗? 而且右上角也有可运行项目啊



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2020-10-17 repaint方法是什么时候调用的,我没看到调用啊,这个方法是什么意思?
2020-08-22 setVisible位置放置
2020-08-05 关于cp的初始宽高


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 40 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 实践项目-一本糊涂账-居中面板 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 578362961
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图