2011-07-04 4 views
2

내 응용 프로그램을 시작하는 java.io에서 데스크탑 응용 프로그램을 개발 중입니다. 시스템 트레이의 컨텍스트 메뉴는 OS에 따라 표준 모양과 느낌을 가지고 있습니다. 문맥 메뉴. 그라디언트 배경을주고 싶습니다. 글꼴, 테두리 등을 바꾸고 싶습니다. 가능한지 알고 싶습니까? 이 SwingGuru의 중 하나에 의해 동일한에 대한 그 제공하십시오 링크에 대한 몇 가지 예 .. 사전에시스템 트레이 컨텍스트 메뉴의 그라디언트 배경 있음

감사합니다 ..

+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

위의 링크는 시스템 트레이 기능을 설명합니다. 그라디언트를 제공하려는 메뉴가 표시됩니다. background.I이 질문에 대한 명확한 밝히기에 충분하다고 생각합니다 .. – Krutika

답변

2

흠에만이 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

관련 문제