Avatar billede birkis Nybegynder
06. juni 2004 - 14:42 Der er 15 kommentarer og
1 løsning

Look&Feel

Med den nye "Java 2 Platform" (1.5.0 beta2) har Sun gjort ændringer i Look&Feel... Er det muligt at få f.eks. den gamle Metal Look&Feel tilbage?
Avatar billede arne_v Ekspert
06. juni 2004 - 14:44 #1
Ja man kan altid selv sætte look and feel.

Prøv og leg lidt med det her program:

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class MultiLookAndFeel extends JFrame implements ActionListener {
  private JButton windows = new JButton("Windows");
  private JButton motif = new JButton("Motif");
  private JButton metal = new JButton("Metal");
  private JButton gtk = new JButton("GTK");
  private JButton java = new JButton("Java");
  private JButton system = new JButton("System");
  public MultiLookAndFeel() {
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      getContentPane().setLayout(new GridLayout(6, 1));
      windows.addActionListener(this);
      getContentPane().add(windows);
      motif.addActionListener(this);
      getContentPane().add(motif);
      metal.addActionListener(this);
      getContentPane().add(metal);
      gtk.addActionListener(this);
      getContentPane().add(gtk);
      java.addActionListener(this);
      getContentPane().add(java);
      system.addActionListener(this);
      getContentPane().add(system);
      pack();
  }
  public void actionPerformed(ActionEvent e) {
      try {
        if(e.getSource() == windows) {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        } else if(e.getSource() == motif) {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
        } else if(e.getSource() == metal) {
            UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
        } else if(e.getSource() == gtk) {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
        } else if(e.getSource() == java) {
            UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
        } else if(e.getSource() == system) {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        }
      } catch (ClassNotFoundException e1) {
        e1.printStackTrace();
      } catch (InstantiationException e1) {
        e1.printStackTrace();
      } catch (IllegalAccessException e1) {
        e1.printStackTrace();
      } catch (UnsupportedLookAndFeelException e1) {
        e1.printStackTrace();
      }
      SwingUtilities.updateComponentTreeUI(this);
      pack();
  }
  public static void main(String[] args) {
      MultiLookAndFeel f = new MultiLookAndFeel();
      f.show();
  }
}
Avatar billede arne_v Ekspert
06. juni 2004 - 14:48 #2
(det nye Ocean look & feel er ikke i programmet da det er lavet til 1.4, men
du vil jo også netop tilbage til det gamle look & feel)
Avatar billede birkis Nybegynder
06. juni 2004 - 20:07 #3
Sjovt lille program... :-)

Men; det giver egentlig ikke nogen løsning på problemet:

Se http://www.eivindbirkeland.net/discussion/metal.html - det øverste billede er Metal Look&Feel med J2SDK 1.5.0 - det andet er med 1.4.2_04, og det er den jeg vil ha, da andre L&F (som f.eks. det nye WinXP) giver problemer på min maskine.
Avatar billede arne_v Ekspert
06. juni 2004 - 20:12 #4
Release notes siger:


Swing

    The following note pertains to Swing functionality in this release.

        * In release 1.5, the Java look and feel has changed. The new look and feel, which is automatically loaded, is called Ocean. Ocean maintains the widget size used by the previous default look and feel — Metal. Only the look and a small portion of the feel has changed. The Metal look and feel can be specified by setting the system property swing.metalTheme=steel.
Avatar billede arne_v Ekspert
06. juni 2004 - 20:13 #5
Det læste jeg som at at default Look & Feel er ændret fra Metal til Ocean
og at man derfor kunen få det gamle tilbage ved eksplicit at sætte Metal.

Men jeg tester lige !
Avatar billede arne_v Ekspert
06. juni 2004 - 20:17 #6
Du har fuldstændigt ret. Sådan virker det ikke.

Men:

System.setProperty("swing.metalTheme", "steel");

