Hola
Aquí les presento un problema que no puedo solucionar (mirar el codigo). Tengo dos clases que heredan de JPanel y le eh sobrecargado el método paint(), pero al poner otro componente de Swing no me lo muestra, es por eso que uso el repaint() del componente en paint() del panel. El problema es que al seleccionar una opción del JComboBox hay un parpadeo.
Necesito Ayuda con esto. Díganme cual es el error, quizá muéstrenme otra opción para mostrar gráficos en el panel
Código PHP:
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Panel extends JPanel implements ItemListener{
static final int Ancho=600, Alto=400;
Panel2 pane2;
JComboBox cboColorFondo;
JButton btnRestablecer;
public Panel(){
super();
JFrame ventana=new JFrame("Pruebita");
setBounds(0,0,Ancho,Alto);
setLayout(null);
ventana.setBounds(0, 0, Ancho, Alto);
ventana.setLayout(null);
ventana.addWindowListener( new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
pane2=new Panel2();
add(pane2);
cboColorFondo=new JComboBox();
cboColorFondo.setBounds(20,20, 120, 20);
cboColorFondo.addItem("Elije un Color");
cboColorFondo.addItem("Azul");
cboColorFondo.addItem("Rojo");
cboColorFondo.addItem("Naranja");
cboColorFondo.addItemListener(this);
add(cboColorFondo);
ventana.getContentPane().add(this);
ventana.show();
}
public void paint(Graphics g){
Graphics2D aux=(Graphics2D)g;
aux.setPaint(new GradientPaint(0,0,Color.darkGray,80,240,Color.lightGray,false));
aux.fillRect(0,0, getWidth(), getHeight());
pane2.repaint();
cboColorFondo.repaint();
}
public static void main(String[] args) {
Panel pane=new Panel();
}
public void itemStateChanged(ItemEvent e) {
int color=cboColorFondo.getSelectedIndex();
switch(color){
case 1: pane2.setC1(Color.blue);
pane2.repaint();
break;
case 2: pane2.setC1(Color.red);
pane2.repaint();
break;
case 3: pane2.setC1(Color.orange);
pane2.repaint();
break;
}
}
}
class Panel2 extends JPanel{
private Color c1;
public Panel2(){
super();
setBounds(0,0,Panel.Ancho,Panel.Alto);
setLayout(null);
c1=Color.white;
}
public void paint(Graphics g){
g.setColor(getC1());
g.fillRect(Panel.Ancho/2-50,Panel.Alto/2-50, 100, 100);
}
public Color getC1() {
return c1;
}
public void setC1(Color c1) {
this.c1 = c1;
}
}