Foro sobre Java SE > Duda con Jlabel
Sigue un test que puedes ejecutar para comprobarlo: las etiquetas, como otros componentes pueden colocarse encima de elementos dibujados, sin problema, y sin hacer nada especial.
Sin ver tu código, no sé cómo lo estás haciendo.
import java.awt.Color;
import java.awt.Graphics;
public class NewJPanel extends javax.swing.JPanel {
private int squareX = 5;
private int squareY = 5;
private int squareW = 20;
private int squareH = 50;
public NewJPanel() {
initComponents();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(squareX, squareY, squareW, squareH);
g.setColor(Color.BLACK);
g.drawRect(squareX, squareY, squareW, squareH);
}
@SuppressWarnings("unchecked")
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jLabel1.setText("Etiqueta");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 164, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(226, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addContainerGap(275, Short.MAX_VALUE))
);
}
private javax.swing.JLabel jLabel1;
}
public class NewJFrame extends javax.swing.JFrame {
public NewJFrame() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new NewJPanel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
pack();
}// </editor-fold>
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new NewJFrame().setVisible(true);
}
});
}
private javax.swing.JPanel jPanel1;
}
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
public class Systema extends JFrame implements ActionListener{
JPanel contenido; //Agregar un JPane
BufferedImage log;//Agregar una imagen
JLabel jlN,jlNP,jlCP,jlPU,jlTD,jlSI,jlC,jlNC,jlCPC,jlCC,jlTC;
JTextField jtNP,jtCP,jtPU,jtTD,jtSI,jtC,jtNC,jtCPC,jtCC,jtTC;
JButton jbG,jbC;
public static void main(String[] args) {
Systema cuadro = new Systema();
cuadro.setVisible(true);
cuadro.setLocationRelativeTo(null);
}
public Systema(){
setBounds(0,0,800,600);
contenido = new JPanel();
setContentPane(contenido);
contenido.setLayout(null);
contenido.setBackground(Color.decode("#116997"));
jlN = new JLabel("Bogotá Beer Company");
jlN.setBounds(180,35,200,50);
jlN.setFont(new java.awt.Font("Arial Regular", 0, 18));
jlN.setForeground(Color.white);
jlNP = new JLabel("Nombre del Producto");
jlNP.setBounds(25,200,200,50);
jlNP.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlNP.setForeground(Color.white);
jlCP = new JLabel("Codigo del Producto");
jlCP.setBounds(215,200,200,50);
jlCP.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlCP.setForeground(Color.white);
jlPU = new JLabel("Precio por Unidad");
jlPU.setBounds(35,280,200,50);
jlPU.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlPU.setForeground(Color.white);
jlTD = new JLabel("Total con Descuento del 10%");
jlTD.setBounds(180,280,200,50);
jlTD.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlTD.setForeground(Color.white);
jlSI = new JLabel("Stock de Inventario");
jlSI.setBounds(30,360,200,50);
jlSI.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlSI.setForeground(Color.white);
jlC = new JLabel("Cantidad");
jlC.setBounds(250,360,200,50);
jlC.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlC.setForeground(Color.white);
add(jlN);
add(jlNP);
add(jlCP);
add(jlPU);
add(jlTD);
add(jlSI);
add(jlC);
jtNP = new JTextField();
jtNP.setBounds(10, 240, 160, 25);
jtCP = new JTextField();
jtCP.setBounds(200, 240, 160, 25);
jtPU = new JTextField();
jtPU.setBounds(10, 320, 160, 25);
jtTD = new JTextField();
jtTD.setBounds(200, 320, 160, 25);
jtSI = new JTextField();
jtSI.setBounds(10, 400, 160, 25);
jtC = new JTextField();
jtC.setBounds(200, 400, 160, 25);
add(jtNP);
add(jtCP);
add(jtPU);
add(jtTD);
add(jtSI);
add(jtC);
jbG = new JButton(new ImageIcon("D:/Sena/Proyectos Eclipse/Graficos/src/Guardar.png"));//boton on imagen
jbG.setRolloverIcon(new ImageIcon("D:/Sena/Proyectos Eclipse/Graficos/src/Guardar2.png"));//efecto al pasar el mouse
jbG.setBounds(10,450,80,80);
jbG.setBackground(Color.decode("#116997"));//color del fondo del boton
jbG.setBorderPainted(false);//quitar el borde al boton
jbG.addActionListener(this);
add(jbG);
//ruta de la imagen con su trycatch por si no se encuentra
try{
log = ImageIO.read(new File("D:/Sena/Proyectos Eclipse/Graficos/src/logo.png"));
}
catch(Exception e){
JOptionPane.showMessageDialog(null, "Error en la carga de la imagen");
}
}
public void paint(Graphics g){
super.paint(g);
g.setColor(Color.decode("#343537"));
g.fillOval( 30, 45, 160, 160 );
g.fillRect( 23, 100, 730, 40 );
g.fillOval( 7, 100, 40, 40 );
g.fillOval( 730, 100, 40, 40 );
g.fillRect( 380, 0, 20, 587 );
g.fillOval( 380, 573, 20, 20 );
g.setColor(Color.decode("#faecd2"));
g.fillOval( 50, 65, 120, 120 );
g.setColor(Color.black);
g.fillOval( 55, 70, 110, 110 );
g.setColor(Color.decode("#faecd2"));
g.fillOval( 60, 75, 100, 100 );
g.drawImage(log, 65,80, null);//ponemos la imagen con su coordenadas
}
@Override
public void actionPerformed(ActionEvent b) {
if(b.getSource()==jbG){
}
}
}
Este es mi codigo, la label que quiero que sea vea encima del dibujo es la que se llama
lbN, los dos codigos que pusieron la verdad no los entiendo bien :(
Estás pintando directamente sobre el JFrame; por eso no te funciona bien.
Usa un JPanel, como en el ejemplo que te puse, dentro de ese JPanel coloca todos tus componentes, y usa este método, dentro de ese JPanel,
protected void paintComponent(Graphics g)
para dibujar lo que necesites.
Bro no se si lo hice bien, pero separe el jpanel del constructor y en el conructor llame al metodo que contiene el Jpanle, todo sigue igual y si meto el metodo que me dijiste detro del metodo del Jpanel me tira error, osea este= protected void paintComponent(graphics g)... quedo algo así
public static void main(String[] args) {
Systema cuadro = new Systema();
cuadro.setVisible(true);
cuadro.setLocationRelativeTo(null);
}
//constructor
public Systema(){
initComponents();
}
//metodo que contiene el jpanel y sus componentes
private void initComponents(){
contenido = new JPanel();
setContentPane(contenido);
contenido.setLayout(null);
contenido.setBackground(Color.decode("#116997"));
setBounds(0,0,800,600);
jlN = new JLabel("Bogotá Beer Company");
jlN.setBounds(180,40,200,50);
jlN.setFont(new java.awt.Font("Arial Regular", 0, 18));
jlN.setForeground(Color.white);
jlNP = new JLabel("Nombre del Producto");
jlNP.setBounds(25,200,200,50);
jlNP.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlNP.setForeground(Color.white);
jlCP = new JLabel("Codigo del Producto");
jlCP.setBounds(215,200,200,50);
jlCP.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlCP.setForeground(Color.white);
jlPU = new JLabel("Precio por Unidad");
jlPU.setBounds(35,280,200,50);
jlPU.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlPU.setForeground(Color.white);
jlTD = new JLabel("Total con Descuento del 10%");
jlTD.setBounds(180,280,200,50);
jlTD.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlTD.setForeground(Color.white);
jlSI = new JLabel("Stock de Inventario");
jlSI.setBounds(30,360,200,50);
jlSI.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlSI.setForeground(Color.white);
jlC = new JLabel("Cantidad");
jlC.setBounds(250,360,200,50);
jlC.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlC.setForeground(Color.white);
jlNC = new JLabel("Nombre del Cliente");
jlNC.setBounds(420,200,200,50);
jlNC.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlNC.setForeground(Color.white);
jlCPC = new JLabel("Cantidad del Producto Consumido");
jlCPC.setBounds(566,200,300,50);
jlCPC.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlCPC.setForeground(Color.white);
jlCC = new JLabel("Cedula del Cliente");
jlCC.setBounds(420,280,200,50);
jlCC.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlCC.setForeground(Color.white);
jlTC = new JLabel("Total a Cancelar");
jlTC.setBounds(615,280,200,50);
jlTC.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlTC.setForeground(Color.white);
add(jlN);
add(jlNP);
add(jlCP);
add(jlPU);
add(jlTD);
add(jlSI);
add(jlC);
add(jlNC);
add(jlCPC);
add(jlCC);
add(jlTC);
jtNP = new JTextField();
jtNP.setBounds(10, 240, 160, 25);
jtCP = new JTextField();
jtCP.setBounds(200, 240, 160, 25);
jtPU = new JTextField();
jtPU.setBounds(10, 320, 160, 25);
jtTD = new JTextField();
jtTD.setBounds(200, 320, 160, 25);
jtSI = new JTextField();
jtSI.setBounds(10, 400, 160, 25);
jtC = new JTextField();
jtC.setBounds(200, 400, 160, 25);
jtNC = new JTextField();
jtNC.setBounds(400, 240, 160, 25);
jtCPC = new JTextField();
jtCPC.setBounds(590, 240, 160, 25);
jtCC = new JTextField();
jtCC.setBounds(400, 320, 160, 25);
jtTC = new JTextField();
jtTC.setBounds(590, 320, 160, 25);
add(jtNP);
add(jtCP);
add(jtPU);
add(jtTD);
add(jtSI);
add(jtC);
add(jtNC);
add(jtCPC);
add(jtCC);
add(jtTC);
jbG = new JButton(new ImageIcon("D:/Sena/Proyectos Eclipse/Graficos/src/Guardar.png"));//boton on imagen
jbG.setRolloverIcon(new ImageIcon("D:/Sena/Proyectos Eclipse/Graficos/src/Guardar2.png"));//efecto al pasar el mouse
jbG.setBounds(10,450,80,80);
jbG.setBackground(Color.decode("#116997"));//color del fondo del boton
jbG.setBorderPainted(false);//quitar el borde al boton
jbG.addActionListener(this);
jbC = new JButton(new ImageIcon("D:/Sena/Proyectos Eclipse/Graficos/src/Calcular.png"));//boton on imagen
jbC.setRolloverIcon(new ImageIcon("D:/Sena/Proyectos Eclipse/Graficos/src/Calcular2.png"));//efecto al pasar el mouse
jbC.setBounds(670,450,80,80);
jbC.setBackground(Color.decode("#116997"));//color del fondo del boton
jbC.setBorderPainted(false);//quitar el borde al boton
jbC.addActionListener(this);
add(jbG);
add(jbC);
//ruta de la imagen con su trycatch por si no se encuentra
try{
log = ImageIO.read(new File("D:/Sena/Proyectos Eclipse/Graficos/src/logo.png"));
}
catch(Exception e){
JOptionPane.showMessageDialog(null, "Error en la carga de la imagen");
}
//metodo dentro de initComponet que me da error
private void paintComponent(Graphics g){
super.paint(g);
g.setColor(Color.decode("#343537"));
g.fillOval( 30, 45, 160, 160 );
g.fillRect( 23, 100, 730, 40 );
g.fillOval( 7, 100, 40, 40 );
g.fillOval( 730, 100, 40, 40 );
g.fillRect( 380, 0, 20, 587 );
g.fillOval( 380, 573, 20, 20 );
g.setColor(Color.decode("#faecd2"));
g.fillOval( 50, 65, 120, 120 );
g.setColor(Color.black);
g.fillOval( 55, 70, 110, 110 );
g.setColor(Color.decode("#faecd2"));
g.fillOval( 60, 75, 100, 100 );
g.drawImage(log, 65,80, null);//ponemos la imagen con su coordenadas
}
}
La verdad siempre trabajaba directamente con windows builder y era mas fácil y aunque se aprende mas manual y la verdad me esta gustando mas, hay cosas novatas como estas que simplemente no me funcionan bien, demas que no entiendo muy bien lo que quieres decirme y por eso no me da :(
Si usases NetBeans, el diseño gráfico te resultaría infinitamente más sencillo y rápido.
Sigue una versión con tu código del mismo ejemplo de antes. He comentado las líneas que sé que no me pueden funcionar aquí: las relativas a las imágenes.
public class NewJFrame extends javax.swing.JFrame {
/** Creates new form NewJFrame */
public NewJFrame() {
initComponents();
}
/** This method is called from within the constructor to
initialize the form.
WARNING: Do NOT modify this code. The content of this method is
always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new NewJPanel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jPanel1.setPreferredSize(new java.awt.Dimension(400, 400));
getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
pack();
}// </editor-fold>
/**
@param args the command line arguments
*/
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
// End of variables declaration
}
public class NewJPanel extends JPanel implements ActionListener {
private JLabel jlN, jlNP, jlCP, jlPU, jlTD, jlSI, jlC, jlNC, jlCPC, jlCC, jlTC;
private JTextField jtNP, jtCP, jtPU, jtTD, jtSI, jtC, jtNC, jtCPC, jtCC, jtTC;
private JButton jbG, jbC;
private BufferedImage log;//Agregar una imagen
public NewJPanel() {
setLayout(null);
setBackground(Color.decode("#116997"));
jlN = new JLabel("Bogotá Beer Company");
jlN.setBounds(180, 35, 200, 50);
jlN.setFont(new java.awt.Font("Arial Regular", 0, 18));
jlN.setForeground(Color.white);
jlNP = new JLabel("Nombre del Producto");
jlNP.setBounds(25, 200, 200, 50);
jlNP.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlNP.setForeground(Color.white);
jlCP = new JLabel("Codigo del Producto");
jlCP.setBounds(215, 200, 200, 50);
jlCP.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlCP.setForeground(Color.white);
jlPU = new JLabel("Precio por Unidad");
jlPU.setBounds(35, 280, 200, 50);
jlPU.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlPU.setForeground(Color.white);
jlTD = new JLabel("Total con Descuento del 10%");
jlTD.setBounds(180, 280, 200, 50);
jlTD.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlTD.setForeground(Color.white);
jlSI = new JLabel("Stock de Inventario");
jlSI.setBounds(30, 360, 200, 50);
jlSI.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlSI.setForeground(Color.white);
jlC = new JLabel("Cantidad");
jlC.setBounds(250, 360, 200, 50);
jlC.setFont(new java.awt.Font("Arial Regular", 0, 14));
jlC.setForeground(Color.white);
add(jlN);
add(jlNP);
add(jlCP);
add(jlPU);
add(jlTD);
add(jlSI);
add(jlC);
jtNP = new JTextField();
jtNP.setBounds(10, 240, 160, 25);
jtCP = new JTextField();
jtCP.setBounds(200, 240, 160, 25);
jtPU = new JTextField();
jtPU.setBounds(10, 320, 160, 25);
jtTD = new JTextField();
jtTD.setBounds(200, 320, 160, 25);
jtSI = new JTextField();
jtSI.setBounds(10, 400, 160, 25);
jtC = new JTextField();
jtC.setBounds(200, 400, 160, 25);
add(jtNP);
add(jtCP);
add(jtPU);
add(jtTD);
add(jtSI);
add(jtC);
// jbG = new JButton(new ImageIcon("D:/Sena/Proyectos Eclipse/Graficos/src/Guardar.png"));//boton on imagen
// jbG.setRolloverIcon(new ImageIcon("D:/Sena/Proyectos Eclipse/Graficos/src/Guardar2.png"));//efecto al pasar el mouse
// jbG.setBounds(10, 450, 80, 80);
// jbG.setBackground(Color.decode("#116997"));//color del fondo del boton
// jbG.setBorderPainted(false);//quitar el borde al boton
// jbG.addActionListener(this);
// add(jbG);
//ruta de la imagen con su trycatch por si no se encuentra
// try {
// log = ImageIO.read(new File("D:/Sena/Proyectos Eclipse/Graficos/src/logo.png"));
// } catch (Exception e) {
// JOptionPane.showMessageDialog(null, "Error en la carga de la imagen");
// }
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == jbG) {
}
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.decode("#343537"));
g.fillOval(30, 45, 160, 160);
g.fillRect(23, 100, 730, 40);
g.fillOval(7, 100, 40, 40);
g.fillOval(730, 100, 40, 40);
g.fillRect(380, 0, 20, 587);
g.fillOval(380, 573, 20, 20);
g.setColor(Color.decode("#faecd2"));
g.fillOval(50, 65, 120, 120);
g.setColor(Color.black);
g.fillOval(55, 70, 110, 110);
g.setColor(Color.decode("#faecd2"));
g.fillOval(60, 75, 100, 100);
// g.drawImage(log, 65, 80, null);//ponemos la imagen con su coordenadas
}
}
trata de mandarla a un panel seria mas practico ya que sus propiedades te permiten realizar tu acción adecuadamente .
Panel panelPrueba = new panel();
panel.add(" etiqueta");
Buenas tardes para todos, tengo una pequeña duda referente a un JPanel el cual tengo decorado con la clase Graphis, lo que pasa es que puse varios rectángulos y luego tengo que agregar una jlabel, entonces la label que no se pone el el método paint queda debajo de los rectángulos, como puedo hacer para que quede encima de los rectángulos, a continuación dejo una imagen para que me entiendan mejor.
Pantallaso
No se subir directamente una imagen al foro, entonces la deje en un link
de antemano muchas gracias.