får det gamle grå tilbage !
Avatar billede arne_v Ekspert
06. juni 2004 - 22:09 #7
MultiLookAndFeel i 1.5 udgave ser ud som:

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class MultiLookAndFeel extends JFrame implements ActionListener {
  private JButton windows = new JButton("Windows");
  private JButton motif = new JButton("Motif");
  private JButton metal1 = new JButton("Metal/ocean");
  private JButton metal2 = new JButton("Metal/steel");
  private JButton gtk = new JButton("GTK");
  private JButton java = new JButton("Java");
  private JButton system = new JButton("System");
  public MultiLookAndFeel() {
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      getContentPane().setLayout(new GridLayout(7, 1));
      windows.addActionListener(this);
      getContentPane().add(windows);
      motif.addActionListener(this);
      getContentPane().add(motif);
      metal1.addActionListener(this);
      getContentPane().add(metal1);
      metal2.addActionListener(this);
      getContentPane().add(metal2);
      gtk.addActionListener(this);
      getContentPane().add(gtk);
      java.addActionListener(this);
      getContentPane().add(java);
      system.addActionListener(this);
      getContentPane().add(system);
      pack();
  }
  public void actionPerformed(ActionEvent e) {
      try {
        if(e.getSource() == windows) {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        } else if(e.getSource() == motif) {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
        } else if(e.getSource() == metal1) {
            javax.swing.plaf.metal.MetalLookAndFeel.setCurrentTheme(new javax.swing.plaf.metal.OceanTheme());
            UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
        } else if(e.getSource() == metal2) {
            javax.swing.plaf.metal.MetalLookAndFeel.setCurrentTheme(new javax.swing.plaf.metal.DefaultMetalTheme());
            UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
        } else if(e.getSource() == gtk) {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
        } else if(e.getSource() == java) {
            UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
        } else if(e.getSource() == system) {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        }
      } catch (ClassNotFoundException e1) {
        e1.printStackTrace();
      } catch (InstantiationException e1) {
        e1.printStackTrace();
      } catch (IllegalAccessException e1) {
        e1.printStackTrace();
      } catch (UnsupportedLookAndFeelException e1) {
        e1.printStackTrace();
      }
      SwingUtilities.updateComponentTreeUI(this);
      pack();
  }
  public static void main(String[] args) {
      MultiLookAndFeel f = new MultiLookAndFeel();
      f.setVisible(true);
  }
}
Avatar billede birkis Nybegynder
06. juni 2004 - 23:03 #8
Tak! Så må jeg bare finde ud af at starte NetBeans med det gamle "look". Jeg synes "Ocean" er for lyst.
Avatar billede arne_v Ekspert
06. juni 2004 - 23:08 #9
Ah - jeg troede at detvar din egen applikation.

Prøv at rette
  C:\Program Files\Netbeans3.6\bin\ide.cfg
til at indeholde
  -J-Dswing.metalTheme=steel
Avatar billede birkis Nybegynder
06. juni 2004 - 23:14 #10
"Ah - jeg troede at detvar din egen applikation."

Det er det også, men først NetBeans... :-)


"Prøv at rette
  C:\Program Files\Netbeans3.6\bin\ide.cfg
til at indeholde
  -J-Dswing.metalTheme=steel"

Det vil den ikke have - da starter den med "WinXP-look" (som på min computer giver en fejl... :-(
Avatar billede arne_v Ekspert
07. juni 2004 - 19:05 #11
Din egen er nok nemmere end NetBeans

:-)

Har du prøvet at snuge dne option ind i en af de eksisterende linier ?
Avatar billede birkis Nybegynder
08. juni 2004 - 08:56 #12
"Din egen er nok nemmere end NetBeans"
Åbenbart...

"Har du prøvet at snuge dne option ind i en af de eksisterende linier ?"
Ja. Jeg har prøvet den både i en linie for sig selv, og i de eksisterende linier.

Jeg har også prøvet med
-ui javax.swing.plaf.metal.MetalLookAndFeel
-ui javax.swing.plaf.metal.DefaultMetalTheme
-laf javax.swing.plaf.metal.MetalLookAndFeel
osv.

Resultatet er enten Ocean, eller WinXP.
Avatar billede arne_v Ekspert
08. juni 2004 - 09:08 #13
Tja - så kan du jo downloade NetBeans source, modificere og builde ...

:-)
Avatar billede birkis Nybegynder
08. juni 2004 - 11:25 #14
Heh... Det må i hvert fald være sidste udvej... :-)

Men nu har du vist hjulpet mig rigeligt - jeg får rode lidt mer med det selv.

Tak skal du have!
Avatar billede birkis Nybegynder
08. juni 2004 - 15:55 #15
Sådan! (Med lidt hjælp fra nbusers@netbeans.org)

Der er muligvis flere måder at gøre det på, men en måde er at indsætte
-J-Dswing.metalTheme=steel
i NetBeans shortcut: C:\Program Files\NetBeans3.6\bin\runidew.exe -J-Dswing.metalTheme=steel

:-)
Avatar billede birkis Nybegynder
08. juni 2004 - 17:07 #16
Nåh... Det var vist kun halvt rigtigt.
Man skal have _både_
-J-Dswing.metalTheme=steel og
-ui javax.swing.plaf.metal.MetalLookAndFeel med, så spiller det.

Og har man begge linier, kan det uden problemer være i ide.cfg.

Nu skal jeg ikke mase mere... :-)
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