Avatar billede Hvepse Nybegynder
22. januar 2011 - 16:55 Der er 7 kommentarer og
1 løsning

Customizing af JMenuBar

Hej, jeg har leget lidt med at ændre farverne osv. på mit JMenuBar, men problemet er at jeg ikke kan ændre alle farverne i hele min menu bar. f.eks. når jeg vælger en af mine menuer, så vil der altid være en grålig baggrund ved hvert menu item (valgmulighed).

Hvordan kan jeg nemt ændre dette, jeg syntes at jeg har søgt nettet tyndt efter en guide eller et forum hvor de ønsker svar på et lignende problem, men uden held.

Jeg har prøvet at ændre mit L&F til nimbus, men jeg følte ikke at jeg kunne ændre menu baren til min ønskede farver med dette heller.

Jeg håber at spørgsmålet er forståeligt, og jeg håber at i kan hjælpe mig med mit problem.

Mvh Martin Rohwedder
Avatar billede heinzdmx Nybegynder
22. januar 2011 - 17:14 #1
Måske kan det her være til nogen hjælp?
http://forums.netbeans.org/topic1480.html
Avatar billede Hvepse Nybegynder
23. januar 2011 - 00:04 #2
Jeg fik desværre ikke så meget ud af artiklen du linkede til. Dog kan jeg fortælle at jeg f.eks. med nimbus L&F kan ændre en masse ved at skrive:

UIManager.put("nimbusBase", Color.BLUE);

Denne ændrer menubaren til blå, men den kalkulerer åbenbart på farven, for at få den til at så 'godt' ud til menu items osv. Dette betyder at menuens items osv. bliver lysere end den farve jeg ønskede.

Jeg tænkte dog at en løsning kunne være

UIManager.put("MenuItem.background", Color.BLUE);

Men dette ændrede ingen ting. Jeg har prøvet stort set alle tingene i primary og second ved at følge denne guide:

http://jasperpotts.com/blogfiles/nimbusdefaults/nimbus.html

Selv MenuItems default har jeg prøvet at ændre, men uden held.
Så Jeg håber at nogen herinde kan hjælpe mig med at ændre farven på min JMenuBar. Til orientering, den skal have samme farve (blå), untagen med teksten.
Avatar billede Druesukker Nybegynder
23. januar 2011 - 08:17 #3
Jeg ved ikke om du har løst problemet, men den nemmeste måde er nok at bruge nimbus look and feel, da det er så nemt at ændre på:

/** Lille program der demonstrerer Nimbus Look And Feel */

import java.awt.*;
import javax.swing.*;

public class NimbusApp extends JFrame{
   
    NimbusApp(){
        try {
            // prøver Nimbus Look and feel
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
            // dette tegner backgrounds og mere til componenter
            UIManager.put("nimbusBase", new Color(0,40,100));
            // Jeg synes at det er pænest hvis hvis nimbusFocus er usynlig
            UIManager.put("nimbusFocus", getBackground());
        }catch (Exception e) {
            /* hvis nimbus ikke understøttes vælges det kedelige standard Metal tema
            * eller man kabn selvfølgelig vælge et andet tema her...
            */
        }
       
        JMenuBar bar = new JMenuBar();
        JMenu menu = new JMenu("Menu");
        JMenuItem item1 = new JMenuItem("Item1");
        JMenuItem item2 = new JMenuItem ("Item2");
        menu.add(item1);
        menu.add(item2);
        bar.add(menu);
        add(bar);
       
        JButton b = new JButton("Nimbus Button");
        // hvis man lader være med at ænder baggrunden på jbutton vil den have samme nimbusBase = JMenu farven
        b.setBackground(new Color(150,10,0));
        add(b);
       
        setLayout(new FlowLayout());
        setSize(300,200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setJMenuBar(bar);
        setTitle("Lille Nimubs Demo");
        setVisible(true);

    }
    public static void main(String[] args){
        new NimbusApp();
    }
   
}

Hvis du vil begynde på at arbejde med Nimbus look and feel så er denne hjemmeside et must:
http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/_nimbusDefaults.html#primary

Hvis man ikke bruger Nimbus til at ændre JMenus så er det vist nemmere at lave sin egen menu.
Avatar billede Druesukker Nybegynder
23. januar 2011 - 08:20 #4
nimbusBase = JMenu farven er kommentar sammen med det der står oven over.
Avatar billede Hvepse Nybegynder
23. januar 2011 - 22:53 #5
Jeg har allerede brugt dette, og kan også sagtens ændre mit JMenu med nimbus, men problemet er at jeg ønsker at menubaren skal være samme farve hele vejen igennem, selv når man holder musen over en af menu items. Hvordan kan jeg ændre dette til at være samme farve hele vejen igennem?
Avatar billede Druesukker Nybegynder
25. januar 2011 - 02:11 #6
/** Lille program der demonstrerer Nimbus Look And Feel */

import java.awt.*;
import javax.swing.*;

public class Test1 extends JFrame{
   
