QimenMedlem sedan juni 20015 009 inlägg Hej
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.
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();
}
}
}
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.
frontMedlem sedan aug. 2000380 inlägg 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.
QimenMedlem sedan juni 20015 009 inlägg 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.
frontMedlem sedan aug. 2000380 inlägg Du har alltså testat:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
Men programmet får endå inte windows-look?
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.
QimenMedlem sedan juni 20015 009 inlägg Plockade bort hela ifsatsen så gick det fint direkt. Extremt klantigt av mig att inte se det med ifsatsen. :r :)
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 ");
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);
}
private static void initLookAndFeel() {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (ClassNotFoundException e) {
System.err.println("Couldn't find class for specified look and feel");
System.err.println("Did you include the L&F library in the class path?");
System.err.println("Using the default look and feel.");
} catch (UnsupportedLookAndFeelException e) {
System.err.println("Can't use the specified look and feel on this platform.");
System.err.println("Using the default look and feel.");
} catch (Exception e) {
System.err.println("Couldn't get specified look and feel, for some reason.");
System.err.println("Using the default look and feel.");
e.printStackTrace();
}
}
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();
}
});
}
}
frontMedlem sedan aug. 2000380 inlägg 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();
}
});
}
}
QimenMedlem sedan juni 20015 009 inlägg Men om man bara vill använda stanadardutseende i alla os, då är väl min if-sats rätt onödig?
frontMedlem sedan aug. 2000380 inlägg Jo det är sant. Bara du ersätter:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
Med:
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
Så uppnår du samma funktion.