Foros del Web » Programación para mayores de 30 ;) » Java »

boton no para de parpadear

Estas en el tema de boton no para de parpadear en el foro de Java en Foros del Web. buenas, tengo un problema que no estoy sabiendo resolver, tengo un boton en un jpanel , tengo un repaint para todo el jpanel, he agregado ...
  #1 (permalink)  
Antiguo 20/12/2014, 11:27
dr4
 
Fecha de Ingreso: noviembre-2014
Mensajes: 28
Antigüedad: 9 años, 5 meses
Puntos: 0
boton no para de parpadear

buenas, tengo un problema que no estoy sabiendo resolver, tengo un boton en un jpanel , tengo un repaint para todo el jpanel, he agregado un botón pero solo se deja ver muy de vez en cuando, da igual donde lo ponga,probé a ponerlo después de todas las imagenes,antes,en medio abrirlo desde el jframe y nada(supongo que la imagen de fondo se esta repintando por encima una y otra vez,o se está repintando el botón) hay alguna manera de arreglar eso?

vale,si paro el repaint efectivamente el boton queda arriba, pero en cuanto se pone la imagen el boton se oculta debajo de ella,hasta que paso el raton por encima y vuelve a subir, pero sigue ocurriendo aunque ponga el botón después de la imagen, como puedo solucionarlo?

Última edición por dr4; 20/12/2014 a las 12:12
  #2 (permalink)  
Antiguo 22/12/2014, 20:41
Avatar de JhenerGarcia  
Fecha de Ingreso: agosto-2011
Mensajes: 15
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: boton no para de parpadear

Hola, supongo que ese botón que mencionas lo agregas en tiempo de ejecución. De cualquier manera. Si quiere refrescar el pintado del panel, prueba con el método updateUI del panel. Te dejo la documentación oficial:

[URL="https://docs.oracle.com/javase/7/docs/api/javax/swing/JPanel.html#updateUI()"]https://docs.oracle.com/javase/7/docs/api/javax/swing/JPanel.html#updateUI()[/URL]
  #3 (permalink)  
Antiguo 25/12/2014, 03:20
dr4
 
Fecha de Ingreso: noviembre-2014
Mensajes: 28
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: boton no para de parpadear

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());

}}

Última edición por dr4; 25/12/2014 a las 06:43

Etiquetas: boton, jframe
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:39.