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

barryhappy 2010-08-26 07:25:54
让窗口上的图标、标签文字等随窗口大小改变
Java swing里有办法没?
...全文
394 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相关的,可以去看看。

62,615

社区成员

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

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