Anuncios Google

Ayuda Frame con Fondo y Botones Java

Lo pongo en este apartado, no se si estará bien.

Muy buenas a todos,
Hace unos dias intente crear un JFrame con fondo personalizado que contuviese Un par de botones en su interior.
Cree el JFrame y el codigo del botón, pero en vez de aparecerme en el mismo JFrame, me aparece una pequeña ventana solo con ese botón y uno con el fondo, aparte.

Alguien podría pasarme el codigo de un Frame con fondo y un par de botones centrados porfabor? (Si no es mucho pedir)
 
Muchisimas gracias por anticipado! 


  • ABEL


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de joserc87

Tiene que ser con código?

Hay IDEs que te ayudan a la hora de crear la interfaz (como Netbeans). En este caso no es muy complicado, pero cuando tengas 3 o 4 ventanas, con botones, decenas de labels, etc. te va a costar.

Si no me equivoco tu quieres algo así:

import java.awt.*;
import javax.swing.*;
 
 
public class VentanaColor {
  public static void main(String[] args) {
      try {
	  UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      }catch (Exception e) {
	  e.printStackTrace();
      }
 
      JFrame f = new JFrame("Ventana con color verde y dos botones");
      f.setSize(400, 150);
      Container content = f.getContentPane();
      content.setBackground(Color.green);
      content.setLayout(new FlowLayout());
      content.add(new JButton("Un boton"));
      content.add(new JButton("Otro boton"));
      f.setDefaultCloseOperation (WindowConstants.EXIT_ON_CLOSE);
      f.setVisible(true);
  }
}


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de abelreyes

Perdoname por no

Perdoname por no especificar.
Cuando decía "con fondo" me refería a una imagen de fondo.
De momento me quedo con tu codigo, a ver si pudieras pasarme lo que te pido.

(Yo tambien uso NetBeans)
Gracias!

 


  • ABEL

Imagen de joserc87

Eso es algo más complicado.

Si solo quisieses mostrar la imagen, sin botones, sería bastante simple. Si quieres hacer las dos cosas, tienes que crear un JPanel que reimplemente el método drawComponent para dibujar la imagen, y añadirlo al JFrame.

Como es más rápido y facil buscarlo que hacerlo, me he metido en google y he encontrado este código de ejemplo:

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Insets;
 
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.LineBorder;
/*
 * Created on Mar 24, 2008
 *
 */
 
/**
 * @author Anand
 */
 
public class JBackGroundImageDemo extends JFrame
{
    Container con = null;
    JPanel panelBgImg;
 
    public JBackGroundImageDemo()
    {
        setTitle("JBackGroundImageDemo");
        con = getContentPane();
 
        con.setLayout(null);
        ImageIcon imh = new ImageIcon("image.jpg");
        setSize(imh.getIconWidth(), imh.getIconHeight());
 
        panelBgImg = new JPanel()
        {
            public void paintComponent(Graphics g)
            {
                Image img = new ImageIcon("image.jpg").getImage();
                Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
                setPreferredSize(size);
                setMinimumSize(size);
                setMaximumSize(size);
                setSize(size);
                setLayout(null);
                g.drawImage(img, 0, 0, null);
            }
        };
 
        con.add(panelBgImg);
        panelBgImg.setBounds(0, 0, imh.getIconWidth(), imh.getIconHeight());
 
        GridBagLayout layout = new GridBagLayout();
 
        JPanel panelContent = new JPanel(layout);
        GridBagConstraints gc = new GridBagConstraints();
 
        gc.insets = new Insets(3, 3, 3, 3);
        gc.gridx = 1;
        gc.gridy = 1;
 
        JLabel label = new JLabel("UserName: ", JLabel.LEFT);                       
        panelContent.add(label, gc);
 
        gc.gridx = 2;
        gc.gridy = 1;
 
        JTextField txtName = new JTextField(10);
        panelContent.add(txtName, gc);
 
        gc.insets = new Insets(3, 3, 3, 3);
        gc.gridx = 1;
        gc.gridy = 2;
        gc.gridwidth = 2;
 
        JButton btn = new JButton("Login");
        panelContent.add(btn, gc);
        panelContent.setBackground(Color.GRAY);
        panelContent.setBorder(new LineBorder(Color.WHITE));
 
        panelBgImg.add(panelContent);
 
        panelBgImg.setLayout(new FlowLayout(FlowLayout.CENTER, 150, 200));
 
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
 
    public static void main(String[] args)
    {
        new JBackGroundImageDemo().setVisible(true);
    }
} 

Sacado de aquí. Como digo, no es mío, pero lo he probado y funciona. Miralo, entiéndelo, y adáptalo o coge lo que te resulte útil.

PD: Para probarlo, asegúrate de tener un archivo image.jpg en la carpeta ;)


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de abelreyes

Muchas gracias, ahora mismo

Muchas gracias, ahora mismo lo pruevo.
Encontre varios codigos, el problema es que estoy desarollando un juego, y requeria crear 2 Clases distintas, con mucho lio.

Gracias! :) 


  • ABEL

Imagen de Loopin

Si no estás muy habituado con

Si no estás muy habituado con la interfaz gráfica en Java, te recomiendo para empezar, usar un FlowLayout para el posicionamiento de los Components en tu pantalla, es decir que los botones, cuadros de texto etc... se vayan organizando de izquierda a derecha y de arriba a abajo conforme los vas agregando al Panel. Si quieres estructurar visualmente sin complicarte demasiado con el código, te recomiendo que subdividas la pantalla en subpaneles, que cada cual contenga los elementos que necesite para cumplir su funcion, por ejemplo, una botonera, el "lienzo" donde se va a imprimir o desarrollar la parte gráfica del juego, un menu, etc...

Todos los componentes se pueden pintar, es decir tienen un Método paint(Graphics g), o como comenta joserc, un paintComponent(Graphics g). Te recomiendo que si el pintado del componente (en tu caso el panel) es dinámico, es decir, que se va a refrescar llegado un determinado momento o ante algún evento, uses el método paint(Graphics), ya que es el método al cual llama la máquina virtual al hacer un repaint(). 

Suerte!


Imagen de abelreyes

La verdad, es mucho mas

La verdad, es mucho mas comodo trabajar con un IDE, pero te genera muchas partes de codigo que prefiero personalizar-crear yo mismo, ya que para el videojuego cambio toda la estica de los botones y demás.
Ademas, yo hice un curso de java, pero estava orientado a Programas, y no tanto a la parte grafica, asi que me las apaño como puedo.

Muchas gracias igualmente !:) 


  • ABEL

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.