2011-07-04 6 views
2

私はアプリケーションをシステム起動時に起動するjava.io起動時にデスクトップアプリケーションを開発していますが、システムトレイのコンテキストメニューはOSに応じて標準的なルックアンドフィールを持っています。私はそれにグラデーションの背景を与えたい、フォント、ボーダーなどを変更したいと思っています。 そのためのいくつかの例がある場合はそのためのリンクを提供してください..事前にシステムトレイのコンテキストメニューのグラデーションを持っている

おかげ..

+0

「システムトレイから実行する」とはどういう意味ですか?その声明は私にはちょっと混乱しています。あなたが話していることは[this](http://stackoverflow.com/questions/6403821/how-to-add-an-image-to-a-jframe-title-bar/6403846#6403846)ですか? – mre

+0

次のリンクを確認してください:http://download.oracle.com/javase/tutorial/uiswing/misc/systemtray.html – Krutika

+0

上記のリンクは、システムトレイの機能について説明しています。ここには、勾配を付けたいメニューが表示されていますこれは私の質問を明確にするのに十分だと思います.. – Krutika

答えて

2

なるほどSwingGuruのの1つによってのみ、このblogはその

import java.awt.Dimension; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.JPanel; 
import javax.swing.JPopupMenu; 
import javax.swing.JSeparator; 
import javax.swing.SwingUtilities; 
import javax.swing.UIManager; 

public class FunnyMenuTest { 

    private JPopupMenu popupMenu; 
    private JMenuItem m_mniInsertRow; 
    private JMenuItem m_mniInsertScrip; 
    private JMenuItem m_mniDeleterRow; 
    private JMenuItem m_mniDeleteExpiredScrip; 
    private JMenuItem m_mniSetAlert; 

    public void makeUI() { 
     JFrame frame = new JFrame("Funny JMenu Test"); 
     popupMenu = new JPopupMenu(); 
     m_mniInsertRow = new JMenuItem("Insert a Row"); 
     m_mniInsertRow.setOpaque(false); 
     m_mniInsertScrip = new JMenuItem("Insert a Scrip"); 
     m_mniInsertScrip.setOpaque(false); 
     m_mniDeleterRow = new JMenuItem("Delete a Row"); 
     m_mniDeleterRow.setOpaque(false); 
     m_mniDeleteExpiredScrip = new JMenuItem("Delete a Expired Scrip"); 
     m_mniDeleteExpiredScrip.setOpaque(false); 
     m_mniSetAlert = new JMenuItem("Set Alert"); 
     m_mniSetAlert.setOpaque(false); 
     popupMenu.add(m_mniInsertRow); 
     popupMenu.add(m_mniInsertScrip); 
     popupMenu.addSeparator(); 
     popupMenu.add(m_mniDeleterRow); 
     popupMenu.add(m_mniDeleteExpiredScrip); 
     popupMenu.add(new JSeparator()); 
     popupMenu.add(m_mniSetAlert); 
     JMenuBar menuBar = new JMenuBar(); 
     for (int i = 0; i < 5; i++) { 
      JMenu menu = new JMenu("Menu " + i); 
      for (int j = 0; j < 5; j++) { 
       JMenuItem item = new JMenuItem("Item " + j); 
       item.setOpaque(false); 
       menu.add(item); 
      } 
      menuBar.add(menu); 
     } 
     JMenu menu = new JMenu("Menu 1"); 
     JMenuItem item = new JMenuItem("Item "); 
     item.setOpaque(false); 
     menu.add(item); 
     menuBar.add(menu); 
     JPanel jp = new JPanel(); 
     jp.setPreferredSize(new Dimension(400, 400)); 
     jp.addMouseListener(new MouseAdapter() { 

      @Override 
      public void mouseReleased(MouseEvent e) { 
       if (e.isPopupTrigger()) { 
        int x = e.getX(); 
        int y = e.getY(); 
        popupMenu.show(e.getComponent(), x, y); 
       } 
      } 
     }); 

     frame.getContentPane().add(jp); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setPreferredSize(new Dimension(400, 400)); 
     frame.setLocationRelativeTo(null); 
     frame.setJMenuBar(menuBar); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 

     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new FunnyMenuTest().makeUI(); 
      } 
     }); 
     UIManager.put("PopupMenuUI", "JMenu.GradientPopupMenuUI"); 
    } 
} 

であなたをheplことができ、

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.LinearGradientPaint; 
import java.awt.MultipleGradientPaint.CycleMethod; 
import java.awt.Paint; 
import java.awt.geom.Point2D; 
import javax.swing.JComponent; 
import javax.swing.plaf.ComponentUI; 
import javax.swing.plaf.basic.BasicPopupMenuUI; 

public class GradientPopupMenuUI extends BasicPopupMenuUI { 

    private Paint paint = new LinearGradientPaint(new Point2D.Double(5, -5), new Point2D.Double(), 
      new float[]{0.2F, 0.9F}, new Color[]{Color.WHITE, Color.GREEN}, CycleMethod.REFLECT); 

    public static ComponentUI createUI(JComponent c) { 
     return new GradientPopupMenuUI(); 
    } 

    @Override 
    public void paint(Graphics g, JComponent c) { 
     ((Graphics2D) g).setPaint(paint); 
     g.fillRect(0, 0, c.getWidth(), c.getHeight()); 
    } 
} 
+0

+1のグラデーションポップアップメニューです。唯一の疑問はUIがL&Fに依存していることです。 L&Fを変更すると、これが損傷する可能性があります。 – StanislavL

+0

@mKorble:ブログのリンクで、JMenuItemが使用されています。しかし、このJMenuItemはSystemTrayで使用することはできません。どうすればシステムトレイでjMenuItem(またはJPopupMenu)を使用できますか? – Krutika

+0

@Krutikaあなたが投稿したリンク先のチュートリアルを読んでいますか?、システムトレイはJPopupMenuに実装された機能のみを持つアイコンです。http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/systemtray/とhttp: //download.oracle.com/javase/6/docs/api/java/awt/TrayIcon.html – mKorbel