Как настроить внешний вид jframe

Я немного смущен тем, где это можно сделать:

try {
 UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
 UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch(Exception e){
}

Я не расширил класс JFrame, но использовал JFrame f = new JFrame(); Спасибо: D

5 ответов

Самое распространенное место, чтобы положить это, находится прямо внутри основного метода static void main (String [] args). Например:

public static void main(String[] args)
{
 try 
 { 
 UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); 
 } 
 catch(Exception e){ 
 }
 new YourClass(); //start your application
}

для более подробной информации смотрите на этом сайте: http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html


Примечание: это не ответ на вопрос (где было место для установки LAF). Вместо этого он отвечает на вопрос о том, как установить LAF таким образом, который не зависит от его имени пакета. Упрощает жизнь в случае перемещения класса, как f.i. Нимбус от com.sun * до javax.swing.

Основной подход заключается в том, чтобы запросить UIManager для его установленных LAF, пропустить их до тех пор, пока совпадение не будет найдено и не установит это. Вот такие методы, которые реализованы в SwingX:

/**
 * Returns the class name of the installed LookAndFeel with a name
 * containing the name snippet or null if none found.
 * 
 * @param nameSnippet a snippet contained in the Laf name
 * @return the class name if installed, or null
 */
public static String getLookAndFeelClassName(String nameSnippet) {
 LookAndFeelInfo[] plafs = UIManager.getInstalledLookAndFeels();
 for (LookAndFeelInfo info : plafs) {
 if (info.getName().contains(nameSnippet)) {
 return info.getClassName();
 }
 }
 return null;
}

Использование (без обработки исключений)

String className = getLookAndFeelClassName("Nimbus");
UIManager.setLookAndFeel(className);


UIManager.setLookAndFeel() не будет работать с уже созданными компонентами. Вот хороший способ установить Look And Feel для каждого окна вашего приложения. Это будет установлено на всех открытых Windows в вашей программе. Любые новые созданные окна будут использовать то, что было установлено UIManager.

UIManager.setLookAndFeel(lookModel.getLookAndFeels().get(getLookAndFeel()));
 for(Window window : JFrame.getWindows()) {
 SwingUtilities.updateComponentTreeUI(window);
 }


Вы можете поместить этот блок в свой основной метод после создания JFrame или в конструкторе класса, который расширяет JFrame.

try
 {
 //Set the required look and feel
 UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
 //Update the component tree - associate the look and feel with the given frame.
 SwingUtilities.updateComponentTreeUI(frame);
 }//end try
 catch(Exception ex)
 {
 ex.printStackTrace();
 }//end catch


try {
 for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
 if ("Nimbus".equals(info.getName())) {
 javax.swing.UIManager.setLookAndFeel(info.getClassName());
 break;
 }
 }
 } catch (ClassNotFoundException | InstantiationException || javax.swing.UnsupportedLookAndFeelException ex) {
 java.util.logging.Logger.getLogger( Home.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
 }

licensed under cc by-sa 3.0 with attribution.