Me interese por el asunto, así que me puse manos a la obra y a salido esto:
Un saludo y espero te sirva.
Código (java) [Seleccionar]
/*
* Autor: Zoik
*/
package base;
import graphics.Gui;
public class Main {
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Gui();
}
});
}
}
Código (java) [Seleccionar]
/*
* Autor: Zoik
*/
package graphics;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import base.Block;
public class Gui extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
private final String backgroundURL = "src/images/background.jpg";
private final String loginTitle = "Login";
private final String userLabelText = "User:";
private final String passLabelText = "Password:";
private final String loginButtonLabelText = "Login";
private final String cancelButtonLabelText = "Cancel";
private final String user = "user";
private final String pass = "1234";
private ImageDesktopPane desktopBackground;
private JInternalFrame internalFrameLogin;
private JPanel panelLogin;
private JLabel userLabel;
private JLabel passwordLabel;
private JTextField userTextField;
private JPasswordField passwordTextField;
private JButton loginButton;
private JButton cancelButton;
private Block thread;
public Gui(){
initFrame();
}
public void initFrame(){
setUndecorated(true);
setDefaultCloseOperation( DO_NOTHING_ON_CLOSE );
setExtendedState( MAXIMIZED_BOTH );
setAlwaysOnTop(true);
new Block(this);
initBackground();
initInternalFrame();
setVisible(true);
}
public void initBackground(){
desktopBackground = new ImageDesktopPane(backgroundURL);
desktopBackground.setLayout(new GridBagLayout());
add(desktopBackground);
}
public void initInternalFrame(){
internalFrameLogin = new JInternalFrame(loginTitle);
internalFrameLogin.setPreferredSize(new Dimension(300, 200));
desktopBackground.add(internalFrameLogin);
internalFrameLogin.setVisible(true);
initLoginPanel();
}
public void initLoginPanel(){
panelLogin = new JPanel();
panelLogin.setLayout(new GridBagLayout());
internalFrameLogin.add(panelLogin);
initLabels();
initTextFields();
initButtons();
}
public void initLabels(){
userLabel = new JLabel(userLabelText);
passwordLabel = new JLabel(passLabelText);
addComponentGBL(panelLogin,userLabel,0,0,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, 10, 75, 0, 0);
addComponentGBL(panelLogin,passwordLabel,0,1,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, 10, 45, 70, 0);
}
public void initTextFields(){
userTextField = new JTextField();
passwordTextField = new JPasswordField();
userTextField.setPreferredSize(new Dimension(90,30));
passwordTextField.setPreferredSize(new Dimension(90,30));
addComponentGBL(panelLogin,userTextField,1,0,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, 10, 0, 0, 65);
addComponentGBL(panelLogin,passwordTextField,1,1,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, 10, 0, 70, 65);
userTextField.setFocusable(true);
}
public void initButtons(){
loginButton = new JButton(loginButtonLabelText);
cancelButton = new JButton(cancelButtonLabelText);
loginButton.addActionListener(this);
cancelButton.addActionListener(this);
addComponentGBL(panelLogin,loginButton,0,1,1,1,GridBagConstraints.CENTER, GridBagConstraints.NONE, 30, 70, 0, 0);
addComponentGBL(panelLogin,cancelButton,1,1,1,1,GridBagConstraints.CENTER, GridBagConstraints.NONE, 30, 0, 0, 40);
}
public void addComponentGBL(Container container, Component component, int gridx, int gridy, int gridwidth, int gridheight, int anchor, int fill, int inset1, int inset2, int inset3, int inset4) {
Insets insets = new Insets(inset1, inset2, inset3, inset4);
GridBagConstraints gbc = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 1.0, 1.0, anchor, fill, insets, 0, 0);
container.add(component, gbc);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == loginButton) {
if(userTextField.getText().equals(user) && passwordTextField.getText().equals(pass)){
dispose();
}
} else if(e.getSource() == cancelButton) {
dispose();
}
}
}
Código (java) [Seleccionar]
/*
* Autor: Zoik
*/
package graphics;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JDesktopPane;
public class ImageDesktopPane extends JDesktopPane{
private static final long serialVersionUID = 1L;
private BufferedImage image;
public ImageDesktopPane(String path) {
try {
image = ImageIO.read(new File(path));
} catch (IOException ex) {
System.out.println("Error al cargar la imagen de fondo");
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
}
}
Código (java) [Seleccionar]
/*
* Autor: Zoik
*/
package base;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.swing.JFrame;
import graphics.Gui;
public class Block{
private Gui frame;
public Block(Gui gui){
frame = gui;
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(
new Runnable()
{
public void run() {
front();
}
}, 500, 50 , TimeUnit.MILLISECONDS );
}
public void front(){
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.toFront();
}
}
Un saludo y espero te sirva.