2010-04-27 2 views
0

Я использую JButtons в своем приложении. Они должны иметь разные цвета. Сначала я использовал это btn.setBackground(col);. Он работает на моем компьютере, а на другом компьютере моя кнопка просто серая (не красная, как и должно быть).Почему мой JButton выглядит по-разному на разных компьютерах?

Пытаясь решить эту проблему, я решил использовать образы. Я делаю это следующим образом: tmp = new JButton(newIcon);

Опять же, он отлично работает на моем компьютере, а на другом компьютере я вижу только серые кнопки.

Есть ли у кого-нибудь идеи, что может быть причиной проблемы и как ее можно решить? Я слышал, что это может быть связано с «внешним видом собственной системы». Но я не знаю, что это значит и что мне делать, если это так? Может кто-нибудь просить, помогите мне с этим?

+0

В чем проблема с дизайном/удобством пользовательского интерфейса, которую вы пытаетесь исправить с помощью цветных кнопок? - –

+0

Очевидно, что Windows Vista, Mac OS X и Nimbus L & F игнорируют установку цвета фона. – Nate

ответ

2

Свинг имеет концепцию подключаемого устройства look and feels. Некоторые из этих взглядов имитируют внешний вид собственных компонентов из Windows, GTK + и т. Д. Даже в Windows есть два разных вида и взгляда - Classic и Vista, я думаю. Возможно, вы используете разные ОС на своих двух системах и дизайнер GUI, который автоматически устанавливает внешний вид. Большинство из них, однако, не выглядят так же, как и Metal (до Java 1.6.10), и Nimbus выглядят одинаково на каждой ОС.

// build the look and feel section 
    final LookAndFeelInfo[] lookAndFeelInfos = UIManager.getInstalledLookAndFeels(); 
    List<String> lookAndFeelNames = new ArrayList<String>(); 
    lookAndFeelNames.add("System"); 

    for (LookAndFeelInfo lookAndFeelInfo : lookAndFeelInfos) { 
     if (!lookAndFeelInfo.getName().equals("CDE/Motif")) { 
      lookAndFeelNames.add(lookAndFeelInfo.getName()); 
     } 
    } 

    if (selectedLookAndFeel.equals("System")) { 
        try { 
         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
        } catch (ClassNotFoundException ex) { 
         java.util.logging.Logger.getLogger(SpellbookFrame.class.getName()).log(Level.SEVERE, null, ex); 
        } catch (InstantiationException ex) { 
         java.util.logging.Logger.getLogger(SpellbookFrame.class.getName()).log(Level.SEVERE, null, ex); 
        } catch (IllegalAccessException ex) { 
         java.util.logging.Logger.getLogger(SpellbookFrame.class.getName()).log(Level.SEVERE, null, ex); 
        } catch (UnsupportedLookAndFeelException ex) { 
         java.util.logging.Logger.getLogger(SpellbookFrame.class.getName()).log(Level.SEVERE, null, ex); 
        } 
       } else { 
        for (LookAndFeelInfo lookAndFeelInfo : lookAndFeelInfos) { 
         if (lookAndFeelInfo.getName().equals(selectedLookAndFeel)) { 
          try { 
           UIManager.setLookAndFeel(lookAndFeelInfo.getClassName()); 
          } catch (ClassNotFoundException e1) { 
           e1.printStackTrace(); 
          } catch (InstantiationException e1) { 
           e1.printStackTrace(); 
          } catch (IllegalAccessException e1) { 
           e1.printStackTrace(); 
          } catch (UnsupportedLookAndFeelException e1) { 
           e1.printStackTrace(); 
          } 
         } 
        } 
       } 

       SwingUtilities.updateComponentTreeUI(tabbedPane); 
       SwingUtilities.updateComponentTreeUI(parent); 

Первая часть кода построить список доступных внешний вид и имена, а второй действует на один из них выбран. Но так как вы хотите всегда использовать тот же LAF вы можете использовать что-то вроде:

UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); 
+0

Но что я могу сделать, чтобы исправить эту проблему? Могу ли я заставить свое программное обеспечение использовать фиксированный взгляд и чувства?Может быть, внешний вид, который я использую в своем программном обеспечении, недоступен на другом компьютере? – Roman

+0

Да, вы можете. Я обновляю сообщение, чтобы использовать фрагмент кода, который я использую. –

2

Да, это зависит от операционной системы. Эти же кнопки могут выглядеть по-разному в разных ОС, таких как Windows, WindowsClassic и т. Д., Вы можете увидеть разницу в вашей системе, применяя различные «Look And Feel». Для этого вам следует знать о классе UIManager.

Для еи Для WindowsClassic,

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel"); 

Для Nimbus выглядеть и чувствовать себя,

UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); 

Для получения более подробной информации см ссылку ниже.

Look And Feel Tutorials

+0

Правильно ли сказать, что я могу удалить упомянутую проблему, если я явно задаю конкретный внешний вид? Таким образом, моя программа будет использовать тот же внешний вид на разных компьютерах, и все должно выглядеть одинаково. Или я ошибаюсь? – Roman

0

Внешний вид (LaF) является появлением вашего Java приложения будет получить, и это зависит от вашей операционной системы.

Вы можете задать внешний вид и для вашего приложения, чтобы избежать этой проблемы

Try посмотреть вещество, внешний вид. Веб-сайт содержит библиотеку и как преподает использовать его https://substance.dev.java.net/

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

Смежные вопросы