2015-12-01 12 views
7

मैं जावा में जेएफआरएएम के विंडो मेनू को कैसे संशोधित कर सकता हूं? शीर्ष आइकन पर यह एक (विंडोज़ में) है, जिसमें एप्लिकेशन आइकन के पीछे है, जिसमें 'रीस्टोर', 'मूव', 'मिनीमैज', 'रीसाइज' जैसे आइटम हैं ...जावा में विंडो मेनू संशोधित करें

+0

(आवश्यक कुछ अतिरिक्त तरीकों, कोड की गुच्छा) कस्टम एल एंड एफ, मादक द्रव्यों के कुछ का उपयोग करके (और एक अन्य, जैसे JGoodies) अच्छी शुरुआत है, एलएंडएफ के नोट हिस्से में जावा 8 के साथ कोई समस्या हो सकती है – mKorbel

उत्तर

1

दुर्भाग्य से मुझे केवल मिला है "धातु सजावट" के साथ ऐसा करने का एक तरीका (इसके साथ मेरा मतलब है JFrame.setDefaultLookAndFeelDecorated(true);)। यदि मैं सिस्टम LaF के साथ एक पाता हूं, तो मुझे निश्चित रूप से उत्तर अपडेट होगा, लेकिन मुझे लगता है कि यह अभी भी एक उत्तर के लायक है।

आउटपुट:

enter image description here

कोड:

import java.awt.Color; 
import java.awt.Component; 
import java.awt.Container; 
import java.awt.EventQueue; 
import java.awt.FlowLayout; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.RenderingHints; 
import java.io.BufferedReader; 
import java.io.UnsupportedEncodingException; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.JPanel; 

public class Example { 

    public Example() { 

     JFrame.setDefaultLookAndFeelDecorated(true); 

     JFrame frame = new JFrame(); 

     JMenu systemMenu = getSystemMenu(frame); 
     systemMenu.add(new JMenuItem("New JMenuItem"), 0); 

     for (Component component : systemMenu.getPopupMenu().getComponents()) { 
      if (component.toString().contains("JMenu")) { 
       ((JMenuItem) component).setForeground(Color.RED); 
      } 
     } 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(300, 200); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    private JMenu getSystemMenu(JFrame frame) { 
     for (Component c1 : frame.getLayeredPane().getComponents()) { 
      if (c1.toString().contains("MetalTitlePane")) { 
       for (Component c2 : ((Container) c1).getComponents()) { 
        if (c2.toString().contains("SystemMenuBar")) { 
         return (JMenu) ((Container) c2).getComponent(0); 
        } 
       } 
      } 
     } 
     return null; 
    } 

    public static void main(String args[]) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new Example(); 
      } 
     }); 
    } 
} 
संबंधित मुद्दे