2010-11-18 6 views
0

私は彼らのルック&フィールを変更したいいくつかのウィジェットで、コマンドラインでアプリケーションを作っ動作しません:クラスのコンストラクタにのみウィジェットを命じる 変更スイングL&Fはよく

java -Dswing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeel LookAndFeelAppl 

が、呼び出された後

L & Fを変更しますが、別の方法で作成したものはありません。また、JFrame自体は変更されません。

パブリッククラスLookAndFeelApplはJFrameを拡張します { プライベートJLabelラベル; プライベートJButtonボタン。

public LookAndFeelAppl() 
{ 
    super("Look And Feel Demo"); 

    setLayout(null); 

    final UIManager.LookAndFeelInfo plaf[] = UIManager.getInstalledLookAndFeels(); 

    JLabel lable_laf = new JLabel("Choose L&F:"); 
    final JComboBox cb = new JComboBox(); 

    createOtherGUI(); 

    cb.addItemListener(new ItemListener() 
    { 
     public void itemStateChanged(ItemEvent e) 
     { 
      int ix = cb.getSelectedIndex(); 
      try 
      { 
       UIManager.setLookAndFeel(plaf[ix].getClassName()); 
       SwingUtilities.updateComponentTreeUI(LookAndFeelAppl.this); 
      } 
      catch (Exception ex) 
      { 
      } 
     } 
    }); 

    // HERE IS THE PROBLEM!!!! THIS LOOP GOES BEFORE 
    // THE ITEMLISTENER BECAUSE WHEN I ADD ITEMS AN ITEMEVENT 
    // IS RAISED THAT SET AGAIN THE L&F WITH setLookAndFeel!!! 
    for (int i = 0, n = plaf.length; i < n; i++) 
    { 
     cb.addItem(plaf[i].getName()); 
    } 
    //-------------------------------------------------------- 

    add(lable_laf); 
    add(cb); 
    lable_laf.setBounds(10, 10, 150, 25); 
    cb.setBounds(10, 35, 150, 25); 
} 

public void createOtherGUI() 
{ 
    button = new JButton("BUTTON!!!!"); 
    add(button); 
    button.setBounds(300, 45, 150, 35); 
} 

public static void main(String args[]) 
{ 
    LookAndFeelAppl window = new LookAndFeelAppl(); 
    window.setSize(1000, 700); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    window.setVisible(true); 
    window.setLocationRelativeTo(null); 
} 

}

+1

いくつかのスクリーンショットの書式は奇妙ですが、あなたのアイデアを得ますか? –

+0

したがって、createOtherGUI()は正常に動作しません。それがあればそれは助けになるでしょう。 – josefx

+0

コンパイルされません。あなたのクラスは 'JFrame'を拡張しますが、コードスニペットにこれを追加するのを忘れましたか? – Qwerky

答えて

0

少数しようとするものとの質問:私はWindows用L & Fを設定しているので、私はあなたがWindowsマシン上でこれを実行していると仮定している参照

  1. ?私が尋ねる理由は、クロスプラットフォームL & Fsまで、JDKが何をサポートしているのかよくわからないということです。
  2. 他のL & Fと同じ結果を試しましたか? (Nimbusなど)
  3. これは何かを行うかもしれませんが、どこにmain(...)がありますか?それをJFrameと、JFrameを構築する別のクラスに配置してみてください。
  4. 最悪の場合、L & Fクラス名をmain(...)(またはpropsファイル)に渡してから、UIManagerを使用してスイングコンポーネントが作成される前に設定することができます。

幸運、 デイブ

+0

私はWindowsにいて、他のJ&Fも同じ結果を出しています。メインは同じクラスです。 – xdevel2000

+0

私はアプリを作成し、それは私のために正常に動作します。私は別の答えを投稿していますので、フォーマットを取ることができます(これらのコメントでどうやって理解できないか) – Merky

+0

すぐにお試しいただき、結果をお伝えします! – xdevel2000

2

私はWindows上でJDK 1.6.0_13を使用して(最新版)Eclipseでこれを実行しました。エクリプスの実行構成(VM引数)でIは} -Dswing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeel

public class Test extends JFrame {

public Test() {

super("Test L&F"); 

JComboBox box = new JComboBox(new String[] {"One", "Two", "Three"}); 

getContentPane().add(box, BorderLayout.SOUTH); 

createControls(); 

setSize(300, 300); 
setVisible(true); 

}

private void createControls() {

JComboBox box = new JComboBox(new String[] {"One", "Two", "Three"}); 

getContentPane().add(box, BorderLayout.NORTH); 

を使用

public static void main(String[] args) { new Test(); } }

申し訳ありませんが、...

+0

OK問題が見つかりました。投稿したコード全体にその問題が表示されています。しかし、私はあなたに伝えたいことは2つあります。最初は問題ありません。レイアウトマネージャを使用しない場合はL&F、もう1つはaddメソッドを使用するとコンポーネントがコンテンツペインに自動的に追加されます。これを読んでください:http://mindprod.com/jgloss/pane.html。最後に、あなたの答えに+1してくれてありがとうと思います。 – xdevel2000

+0

info(と+1)ありがとう! Sun(今はOracle ugg)がコンテンツペインの内容に「賛成」していることを認識していませんでした(Javaをどれぐらい使用していたのか、これが1.5に含まれていることを知らなかったことを示しています)。再び、情報をありがとうと私はあなたがそれを把握してうれしいです! – Merky

関連する問題