/ / Método de pintura en una clase, en un Jpanel, modo de diseño en Netbeans - java, swing, netbeans, applet, paint

Método de pintura en una clase, en un Jpanel, modo de diseño en Netbeans - java, swing, netbeans, applet, paint

He estado intentando programar un applet con Netbeans capaz de dibujar algunos gráficos en un jPanel, como puede ver: [ingrese la descripción de la imagen aquí] [1]

Forma de applet:

package Experimento2;

import javax.swing.*;
import java.awt.*;


public class Experimento2 extends javax.swing.JApplet {


public void init() {
try {
java.awt.EventQueue.invokeAndWait(new Runnable() {
public void run() {
initComponents();
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
}


@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jPanel1 = new javax.swing.JPanel();
//ZonaGrafica zg = new ZonaGrafica();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();

javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 466, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 259, Short.MAX_VALUE)
);

jButton1.setText("jButton1");

jButton2.setText("jButton2");

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGap(27, 27, 27)
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 175, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 54, Short.MAX_VALUE)
.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 187, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(23, 23, 23))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(85, 85, 85)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 61, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 61, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(37, 37, 37))
);

//jPanel1.add(zg,BorderLayout.CENTER);
//zg.repaint();
}// </editor-fold>


// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JPanel jPanel1;
// End of variables declaration

}

Y la clase ZonaGrafica, que está en el mismo paquete:

package Experimento2;

import javax.swing.JApplet;
import java.awt.*;

public class ZonaGrafica extends JApplet{

@Override
public void paint(Graphics g) {
super.paint(g);

g.setColor(Color.red);
g.fillOval(45, 65, 34, 54);
g.fillOval(45, 120, 34, 54);
g.fillOval(45, 180, 34, 54);
}
}

Pero, por desgracia, no pasa nada cuando ejecuto elFormulario de solicitud. En el lugar donde se supone que el método de pintura dibuja algunos óvalos rojos, no se muestra nada. No tengo ninguna pista para resolver este problema, y ​​agradecería a quien pudiera ayudarme a resolverlo.

Respuestas

3 para la respuesta № 1

No anule la pintura. Intente con paintComponent en lugar.

Tu objeto ZonaGrafica nunca es instanciado (comentado). Espero que al menos hagas eso.

Además de eso, está intentando agregar un JApplet (ZonaGrafica) a otro JApplet (Experimento2). Refactoriza ZonaGrafica y deja que se amplíe JPanel o JLabel.


1 para la respuesta № 2

El editor de formularios "podría" trabajar con cualquiera de las anulaciones paint o paintComponent, aunque la sugerencia de Heisenbug para hacerlo paintComponent sigue siendo una buena

Al leer su código, creo que simplemente presionó el botón "personalizar código", agregó algunas líneas y pensó que eso lo clasificaría. No lo hace, porque

  1. GroupLayout no funciona de esa manera. No es en absoluto amable con el someContainer.add() enfoque de la adición de la interfaz de usuario.
  2. Hablando de eso, la constante de diseño del borde no tiene sentido.
  3. Y en el momento del diseño, el código no se ejecuta,de todas formas. El editor de formularios usa un documento XML para rastrear qué componentes crear y cómo instanciar, así que no vería su lógica de pintura personalizada incluso si hiciera algo como agregar un JPanel y personalizar el constructor para que lo lea, por ejemplo. jPanel3 = new ZonaGrafica();. Lo que me lleva a:
  4. La única forma de hacer aparecer el componente.correctamente en el momento del diseño es compilarlo primero, luego agregarlo al formulario a través de la función "Agregar Java Bean" del editor. Si las subclases de su código JPanel se comportarán como JPanel en el editor de formularios, si las subclases de un JButton se comportarán como un JButton y así sucesivamente ... Esto también elimina la necesidad de hacks rápidos en la parte de "personalizar código" de el editor.

Para resumir: (1) compile su código, (2) luego agregue el ZoneGrafica utilizando la función "Agregar Java Bean". Necesitará saber su nombre de clase completo (por ejemplo, com.foo.ZonaGrafica) para eso.