国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

用Java創建帶圖像的菜單

2019-11-18 13:37:35
字體:
來源:轉載
供稿:網友

  在Windows的“開始”菜單上,會在菜單左側顯示一幅圖像。很多基于Windows的軟件也有類似效果的菜單。用java Swing可以制作出類似效果的菜單嗎?答案當然是肯定的,而且非常簡單。

我們首先從Swing的JPopupMenu組件進行擴展,讓其接受一個圖片,顯示在左側;或者接受一個字符串,動態生成圖片后,在顯示在左側。為了避免預備圖片的麻煩,我們就以動態生成內存圖片為例,編寫一個JImagedPopupMenu類。

JImagedPopupMenu在創建時可以接受一個字符串,生成一副內存圖片BufferedImage。然后,我們需要覆蓋JComponent的getInsets方法,重新計算Inset的left值,將其在原數值基礎上加上圖片的寬度,然后返回:

?public Insets getInsets() {
??????? Insets insets = (Insets)super.getInsets().clone();
??????? insets.left += imageIcon.getIconWidth();
??????? return insets;
??? }

最后,覆蓋paintComponent方法,在原基礎上增加圖片的繪制:
??? public void paintComponent(Graphics g) {
??????? super.paintComponent(g);
??????? if (imageIcon != null) {
??????????? Insets insets = getInsets();
??????????? g.drawImage(imageIcon.getImage(),
??????????????????????? insets.left - imageIcon.getIconWidth(),
??????????????????????? insets.top,
??????????????????????? null);
??????? }
??? }

完整代碼如下:

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.*;
import javax.swing.*;

public class ImageMenu extends JPopupMenu {
??? PRivate Font font = new Font("Dialog", Font.BOLD, 13);
??? private ImageIcon imageIcon = null;

??? public ImageMenu(ImageIcon imageIcon) {
??????? this.imageIcon = imageIcon;
??? }

??? public ImageMenu(String text) {
??????? this.imageIcon = createImage(text);
??? }

??? private ImageIcon createImage(String text) {
??????? BufferedImage bi = new BufferedImage(30, 1000, BufferedImage.TYPE_INT_ARGB);
??????? ImageIcon image = new ImageIcon(bi);
??????? Graphics2D g2d = bi.createGraphics();

??????? GradientPaint paint = new GradientPaint(0, 0, Color.yellow, 30, 10, Color.red, true);
??????? g2d.setPaint(paint);

??????? g2d.fillRect(0, 0, bi.getWidth(), bi.getHeight());

??????? AffineTransform at = new AffineTransform();
??????? at.rotate( -Math.PI / 2);

??????? g2d.setTransform(at);
??????? g2d.setColor(Color.white);
??????? g2d.setFont(font);
??????? g2d.drawString(text, -180, bi.getWidth() / 2);

??????? return image;
??? }

??? public Insets getInsets() {
??????? Insets insets = (Insets)super.getInsets().clone();
??????? insets.left += imageIcon.getIconWidth();
??????? return insets;
??? }

??? public void paint(Graphics g) {
??????? super.paint(g);
??????? if (imageIcon != null) {
??????????? Insets insets = getInsets();

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 都昌县| 砀山县| 化州市| 盖州市| 陆川县| 石门县| 马山县| 司法| 平阴县| 延川县| 怀安县| 绥滨县| 武义县| 康平县| 勃利县| 绥芬河市| 静宁县| 和静县| 昆明市| 汝城县| 昭苏县| 宝坻区| 双峰县| 博罗县| 从江县| 南汇区| 绥中县| 定陶县| 惠水县| 南丹县| 随州市| 阿拉善盟| 宁城县| 抚顺县| 花莲市| 湄潭县| 比如县| 霍州市| 漯河市| 文昌市| 乐清市|