    Test1(){
       
        try {
            // prøver Nimbus Look and feel
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
            // dette tegner backgrounds og mere til componenter
            UIManager.put("nimbusBase", new Color(0,40,100));
            // Jeg synes at det er pænest hvis hvis nimbusFocus er usynlig
            UIManager.put("nimbusFocus", getBackground());
            // sort tekst til menuBar
            UIManager.getLookAndFeelDefaults().put(
                    "MenuBar:Menu[Enabled].textForeground", new Color(0,0,0));   
            // samme som standard item
            UIManager.getLookAndFeelDefaults().put(
                    "Label.contentMargins", new Insets(1,12,2,13));   
            // Disable selected farve til menuBar den bruger nemlig et billede som baggrund
            UIManager.getLookAndFeelDefaults().put(
                    "MenuBar:Menu[Selected].backgroundPainter", new Color(0,0,0));
            // set selected tekst til sort
            UIManager.getLookAndFeelDefaults().put(
                    "MenuBar:Menu[Selected].textForeground", new Color(0,0,0));   
           
           
        }catch (Exception e) {
            /* hvis nimbus ikke understøttes vælges det kedelige standard Metal tema
            * eller man kabn selvfølgelig vælge et andet tema her...
            */
        }
       
        Cursor hand = new Cursor(Cursor.HAND_CURSOR);
       
        JMenuBar bar = new JMenuBar();
        JMenu menu = new JMenu("Menu");
        menu.setCursor(hand);
       
        JLabel item1 = new JLabel("Item1");
        item1.setAlignmentX(CENTER_ALIGNMENT);
        menu.add(item1);    // tilføjer label i stedet for item
        item1.setCursor(hand);
       
        JLabel item2 = new JLabel("Item2");
        item2.setAlignmentX(CENTER_ALIGNMENT);
        menu.add(item2);    // tilføjer label i stedet for item
        item2.setCursor(hand);
       
        // mouselistener evt. MouseMotionListener for action til labels
       
        bar.add(menu);
        add(bar);
       
        setLayout(new FlowLayout());
        setSize(300,200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setJMenuBar(bar);
        setTitle("Lille Nimubs Demo");
        setVisible(true);

    }
    public static void main(String[] args){
        new Test1();
    }
   
}
Avatar billede Druesukker Nybegynder
25. januar 2011 - 02:18 #7
Nimbus henter nogle standarder når fx nimbusBase sættes.
Det er denne standard som bruges og farverne mellem jmenubar og menuitem er som standard forskellige farver.

Du kan prøve dig frem med JmenuBar om du kan give den samme farve som jmenuitem

UIManager.put("nimbusBlueGrey", new Color(x,x,x));
Avatar billede Hvepse Nybegynder
05. februar 2011 - 13:35 #8
Ok, tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester