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?
Annonceindlæg fra Novataris
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(); } }
(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)
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.
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.
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 !
Du har fuldstændigt ret. Sådan virker det ikke. Men: System.setProperty("swing.metalTheme", "steel"); får det gamle grå tilbage !
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); } }
Tak! Så må jeg bare finde ud af at starte NetBeans med det gamle "look". Jeg synes "Ocean" er for lyst.
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
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... :-(
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 ?
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.
08. juni 2004 - 09:08
#13
Tja - så kan du jo downloade NetBeans source, modificere og builde ... :-)
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!
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 :-)
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... :-)
Kurser inden for grundlæggende programmering