-2

私は Java Swing開発の初心者であり、 JFrameに背景画像を追加する際にいくつかの問題を見つけています (私のアプリケーションのウィンドウに、今回はすべての Swing ウィンドウの古典的な灰色の背景色があります)。

これは私のクラスコードです:

package com.test.login;

import javax.swing.JButton;

import java.awt.Container;
import java.awt.Dimension;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPopupMenu.Separator;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;

import net.miginfocom.swt.MigLayout;

import org.jdesktop.application.SingleFrameApplication;

public class LoginFrame2 extends SingleFrameApplication {

    private static final int FIXED_WIDTH = 550;
    private static final Dimension INITAL_SIZE = new Dimension(FIXED_WIDTH, 230);

    public static void main(String[] args) {
        System.out.println("DENTRO: LoginFrame() ---> main()");
        launch(LoginFrame2.class, args);
    }

    @Override
    protected void startup() {
        // TODO Auto-generated method stub
        System.out.println("Inside startup()");


        JFrame mainFrame = this.getMainFrame();         // main JFrame that represents the Windows
        mainFrame.setTitle("XCloud Login");

        mainFrame.setPreferredSize(INITAL_SIZE);
        mainFrame.setResizable(false);

        Container mainContainer = mainFrame.getContentPane();       // main Container into the main JFrame

        mainContainer.add(new JLabel(new ImageIcon("/home/andrea/Documenti/XCloud/Immagini/GUI 2.1/logo.png")));

        // JPanel creation and settings of the MigLayout on it:
        JPanel externalPanel = new JPanel();
        externalPanel.setLayout(new net.miginfocom.swing.MigLayout("fill"));

        externalPanel.add(new JLabel("Username"), "w 50%, wrap");

        JTextField userNameTextField = new JTextField(20);

        externalPanel.add(userNameTextField, "w 90%, wrap");

        externalPanel.add(new JLabel("Password"), "w 50%, wrap");
        JTextField pswdTextField = new JTextField(20);
        externalPanel.add(pswdTextField, "w 90%, wrap");

        JButton loginButton = new JButton("Login");

        externalPanel.add(loginButton, "w 25%, wrap");

        mainContainer.add(externalPanel);
        //mainFrame.add(mainContainer);

        show(mainFrame);


    }

}

ご覧のとおり、次の行で Container オブジェクトの背景として追加しようとしています。

mainContainer.add(new JLabel(new ImageIcon("/home/andrea/Documenti/XCloud/Immagini/GUI 2.1/logo.png")));

しかし、それは機能せず、ウィンドウは灰色のままです。

私は何を間違っていますか?解決するのを手伝ってもらえますか?

TNX

アンドレア

4

1 に答える 1

3

潜在的な問題がいくつか見られます。

mainContainer.add(new JLabel(new ImageIcon("/home/andrea/Documenti/XCloud/Immagini/GUI 2.1/logo.png")));

パスが間違っていて、イメージがロードされていない可能性があります。

しかし、問題の可能性が高いのは次の場合です。

Container mainContainer = mainFrame.getContentPane(); 
mainContainer.add(new JLabel(new ImageIcon("/home/andrea/Documenti/XCloud/Immagini/GUI 2.1/logo.png")));
...
mainContainer.add(externalPanel);

デフォルトでは、JFrame は BorderLayout を使用します。許可されていない BorderLayout の CENTER に 2 つのコンポーネントを追加しようとしています。詳細については、ボーダーレイアウトの使用方法に関する Swing チュートリアルのセクションを参照してください。

背景画像付きのパネルが本当に必要な場合は、この質問が毎日寄せられるため、フォーラムを検索してください。これらの投稿のいくつかを見つけるには、右側の「関連」見出しの下を見るだけです。

于 2013-11-08T16:36:03.630 に答える