2015-09-04 28 views
0

我有一個菜單,當它被點擊時我想改變它。更改菜單上的JMenu前景色已選擇

這是我的代碼:

violatorMenu.addMenuListener(new MenuListener() { 

      @Override 
      public void menuSelected(MenuEvent e) { 
       violatorMenu.setForeground(new java.awt.Color(255, 255, 255)); 
       violatorMenu.setBackground(new java.awt.Color(183, 28, 28)); 
      } 

      @Override 
      public void menuDeselected(MenuEvent e) { 
      } 

      @Override 
      public void menuCanceled(MenuEvent e) { 


      } 
     }); 

此代碼不會更改默認的顏色。

有什麼想法?謝謝

回答

0

嘗試violatorMenu.setOpaque(true)。其餘的代碼似乎工作正常。下面是一個例子:

import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.event.MenuEvent; 
import javax.swing.event.MenuListener; 

public class MenuExample extends JFrame { 

    private void createAndShowGUI() { 
     /** the main frame */ 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JMenuBar mb = new JMenuBar(); 
     setJMenuBar(mb); 
     JMenu violatorMenu = new JMenu("A menu"); 
     JMenuItem mi = new JMenuItem("A menu item"); 
     violatorMenu.add(mi); 
     violatorMenu.setOpaque(true); 
     mb.add(violatorMenu); 

     violatorMenu.addMenuListener(new MenuListener() { 
      @Override 
      public void menuSelected(MenuEvent e) { 
       violatorMenu.setForeground(new java.awt.Color(255, 255, 255)); 
       violatorMenu.setBackground(new java.awt.Color(183, 28, 28)); 
      } 
      @Override 
      public void menuDeselected(MenuEvent e) { 
      } 
      @Override 
      public void menuCanceled(MenuEvent e) { 
      } 
     }); 

     /** show the frame to the user */ 
     pack(); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 

     final MenuExample frame = new MenuExample(); 

     /** schedule for the event dispatcher */ 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       frame.createAndShowGUI(); 
      } 
     }); 
    } 

}