muy buenas, he tratado de poner el update y no ocurrio nada nuevo, 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 pero solo es una imagen sin ninguna funciona (si pulso el boton parpadeante esta imagen también es pulsada). 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 (si quito el repaint el boton no aparece al abrir la ventana, pero si le paso el raton aparece y se queda ahí hasta que reedimensiono la ventana), 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
esta es la imagen del boton fantasma que se crea cuando paso el raton por encima del boton (que esta en el centro de la ventana,pero no he sido capaz de sacarlo porque al pasarle el raton por encima parpadea muy rapido y desaparece) http://s2.subirimagenes.com/otros/previo/thump_9215560boton-insue.jpg
JFRAME:
Código:
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 {
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.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:
Código:
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{
boton1=new JButton("boton1");
url=this.getClass().getResource("/imagenes/espacio.jpg");
trian=new ArrayList<Triangulo>();
rectan=new ArrayList<Rectangulos>();
boton1=new JButton();
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());
}}