簡體   English   中英

為什么我的JButton在不同的計算機上看起來有所不同?

[英]Why does my JButton look differently of different computers?

我在應用程序中使用JButton。 他們需要具有不同的顏色。 首先,我使用了btn.setBackground(col); 它可以在我的計算機上工作,而在另一台計算機上,我的按鈕只有灰色(應該不是紅色)。

為了解決這個問題,我決定使用圖像。 我通過以下方式進行操作: tmp = new JButton(newIcon);

同樣,它在我的計算機上和在另一台計算機上都只能顯示灰色按鈕時工作正常。

是否有人有什么想法是問題的原因以及如何解決? 我聽說它可能與“本機系統的外觀”有關。 但是我不知道這意味着什么,如果是這種情況該怎么辦? 有人可以請我幫忙嗎?

Swing具有可插入外觀的概念。 這些外觀中的一些模仿Windows,GTK +等中本機組件的外觀。即使在Windows上,我也有兩種不同的外觀-我認為是Classic和Vista。 也許您在兩個系統上使用了不同的OS,並且使用了一個GUI設計器來自動設置外觀。 然而,大多數情況並非如此-默認的外觀(在Java 1.6.10之前)Metal和Nimbus在每個OS上都相同。

   // 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");

是的,這取決於操作系統。 在不同的操作系統(例如Windows,WindowsClassic等)中,相同的按鈕可能看起來不同。您可以通過應用不同的“外觀”來查看系統的差異。 為此,您應該了解UIManager類。

例如,對於WindowsClassic,

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

對於Nimbus的外觀和感覺,

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

有關更多詳細信息,請參見以下鏈接。

外觀教程

外觀(LaF)是Java應用程序獲得的外觀,它取決於您的操作系統。

您可以為應用程序設置外觀,以避免出現此問題

嘗試查看物質的外觀。 該網站包含該庫,並教導如何使用它https://substance.dev.java.net/

您可以定義GUI的外觀,並使用程序導出庫,每個人都會得到相同的外觀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM