重写java中JButton,实现图片下显示文字(根据图片宽度文字自动换行)
2012-10-22 13:45
946 查看
import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.Shape; import java.awt.event.MouseEvent; import javax.swing.BorderFactory; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class ButtonIconText extends JButton{ private ImageIcon pic; private String text; public int fontsize=15;//字符大小 private int margin=0;//边 private int count;//每一行的字符个数 private int rowNum;//字符一共需要几行 private int len;//字符长度 public ButtonIconText(String icon,String text){ this.pic=new ImageIcon(icon); this.text=text; this.count=pic.getIconWidth()/fontsize; this.len=text.length(); this.rowNum=len%count==0?(len/count):(len/count)+1; this.margin=(pic.getIconWidth()%fontsize)/2; Dimension size=new Dimension(); size.width=pic.getIconWidth(); size.height=pic.getIconHeight()+(fontsize*rowNum)+2; this.setBackground(new Color(196,255,237));//new Color(255,204,250) this.setPreferredSize(size); } protected void paintComponent(Graphics g){ super.paintComponent(g); int x=pic.getIconWidth(); int y=pic.getIconHeight(); Image img=pic.getImage(); g.drawImage(img, 0, 0, null); g.setColor(Color.BLUE);//字体颜色 g.setFont(new Font("宋体",Font.PLAIN,fontsize));//字体格式 int no=-1; for(int i=0;i<(len/count);i++){ String Midtext=text.substring(0+(count*i), count+(count*i)); g.drawString(Midtext, margin,y+(fontsize-2)+(i*fontsize)); no++; } if(len%count!=0){ String Midtext=text.substring(count*(no+1), text.length()); int finalmargin=(x-((len-count*(no+1))*fontsize))/2; g.drawString(Midtext, finalmargin,y+(fontsize-2)+((no+1)*fontsize)); } } public static void main(String[] args) { JButton button = new ButtonIconText("F://My 8.5//Project201207//images//item//PP-R给水吊卡.gif","我是一个测试用的实用的实用的实用的实验"); button.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY)); JFrame frame = new JFrame("图形按钮"); frame.getContentPane().setLayout(new FlowLayout()); frame.getContentPane().add(button); frame.setSize(400, 400); frame.setLocationRelativeTo(null); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
效果如图:
相关文章推荐
- PHP 根据文字内容添加图片上实现自动换行的小程序
- text-overflow实现文字超出宽度,溢出后自动显示为省略号的效果
- TextBlock中显示文字和图片,且不会自动换行
- css实现div自动添加滚动条(图片或文字等超出时显示)
- li内文字超出隐藏,不允许出现半汉字截断,超出后仍显示new图片,小于宽度自动跟随
- <li></li>列表中显示文字强制不换行,大于li宽度自动隐藏文字
- java中设置JButton的背景图片,并在它上面显示文字
- 折腾了一早上的C# WPF ListView+Grid 实现图片+文字 自动换行排列 类似Windows资源管理器效果
- (源码实例)通过层DIV实现,当鼠标放在链接上面,显示图片及文字 - 流星絮语 JAVA学习笔记 - CSDNBlog
- J2ME实现展示内容自动根据屏幕宽度换行的功能
- ios 文字 控件 自适应 高度 宽度 CustomCell 自适应高度+uilabel自动换行+ UITextView 根据内容自动调整高度
- li列表中显示文字强制不换行,大于li宽度自动隐藏文字
- CSS实现超出DIV宽度文字自动隐藏并显示省略号
- text-overflow实现文字超出宽度,溢出后自动显示为省略号的效果
- cocos2dx中根据要显示的最大宽度向utf8字符串中加入换行符,即“自动换行”
- 根据宽度文字自动换行
- android 引导用户指示操作 高亮显示 可以自定义文字或者图片来作为提示,文字会自动换行
- 如何实现:GridView 控件中显示的文本不自动换行,隐藏超出宽度部分wj-wangjun
- java 添加背景图片(可根据窗口大小自动调整显示图片)
- 单行显示的UILabel根据文字内容自动调整宽度,文字下方加下划线