Netbeans: TabbedPane, ScrollPane und Graphics

Valgard

Mitglied
Hallo,
ich habe folgendes Problem und hoffe, dass mir jemand weiterhelfen kann:
Ich habe mit Netbeans ein Frame erstellt, diesem habe ich ein TabbedPane hinzugefügt. Dem TabbedPane füge ich dann ein normales JPanel hinzu, welches ein ScrollPane enthält. Diesem ScrollPane wiederrum füge ich die meine eigene Klasse PaintComponent hinzu, welche von JComponent erbt und mit welcher ich Graphics-Objekte zeichne. Wenn das zu kompliziert war, hier nochmal die allgemeine Auflistung:

JFrame->TabbedPane->JPanel
JPanel-> ScrollPane->PaintComponent

Das Problem, dass ich hierbei habe, ist, dass die Graphics-Objekte bzw. die gesamte PaintComponent nicht angezeigt werden.
Dass es daran liegt, dass die Graphics-Objekte nicht richtig erstellt werden, ist eigentlich ausgeschlossen, da ich wie mehrfach hier im Forum geschrieben die paintComponent(Graphics g) meiner eigenen Klasse überschreibe. Außerdem funktioniert das Zeichnen auch, wenn ich die PaintComponent-Klasse einem normalen JPanel hinzufüge.

Hier der Code des JPanel:
Java:
public class NewJPanel extends javax.swing.JPanel {
   
  private HMPaintComponent paintComponentOverview;

  /** Creates new form NewJPanel */
  public NewJPanel() {
  initComponents();

  paintComponentOverview = new HMPaintComponent(HMController.initShapesOverview());
  paintComponentOverview.setPreferredSize(new Dimension(400,400));
  paintComponentOverview.setVisible(true);
  paintComponentOverview.setBackground(Color.red);
  jScrollPane1.add(paintComponentOverview);
  }
  // Variables declaration - do not modify
  private javax.swing.JScrollPane jScrollPane1;
  // End of variables declaration
}

Und wegen der Vollständigkeit noch die eigene Klasse PaintComponent, mit der ich die Graphics-Objekte zeichne:
Java:
public class HMPaintComponent extends JComponent {

  private GeoShape[] storagerack;

  public HMPaintComponent(GeoShape[] hmOverviewGeoShape) {
  super();
  HeatMapController.geoShapePosition(this.getWidth(),this.getHeight());
  storagerack = hmOverviewGeoShape;
 
  }

  @Override
  protected void paintComponent(Graphics g) {
   
  super.paintComponent(g);
  Graphics2D g2d = (Graphics2D) g;
  
  for (GeoShape shape: storagerack) {
      if (shape.getShape() != null && shape.getColor() != null) {   
          g2d.setColor(shape.getColor());
          g2d.fill(shape.getShape());
          g2d.setColor(Color.BLACK);
          g2d.draw(shape.getShape());   
          }
      }
  }
  }
}

Ich hoffe, es weiß jemand Rat, da ich wirklich keine Ahnung habe, warum es nicht funktioniert.
 
Du kannst ein etwas in eine jscrollPane nicht einfach adden. Du musst den jComponent auch in den Viewport der scrollpane setzen.

Aber das ist der Netbenas Gui Builder zieh deine Klasse eijfach via Drag and Drop in den Scene Builder Netbenas unterstützt das.

Gruß Simon
 
Danke für die Antwort 🙂
Aber was genau meinst du mit "Scene-Builder"? Ist damit der normale Gui-Designer gemeint oder etwas anderes (Ich benutze Version 7.0.1)
Denn so wie ich das verstanden habe, soll ich meine eigene PaintComponente über den Gui-Designer in die Anwendung ziehen.
Damit das klappt, fordert mich Netbeans auf, eine eigene Bean-Info meiner Klasse zu erstellen. Habe ich über das Menu gemacht, aber es will trotzdem nicht funktonieren.
 
Ich Nutze Netbeans 8 und dort klappt es wunderbar. Ja der Gui Designer ist gemeint. Deine Klasse muss einen Konstruktor bwsitzen der ohne Parameter aufgerufen werden kann oder garkeine Konstruktor sonst versteht Netbeans die Klasse nicht.

Gruß Simon
 
Vielen, vielen Dank, du glaubst garnicht wie sehr du mir geholfen hast 🙂
Es hat tatsächlich ganz einfach geklappt, nachdem ich die neue Netbeans-Version heruntergeladen hatte^^
 

Zurück
Oben