2012-02-22 70 views
3

我想向JMenu添加垂直文本。正如圖片(「JTattoo」)顯示:向JMenu添加垂直文本

enter image description here

我谷歌搜索,但沒有找到一個方法來做到。

任何信息對我都有幫助。

在此先感謝。

+1

潛在的應答者,請[閱讀](http://stackoverflow.com/a/9382795/714968) – mKorbel 2012-02-22 11:15:04

+0

@mKorbel這是很難的主題編碼。我更改了源代碼:當然是,P – 2012-02-22 12:14:49

回答

0

您可以繼承JMenuItem,然後通過覆蓋paintComponent來更改它的呈現方式。

+0

是的。我的意思是paintComponent。 – Thorn 2012-03-02 16:10:50

+0

好的,爲你編輯答案:-) – kleopatra 2012-03-02 16:19:41

2

擴展JMenuItem並重寫paintComponent將不起作用,因爲文本跨越多個菜單項。

你想要做的是添加一個自定義的邊框到JMenu的彈出菜單。

下面是一個例子:

import java.awt.Component; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Insets; 
import java.awt.RenderingHints; 
import java.awt.geom.AffineTransform; 

import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.border.Border; 
public class Main { 

    public static void main(final String[] args) { 
     final JFrame frame = new JFrame(); 
     final JMenu menu = new JMenu("Menu"); 
     menu.add("Hello"); 
     menu.add("World"); 
     menu.getPopupMenu().setBorder(new VerticalTextBorder()); 
     final JMenuBar menubar = new JMenuBar(); 
     menubar.add(menu); 
     frame.setJMenuBar(menubar); 
     frame.setSize(300,300); 
     frame.setVisible(true); 
    } 

    private static class VerticalTextBorder implements Border { 
     @Override 
     public Insets getBorderInsets(final Component c) { 
      return new Insets(0, 15, 0, 0); 
     } 

     @Override 
     public void paintBorder(final Component c, final Graphics g, final int x, final int y, final int width, final int height) { 
      final Graphics2D g2 = (Graphics2D)g; 
      final AffineTransform fontAT = new AffineTransform(); 
      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
      fontAT.rotate(-Math.PI/2); 
      g2.setFont(g2.getFont().deriveFont(fontAT)); 
      g2.drawString("Menu", 10, height); 
     } 

     @Override 
     public boolean isBorderOpaque() { 
      return false; 
     } 
    } 
} 
+0

這真的很酷看! – jjnguy 2012-03-02 17:14:23