如何让图标、标签文字等随窗口大小改变

barryhappy 2010-08-26 07:25:54
让窗口上的图标、标签文字等随窗口大小改变
Java swing里有办法没?
...全文
462 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tassdars 2010-08-26
  • 打赏
  • 举报
回复
import javax.swing.*;
import java.awt.*;

public class ResizeLabel extends JLabel {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(400, 60);
JLabel label = new ResizeLabel();
label.setText("label");
label.setOpaque(true);
label.setIcon(new ImageIcon("web.gif"));
frame.add(label);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

@Override
public void paintComponent(Graphics g) {
// super.paintComponent(g);
int height = getHeight();
Font oldFont = getFont();
setFont(new Font(oldFont.getName(), oldFont.getStyle(), height));
Icon icon = getIcon();
String text = getText();
if (icon != null && icon instanceof ImageIcon) {
double scale = (double)icon.getIconWidth() / icon.getIconHeight();
int width = (int)(height * scale);
ImageIcon image = (ImageIcon)icon;
g.drawImage(image.getImage(), 0, 0, width, height, null);
g.drawString(text, width, (int)(height * 0.85));
} else {
g.drawString(text, 0, (int)(height * 0.85));
}
}
}


写了个小例子,大致可以用,有瑕疵,调了半天没调出来,楼主可以继承JComponent,自己画就不会有任何干扰了。
Tassdars 2010-08-26
  • 打赏
  • 举报
回复
楼主没说清楚,不知道是窗体标题栏还是窗体内部。

标题栏的话,只能是自定义标题栏,自己写代码搞定。

窗体内部的话,有两种办法:

第一种,继承组件,比如JLabel什么的,然后覆盖paintComponent方法,自己根据组件的大小绘制组件内部的图标和文字,然后用布局管理器控制。主要是因为布局管理器虽然能控制组件大小,却无法控制组件的图标和文字大小,窗体大小改变时,会进行重绘,会自动调用paintComponent方法,所以在paintComponent方法里面根据组件的大小绘制图标文字就有用。

第二种,添加ComponentListener,监听componentResized事件,然后做出事件处理。

个人比较推荐第一种,因为一劳永逸,以后需要的时候使用这个组件就行了。
barryhappy 2010-08-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hardycheng 的回复:]

设置大小的时候按照比例设置即可
[/Quote]
我需要在运行时改变啊~~~就是当用户拉动边界改变窗口大小时,让窗口里的图标,标签文字等随之改变

有办法没?
hardycheng 2010-08-26
  • 打赏
  • 举报
回复
设置大小的时候按照比例设置即可
powerchuangwai 2010-08-26
  • 打赏
  • 举报
回复
帮顶。。添加一个类似于事件性质的机制
huntor 2010-08-26
  • 打赏
  • 举报
回复
Zooming user interface
下面ZUI Projects有三个Java相关的,可以去看看。
本文分享了网页代码中常用的小技巧,包括屏蔽鼠标右键、取消选取与复制、设置框架与防止被frame、IE地址栏图标、关闭输入法、保持网页永远带框架、防止页面被另存为、提供查看网页源代码链接、删除确认提示、获取控件绝对位置、光标定位、判断上一页来源、窗口最小化、最大化与关闭、屏蔽功能键、网页不被缓存、表单无凹凸感、div与span与layer的区别、弹出窗口总是最上面、去除图片链接点击后的虚线、电子邮件处理表单、刷新子窗口代码、页面大小与位置设定、非满铺背景图片、字符串数字检测、窗口大小获取、字符判断、TEXTAREA自适应、日期减天数、Radio选择显示、脚本不出错、ENTER键跳转、链接速度检测、各种样式的光标、页面进入与退出特效、页面跳转时间、网页检索属性、变换鼠标光标、任务栏显示小图标、Meta标签使用、滚动条颜色改变、图片抖动效果、带颜色下拉菜单、表框亮暗边框、主页最后更新日期、左边滚动条、网址前面图标、800*600不出现水平滚动条、DOCTYPE说明、图片关闭窗口、禁止查看源代码、按钮查看源代码、文字链接实现SUBMIT、空链接、iframe插入网页、tbody用法、alt与title区别、闪烁按钮、CSS图片颜色边框、DW中flash透明、本地测试flash加载、竖线制作方法、鼠标拖动层大小、点击文字加入收藏夹

62,622

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