2015-12-01 12 views
7

Java'da JFrame'in pencere menüsünü nasıl değiştirebilirim? 'Geri Yükle', 'Taşı', 'Küçült', 'Yeniden Boyutlandır' gibi öğelere sahip uygulama simgesinin arkasında, soldaki (Windows'taki) budur ...Java'da pencere menüsünü değiştirin

+0

(ve başka, örneğin JGoodies) iyi bir başlangıç, L & F'nin bir kısmının Java8 ile ilgili bir sorunu olabileceğine dikkat edin – mKorbel

cevap

1

Ne yazık ki sadece bulamıyorum Bunu "metal dekorasyon" ile yapmanın bir yolu (JFrame.setDefaultLookAndFeelDecorated(true); yapıyor demek). Elbette sistemi LaF ile bulursam cevabı güncelleyeceğim, ama bunun hala bir cevap olduğunu düşünüyorum.

Çıktı:

enter image description here

Kodu:

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(); 
      } 
     }); 
    } 
} 
(gerekli bazı ek yöntemler kod demet) özel L & F, Madde bazılarını kullanarak
İlgili konular