Försöker få till en if-sats som sätter rätt lookandfeel till rätt os. Fungerar och får inga fel men jag får inte rätt utseende i windows. Vill ha Windows look and feel och inte Javas.
LOOKANDFEEL har jag definerad som final static String till null. Har provat att flytta om de olika värdena, bl.a. den för windows till överst men det gör ingen skillnad.
Nu hänger jag inte riktigt med. Om du har "final static String LOOKANDFEEL = null" så kommer ju påståendet "LOOKANDFEEL != null" alltid bli falskt, så din fina if-sats inte körs.
Mm har kommit på det efteråt, klantig som man är så hade man missat:
//null (use the default), "Metal", "System", "Motif", "GTK+"
Men det blir ändå inte rätt, fast att jag tar windows look and feel direkt i try. Att det ska vara så förvirrande, vill bara få så att man har standard utseende i win och inte suns eget och så standard i andra os, typ os x har sitt eget.
Har ju inte sett hela koden, men jag skulle nog testköra den på en annan dator för att se om det blir samma problem där.
Om du vill dela med dig av hela koden så kan jag kompilera och testa den på min burk.
Skönt att det löste sig. Fast nu måste jag trassla till det för dig igen ;)
Om du låter IF-satsen du hade i början vara kvar och sätter LOOKANDFEEL till "System" så kommer du att få "standard-looken" i fler miljöer än bara i windows.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SwingApplication implements ActionListener {
private static String labelPrefix = "Number of button clicks: ";
private int numClicks = 0;
final JLabel label = new JLabel(labelPrefix + "0 ");
[B]final static String LOOKANDFEEL = "System";[/B]
public Component createComponents() {
JButton button = new JButton("I'm a Swing button!");
button.setMnemonic(KeyEvent.VK_I);
button.addActionListener(this);
label.setLabelFor(button);
JPanel pane = new JPanel(new GridLayout(0, 1));
pane.setBorder(BorderFactory.createEmptyBorder(30,30,10,30));
pane.add(button);
pane.add(label);
return pane;
}
public void actionPerformed(ActionEvent e) {
numClicks++;
label.setText(labelPrefix + numClicks);
}
[B]private static void initLookAndFeel() {
String lookAndFeel = null;
if (LOOKANDFEEL != null) {
if (LOOKANDFEEL.equals("Metal")) {
lookAndFeel = UIManager.getCrossPlatformLookAndFeelClassName();
} else if (LOOKANDFEEL.equals("System")) {
lookAndFeel = UIManager.getSystemLookAndFeelClassName();
} else if (LOOKANDFEEL.equals("Windows")) {
lookAndFeel = "com.sun.java.swing.plaf.window.WindowsLookAndFeel";
} else if (LOOKANDFEEL.equals("GTK+")) {
lookAndFeel = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";
} else if (LOOKANDFEEL.equals("Motif")) {
lookAndFeel = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
} else {
System.err.println("Unexpected value of LOOKANDFEEL specified: " + LOOKANDFEEL);
lookAndFeel = UIManager.getCrossPlatformLookAndFeelClassName();
}
try { UIManager.setLookAndFeel(lookAndFeel); }
catch (ClassNotFoundException e) {}
catch (UnsupportedLookAndFeelException e) {}
catch (Exception e) {
e.printStackTrace();
}
}
}[/B]
private static void createAndShowGUI() {
initLookAndFeel();
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("boo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SwingApplication app = new SwingApplication();
Component contents = app.createComponents();
frame.getContentPane().add(contents, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}