如何在JavaSwing中将背景图像添加到JFrame窗口?
我在JavaSwing开发方面是个新手,我发现在JFrame中添加一个背景图片有一些问题(在我的应用程序的窗口中,这一次有所有Swing窗口的经典灰色背景色) 这是我的班级代码:如何在JavaSwing中将背景图像添加到JFrame窗口?,java,swing,jframe,Java,Swing,Jframe,我在JavaSwing开发方面是个新手,我发现在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.JB
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);
}
}
如您所见,我试图通过以下行将其添加为容器对象的背景:
mainContainer.add(new JLabel(new ImageIcon("/home/andrea/Documenti/XCloud/Immagini/GUI 2.1/logo.png")));
但它不工作,窗户仍然是灰色的
我做错了什么?你能帮我解决这个问题吗
Tnx
安德里亚我发现了几个潜在的问题
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的中心,这是不允许的。有关更多信息,请阅读上的Swing教程部分
如果你真的想要一个有背景图片的面板,那么就搜索论坛,因为这个问题每天都会被问到。你所需要做的就是在右边的“相关”标题下查找这些帖子