Foro sobre Java SE > llevo dias intentando agregar un boton...
No sé por qué motivo, pero creas el boton1 dos veces: primero lo añades al contenedor, y luego al JPanel.
Por otra parte, sobreescribes el método paint del JPanel, cuando deberías sobreescribir el paintComponent.
cierto, eso fue una de las ultimas pruebas que trate de hacer y se me paso borrarlo, he probado también quitando el repaint y el boton no parpadea (no se esta redibujando nada claro), pero no aparece cuando abro la ventana (solo si paso el raton por encima) y si la reedimensiono desaparece hasta que vuelvo a pasar el raton por encima
Que hace un bucle infinito (while (true)) dentro del constructor de la clase Ventana!!?? Eso no permite que el objeto se termine de crear y atasca el hilo de ejecucion dentro del bucle...
de todas formas el objeto se crea en el panel no entiendo porque influye, y ya probe a poner el repaint dentro del panel sin ese bucle y el boton parpadea igual :(
muy buenas, una vez mas recuro a vuestra experiencia porque llevo dias atascado con esto, simplemente quiero añadir un botón,pero por alguna razón no funciona, he probado todo lo que se me ocurrió, pero el botón siempre hace una cosa muy rara, para empezar nunca se muestra cuando abro la aplicación, solo si paso el ratón por encima, al pasar el raton aparece e inmediatamente después vuelve a desaparecer, aunque el botón esté en donde lo puse se crea como otra copia del boton con la misma medida pero en la posición 0,0. lo raro es que probe a crear otro panel solo para el botón pero aunque el botón está en otro panel también se crea esa "copia fantasma" del botón en la posición 0,0. llevo literalmente muchas horas intentando poner ese botón, no tengo ni la mas mínima idea de que estoy haciendo mal pero hace que esté totalmente atascado en este proyecto, nunca antes he tenido ningún problema con ningún botón, ni encuentro ninguna solución en internet y ya no sé que mas intentar, he quitado y puesto las imagenes, quitado y puesto el repaint, situado el botón es diferentes lugares, tratado de poner y quitar layouts pero nada funciona. os pongo el código de la clase del jframe y la del jpanel
JFRAME:
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
/**
*
* @author Paulo
*/
public class Ventana extends JFrame implements MouseListener,KeyListener {
public int n1,n2;
Panel panel;
JButton boton1;
int pulso1;
Botones botones;
public Ventana() throws InterruptedException{
int anchura=407;
int altura=500;
this.setBounds(0,0,anchura,altura);
this.setTitle("ventana");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
//objetos creados
panel=new Panel();
//añadidos
this.addKeyListener(this);
this.addMouseListener(this);
this.add(panel);
this.setVisible(true);
while (true){
panel.repaint();
Thread.sleep(5);
}
}
//--------------------------------------------------------------------------------------------------------------------------------------MouseListener
@Override
public void mouseClicked(MouseEvent e) {
if((e.getModifiers() & InputEvent.BUTTON1_MASK) == InputEvent.BUTTON1_MASK){
panel.rectangular(e.getX()-8, e.getY()-30);
panel.posiciony=e.getY()-30;
panel.posicionx=e.getX()-8;
panel.contador=panel.contador+e.getClickCount();
}
if((e.getModifiers() & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK){
panel.triangular(e.getX()-8, e.getY()-30);
}
}
@Override
public void mousePressed(MouseEvent e) {
// throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void mouseReleased(MouseEvent e) {
// throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void mouseEntered(MouseEvent e) {
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void mouseExited(MouseEvent e) {
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
JPANEL:
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import static java.lang.Math.sqrt;
import java.net.URL;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import java.util.Iterator;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
/**
*
* @author Paulo
*/
public class Panel extends JPanel{
public int posicionx;
public int posiciony;
public int posicionxd;
int posicionyd;
int n1,n2,n3,n4,n5,n6;
public Pelota pelota;
public Rectangulos rectangulo;
public Triangulo tringli;
public ArrayList<Triangulo> trian;
public ArrayList<Rectangulos> rectan;
int contador,sumaclick;
int choque;
int c1;
int colix,coliy;
Image imagen,imagentrian;
URL url,urltrian;
Runnable doHelloWorld;
JButton boton1;
int pulso1;
Container contenedor;
public Panel()throws InterruptedException{
Container contenedor=new Container();
boton1=new JButton("boton1");
url=this.getClass().getResource("/imagenes/espacio.jpg");
trian=new ArrayList<Triangulo>();
rectan=new ArrayList<Rectangulos>();
boton1=new JButton();
contenedor.setLayout(new FlowLayout());
contenedor.add(boton1);
ImageIcon icono=new ImageIcon("/imagenes/boton-1.jpg");
boton1.setIcon(icono);
this.add(boton1);
setSize(50,50);
pelota=new Pelota();
imagen=new ImageIcon(url).getImage();
}
//creando objeto del array--------------------------------------------------------------------------------------------------------------------------Arrays
public void triangular(int posicionxd,int posicionyd){
trian.add(new Triangulo(posicionxd,posicionyd));
}
public void rectangular(int posicionx,int posiciony){
rectan.add(new Rectangulos(posicionx,posiciony));
}
//------------------------------------------------------------------------------------------------------------------------------------------------------Graphics g
//pinturas
public void paint (Graphics g) {
g.drawImage(this.imagen,0,0,this.getWidth(),this.getHeight(),this);
double d = pelota.xpelota; double c=pelota.ypelota;
int i = (int) d; int b = (int) c;
g.drawImage(pelota.imagen,i, b,30,30,this) ;
pelota.moveball(this.getWidth(),this.getHeight());
}}