我在Java Swing开发中是一个新手,并且遇到以下问题
我有以下3个课程:
1)一种主要类,简单地示出了LoginFrame类:
package com.test.login4;
import javax.swing.JFrame;
public class Main {
private static final LoginFrame loginFrame = new LoginFrame();
//private static final GUI gui = new GUI();
public static void main(String[] args) {
System.out.println("Main ---> main()");
loginFrame.setVisible(true);
}
}
2)然后,我有了LoginFrame类,该类简单地扩展了经典的Swing JFrame,它显示了用户可以在其中插入用户名和密码的登录表单:
package com.test.login4;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class LoginFrame extends JFrame implements ActionListener {
private static final int FIXED_WIDTH = 550;
private static final Dimension INITAL_SIZE = new Dimension(FIXED_WIDTH, 230);
private boolean loginResult = true;
public LoginFrame() {
System.out.println("Inside LoginFrame ---> LoginFrame()");
this.setTitle("XCloud Login");
this.setPreferredSize(INITAL_SIZE);
this.setResizable(false);
Container mainContainer = this.getContentPane(); // main Container into
// the main JFrame
// JPanel creation and settings of the MigLayout on it:
// JPanel externalPanel = new JPanel();
JPanelWithBackground externalPanel = null;
try {
// externalPanel = new JPanelWithBackground("resources/logo.png");
externalPanel = new JPanelWithBackground("src/com/test/resources/logo.png");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
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");
loginButton.setActionCommand("loginAction");
loginButton.addActionListener(this);
externalPanel.add(loginButton, "w 25%, wrap");
mainContainer.add(externalPanel);
// mainFrame.add(mainContainer);
// loginFrame.setVisible(true);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}
3)此类使用JPanelWithBackground对象具有背景图像
package com.test.login4;
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class JPanelWithBackground extends JPanel {
private Image backgroundImage;
// Some code to initialize the background image.
// Here, we use the constructor to load the image. This
// can vary depending on the use case of the panel.
public JPanelWithBackground(String fileName) throws IOException {
backgroundImage = ImageIO.read(new File(fileName));
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
// Draw the background image.
//g.drawImage(backgroundImage, 0, 0, this);
g.drawImage(backgroundImage, 0, 0, 550, 230, this);
}
}
我的问题是,当我执行Main类时,它向我显示Java应用程序的图标(在Ubuntu栏上),但无法显示LoginFrame窗口。
为什么?我想念什么?
我尝试创建并显示一个经典的JFrame而不是我的LoginFrame(在Main类中),并且我没有问题。
该方法this.setPreferredSize(INITAL_SIZE);
未达到您的期望。setSize
在LoginFrame
构造函数上调用方法。
setSize(INITAL_SIZE);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句