2016-11-28 10 views
1

最近、背景画像を含むシステムホームページを作成しています。私は背景を設定した後、私が作成したボタンは正しく表示されません。マウスを使用してボタンの位置を指しているだけで表示されます。誰かがこの問題を解決する方法を教えてもらえますか?あなたの助けに感謝します。コードは以下の通りです:(?おそらくタイプミス)背景画像を含むJFrameのボタンが正しく表示されない理由

パブリッククラスホームページのJFrameを拡張{

private JPanel button = new JPanel(); 
private JButton time = new JButton("Bus Schedule"); 
private JButton reserve = new JButton("Booking"); 
private JButton info = new JButton("About Us"); 
Container con = getContentPane(); 


public HomePage(){ 

    setTitle("Bus Reservation System"); 
    setSize(650,500); 
    setLocation(360,100); 
    setVisible(true); 
    setResizable(false); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 

    setBackground(); 
    setButton(); 
} 


public void setBackground(){ 

    JLabel background = new JLabel(new ImageIcon("C:/User/Desktop/Assignment/bg.jpg")); 
    con.add(background); 
    background.setLayout(new FlowLayout()); 
    con.add(button); 

} 


public void setButton(){ 

    Font but = new Font("Serif" , Font.ITALIC , 20); 

    info.setFont(but); 
    time.setFont(but); 
    reserve.setFont(but); 

    button.add(info); 
    button.add(time); 
    button.add(reserve); 

    con.add(button); 

} 

答えて

1

単純なミス、あなたがJLabelのレイアウトを設定している、あなたはContainerのレイアウトを設定するためのもの。 background.setLayout(...)の代わりにcon.setLayout(new FlowLayout());を実行してください。

また、ファイルへのパスが間違っていると思います。テストのために、プロジェクトにファイルを置き、 "bg.jpg"のようなパスを実行してください。それが動作すれば、これを確認できます。それは私のために働く。私がこれが問題だと思う理由は、C:/Usersを指定したが、特定のユーザーのためのフォルダを決して与えないためです。正しいパスはC:/Users/Your_name/Desktop/Assignment/bg.jpg

私はあなたのシステムにないので、そのパスの部分では分かりません。しかし、私の場合は、私の日食であなたのコードを実行すると、これはそれを修正します。

編集: 最後の1つは、現在のコードで実際には「背景」の画像にならないということです。その理由は、FlowLayoutを使用して、その下にボタンを移動するからです。別のレイアウトを使用することができます。

1

setVisible(true)に電話した後、特定の操作を実行すると、手動でvalidate()またはrevalidate()ウィンドウを開く必要があります。

ウィンドウの希望する設定とメンバーシップをすべて初期化した後で、setVisible()に電話するほうが簡単です。

/* setVisible(true); -- wrong place */ 
setResizable(false); 
setDefaultCloseOperation(EXIT_ON_CLOSE); 
setBackground(); 
setButton(); 
setVisible(true); // proper place 
+1

これは間違いなく、あなたがそれを言いました。しかし、この変更でも、問題の根源にはならないようですが、イメージファイルは表示されません。 (私は自分のシステム上で彼の正確なコードをテストしています)。それはパスを変更し、コンテナ全体のレイアウトを設定することで機能しました。 –

+0

@AshwinGupta優秀なポイント;私はコンテナの代わりにJLabelのレイアウトを見落として、コードを目で確認しました。 – AJNeufeld

+0

Ty。私はそれがどのようにあるか知っている。私も初めてそれを逃した(そしてあなたが指摘したこと)。なぜ私は私のシステム上でそれをテストしたのですが、私はエラーを発見しなかったし、それがなぜ機能していないのか不思議でした。それは問題を見つけたときのことです。 –

0

まずは、既に述べたように、すべてのコンポーネントがJFramesetVisible(true)を呼び出す前に、フレームに付加されるべきです。上記のコードに基づいて

JLabel background = new JLabel(new ImageIcon("C:/User/Desktop/Assignment/bg.jpg")); 
con.add(background); 
background.setLayout(new FlowLayout()); 
con.add(button); 

あなたのGUIの階層は次のようになりますので、あなたは、コンテンツ・ペインに二つの成分を追加している:

- frame 
    - content pane 
     - background 
     - button 

あなたのGUIは次のようになりたい私には思えます:

- frame 
    - content pane 
     - background 
      - button 

だからあなたのコードは次のようになります。

JLabel background = new JLabel(new ImageIcon("C:/User/Desktop/Assignment/bg.jpg")); 
con.add(background); 
background.setLayout(new FlowLayout()); 
//con.add(button); 
background.add(button); 
関連する問題