Почему мой JButton по-разному выглядит на разных компьютерах? - PullRequest
0 голосов
/ 27 апреля 2010

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 27 апреля 2010

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

Например, для WindowsClassic,

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

Для внешнего вида Nimbus,

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

Подробнее см. По следующей ссылке.

Учебники по внешнему виду

2 голосов
/ 27 апреля 2010

Swing имеет концепцию сменного внешнего вида и ощущения . Некоторые из них выглядят и выглядят так же, как и родные компоненты Windows, GTK + и т. Д. Даже в Windows есть два разных взгляда - классический и Vista, я думаю. Может быть, вы используете разные ОС на двух ваших системах и дизайнер графического интерфейса, который автоматически настраивает внешний вид. Большинство, однако, этого не делают - по умолчанию внешний вид 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 голосов
/ 27 апреля 2010

Внешний вид (LaF) - это внешний вид вашего java-приложения, который зависит от вашей операционной системы.

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

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

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

...