0

アプリケーションで JButton を使用しています。それらは異なる色を持つ必要があります。最初にそれを使用しましたbtn.setBackground(col);。それは私のコンピューターで機能し、別のコンピューターでは私のボタンが灰色になっています (本来の赤ではありません)。

この問題を解決しようとして、画像を使用することにしました。私は次の方法でそれを行います:tmp = new JButton(newIcon);

繰り返しますが、私のコンピューターでは問題なく動作し、別のコンピューターでは灰色のボタンしか表示されません。

問題の原因と解決方法を知っている人はいますか? それは「ネイティブシステムのルックアンドフィール」が関係していると聞きました。しかし、それが何を意味するのかわからず、そうであればどうすればよいですか?誰か助けてくれませんか?

4

3 に答える 3

2

Swing には、プラグイン可能なルック アンド フィールの概念があります。これらのルック アンド フィールのいくつかは、Windows や GTK+ などのネイティブ コンポーネントのルック アンド フィールを模倣しています。おそらく、2 つのシステムで異なる OS を使用していて、ルック アンド フィールを自動的に設定する GUI デザイナーを使用しているかもしれません。ただし、ほとんどはそうではありません。デフォルトのルック アンド フィールの Metal (Java 1.6.10 より前) と 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);

コードの最初の部分は、使用可能なルック アンド フィール名のリストを作成し、2 番目の部分は、そのうちの 1 つが選択されたときに動作します。ただし、常に同じ laf を使用する必要があるため、次のようなものを使用できます。

UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
于 2010-04-27T13:01:55.110 に答える
2

はい、OS によって異なります。同じボタンでも、Windows、WindowsClassic などの異なる OS では異なって見える場合があります。異なる「ルック アンド フィール」を適用することで、システムの違いを確認できます。そのためには、UIManager クラスについて知っておく必要があります。

たとえば、WindowsClassic の場合、

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

Nimbus のルック アンド フィールについては、

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

詳しくは以下のリンクをご覧ください。

ルック アンド フィールのチュートリアル

于 2010-04-27T13:08:35.747 に答える
0

ルック アンド フィール (LaF) は、Java アプリの外観であり、運用システムによって異なります。

この問題を回避するために、アプリケーションの外部ルック アンド フィールを設定できます。

Substanceのルック アンド フィールを見てみましょう。Web サイトにはライブラリが含まれており、その使用方法を教えてい ます https://substance.dev.java.net/

GUI の外観を定義し、プログラムでライブラリをエクスポートすると、誰もが同じルック アンド フィールを得ることができます。

于 2010-04-27T13:16:52.400 に答える