麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

用 Java 創建帶圖像的菜單來美化界面

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

  在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();
  g.drawImage(imageIcon.getImage(),
  insets.left - imageIcon.getIconWidth(),
  insets.top,
  null);
  }
  }
  
  public static void main(String[] args) {
  final JFrame frame = new JFrame();
  frame.setSize(600, 500);
  frame.setTitle("ImageMenu");
  final ImageMenu menu = new ImageMenu("Windows xp Perfessional");
  menu.add(new JMenuItem("WinZip 8.0"));
  menu.addSeparator();
  menu.add(new JMenuItem("Programs"));
  menu.add(new JMenuItem("Document"));
  menu.add(new JMenuItem("Settings"));
  menu.add(new JMenuItem("Search"));
  menu.add(new JMenuItem("Help and Support"));
  menu.add(new JMenuItem("Run..."));
  menu.addSeparator();
  menu.add(new JMenuItem("Shut Down..."));
  JLabel label = new JLabel("Right click me to show image popup menu.");
  label.addMouseListener(new java.awt.event.MouseAdapter() {
  public void mouseReleased(MouseEvent e) {
  if (e.isPopupTrigger()) {
  menu.show(frame, e.getPoint().x, e.getPoint().y);
  }
  }
  });
  frame.getContentPane().add(label, BorderLayout.CENTER);
  frame.show();
  }
  }
  
  同樣,采用這種方法,也可以將JMenu擴展出同樣的效果

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品区一区二区三区 | 欧美淫视频 | 成人黄色小视频网站 | av免费在线观看免费 | 深夜免费视频 | 欧美成人视 | 91精品国产综合久久青草 | 一级一级一级一级毛片 | 青热久思思| av在线播放免费观看 | 72pao成人国产永久免费视频 | 久草视频国产在线 | 黄色大片在线免费观看 | 亚洲成在人 | 天堂成人国产精品一区 | 成人性生活视频在线观看 | 午夜视频色 | 国产女同疯狂激烈互摸 | 亚洲爱爱网站 | 亚洲网在线 | 久久亚洲精品久久国产一区二区 | 成人黄色小视频网站 | 久久精品视频日本 | 欧美一级免费在线观看 | 91精品国产乱码久久久久 | 亚洲视频精选 | 亚洲成年人免费网站 | 欧美一级鲁丝片免费看 | 国产午夜精品理论片a级探花 | 精品国产呦系列在线看 | xxxxhd73国产| 欧美a视频 | 欧美日韩成人一区二区 | 一级做受毛片免费大片 | 国产一级一片免费播放 | 羞羞视频免费网站含羞草 | 一级电影免费在线观看 | 欧美精品一区二区三区在线 | 91午夜视频| 日日噜噜噜噜久久久精品毛片 | 欧美ab|