Bom dia Wellingtonfoz.
Para fazer o que pretende, primeiro voce tem que desenhar a imagem no fundo (background) do JFrame e não de um JLabel, visto que quando voce adiona o JLabel no Frame, e toma todo o seu conteúdo não deixando espaço para os demais componentes, isto é, de acordo com layout que voce está usando.
Como eu percebo que voce utiliza o GridBagLayout em uma das classes que eu desenvolvi, neste caso necessário é que se faça algumas correções no seu código.
1º) Utilize JDialogs para o Login e não JFrames, isto porque os JDialogs voce pode abrí-los de forma modal.
2º) Voce criou o Layout, porém nem sequer o adicionou no método setContentPane(…).
Acrescente estes códigos na sua classe Layout:
package br.edu.anglo.JLABRO.gui;
import java.awt.Color;
import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
public class Layout extends JPanel {
// Definição do Layout e constraints do Layout
private GridBagLayout layout;
private GridBagConstraints constraints;
// Acrescente este atributo
private Dimension size;
public final int horizontal = GridBagConstraints.HORIZONTAL;
public final int both = GridBagConstraints.BOTH;
//Construtor do objeto (como o mesmo nome da classe)
public Layout(){
layout = new GridBagLayout();
setLayout(layout);
constraints = new GridBagConstraints();
constraints.weightx = 0;
constraints.weighty = 0;
constraints.insets = new Insets(5,5,5,5);
}
// Método que posiciona o componente no Frame
public void addComponent(Component comp, int row, int column, int width, int height, int fill){
constraints.fill = fill;
constraints.gridx = column;
constraints.gridy = row;
constraints.gridwidth = width;
constraints.gridheight = height;
layout.setConstraints(comp, constraints);
add(comp);
}
// Acrescente estes tres métodos.
public Dimension getDimension(){
return size;
}
public void setDimension(int w, int h){
size = new Dimension(w,h);
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setSize(size);
}
public static ImageIcon getImageIcon(String filename){
return new ImageIcon(getClass().getResource("/br/edu/anglo/JLABRO/imag/"+filename);
}
}
Agora lá no Frame Login que vai ser um JDialog, voce configura assim:
public class FrameLogin extends JDialog implements ActionListener, KeyListener {
private JTextField txtlogin;
private JPasswordField txtpassword;
private JButton btnok, btncancel;
private String mens;
private Boolean response = false;
private int accessdenied = 3;
public FrameLogin(JFrame parent){
// Aqui voce configura o JDialog como modal.
super(parent, "Acesso ao programa Cadastro de Visitante", true);
// Aqui voce adicona o Layout no JDialog;
setContentPane(getContainer());
// Aqui voce configura o JDialog para ser retirado da memória quando for fechado.
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
// Aqui redesenha o JDialog
pack();
// Aqui centraliza o JDialog
setLocationRelativeTo(this);
// Aqui torna o JDialog visível
setVisible(true);
}
public Layout getContainer(){
/* Aqui voce coloca a imagem no fundo
do layout que voce está criando
pois é ele que vai tomar toda
a extensão do Panel do JDialog */
Layout container = new Layout() {
@Override
public void paintComponent (Graphics g) {
super.paintComponents(g);
Dimension dDesktop = this.getSize();
double width = dDesktop.getWidth();
double height = dDesktop.getHeight();
Image img = Layout.getImage("back.jpg");
Image background = new ImageIcon(img.getScaledInstance((int)width, (int)height, 1)).getImage();
g.drawImage(background, 0, 0, this);
}
};
// Aqui voce dimensiona o Layout
container.setDimension(300, 300);
// Aqui voce cria uma fonte padrão para os componentes
Font font = new Font("Tahoma", 0, 14);
// O demais componentes ficam por cima da imagem
JLabel lblogin = new JLabel("Digite o seu login......");
lblogin.setFont(font);
container.addComponent(lblogin,4,0,1,1,container.horizontal);
txtlogin = new JTextField(10);
txtlogin.setFont(font);
txtlogin.addKeyListener(this);
container.addComponent(txtlogin,4,1,3,1,container.horizontal);
JLabel lblpassword = new JLabel("Digite a sua senha.....");
lblpassword.setFont(font);
container.addComponent(lblpassword,5,0,1,1,container.horizontal);
txtpassword = new JPasswordField(10);
txtpassword.setFont(font);
txtpassword.addKeyListener(this);
container.addComponent(txtpassword,5,1,3,1,container.horizontal);
btnok = new JButton("OK");
btnok.addActionListener(this);
container.addComponent(btnok,6,0,2,1,container.horizontal);
btncancel = new JButton("Cancelar");
btncancel.addActionListener(this);
container.addComponent(btncancel,6,2,2,1,container.horizontal);
return container;
}
@Override
public void keyTyped(KeyEvent e){
// Método não utilizado
}
@Override
public void keyPressed(KeyEvent e){
if (e.getKeyCode()==KeyEvent.VK_ENTER){
if (e.getSource()==txtlogin){
txtpassword.requestFocusInWindow();
} else if (e.getSource()==txtpassword){
btnok.doClick();
}
}
}
@Override
public void keyReleased(KeyEvent e) {
txtlogin.setText(txtlogin.getText().toUpperCase());
}
public Boolean getResponse() {
return response;
}
public void setResponse(Boolean response) {
this.response = response;
}
}