Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Aufgabenblatt 8
Bin gerade dabei, die Circle-Applet Aufgabe zu machen…
Blicke allerdings noch nicht so wirklich durch.
Kann mir jemand einen Tipp geben, wie das mit dieser geschützten internen Klasse funktionieren soll, in der die Kreise gezeichnet werden?
Du schreibst einfach in deine Circles-Klasse eine Klasse (wirklich innerhalb der Klasse), die private und extends JPanel ist. Das ist eigentlich schon alles. Funktioniert ähnlich wie bei diesen nested-Classes, die wir für die ActionListener verwendet haben.
Diese innere Klasse kannst du dann wie eine ganz normale Klasse behandlen (Instanzieren, …). Der Unterschied ist halt, dass du nur aus deiner Circles-Klasse auf diese Klasse zugreifen kannst.
Alle Klarheiten beseitigt?
Danke…So in der Art hatte ich das schon…
Weiss dann aber nicht wie ich die paint funktion, die in dieser internen Klasse sein soll aufrufen kann…
Gar nicht! Du musst nur in [m]public void paint(Graphics malflaeche)[/m] die Kreise auf das [m]Graphics[/m]-Objekt draufmalen. Die Methode wird dann automatisch vom System aufgerufen, wenn der Inhalt des Fensters neu gezeichnet werden muss.
Garnicht, die wird vom System automatisch aufgerufen. Im Gegenteil, du darfst sie garnicht aufrufen, weil du sowieso kein Graphics-Objekt übergeben könntest.
edit: OK. da war jemand schneller.
Danke euch…
@iceman: Genau das mit dem Übergeben des Objekts war mein Problem.
Mal sehen, ob ichs jetzt hinkriege…
Echt, das kann ich kaum glauben – wir sollen was programmiern, wo eine Klasse mal nicht public ist… Respekt!
Langsam vergeht mir die Lust…
Wenn ich die Methode “public void paint (Graphics g)” in diese interne klasse reinpacke, werden die Kreise nicht mehr gezeichnet…
Weiß vielleicht jemand spontan, wo mein Fehler liegt? :wand:
Spontan würde ich sagen, du musst dem ContentPane auch deine Klasse geben:
frame.getContentPane().add(BorderLayout.CENTER, myPanel);
So in der Art, schau halt mal in die API.
Beim Applet gehts ähnlich, das weiß ich aber nimmer auswendig, da muss du dann spätestens mal in die API schauen.
also hab mich jetzt mal an die beschreibung von euch gehalten, aber irgendwie malt er mir keine kreise, wobei ich nicht weiss wie ich die kreise auf das panel kriegen soll…
import javax.swing.*;
import java.awt.*;
import java.awt.Graphics;
public class Circles{
private class maleKreise extends JPanel {
public void paint(Graphics g){
g.drawOval(10,10,10,10);
g.fillOval(10,10,10,10);
}
}
public static void main(String[] args){
JFrame frame = new JFrame("Circles");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400,400);
JPanel panel = new JPanel(new BorderLayout());
frame.getContentPane().add(panel);
frame.setVisible(true);
}
}
Rucksack Testcase
Geht’s nur mir so, oder raucht bei euch auch der Testcase zur Rucksack.java mit dem beliebten „internal Server Error“ ab?
Auf der Konsole funktioniert mein Programm jedenfalls…
Gruß
Flo
Na du hast ja nirgendswo gesagt, dass deine Klasse bentutz werden soll
//du hast
JPanel panel = new JPanel(new BorderLayout());
frame.getContentPane().add(panel);
// versuch mal das hier
JPanel panel = new maleKreise (new BorderLayout());
frame.getContentPane().add(panel);
die antwort hätte mir eingeleuchtet doch leider mag der compiler nich:
hab jetzt mal die rucksack angefangen. mit matrix meinen die schon das, was man auf seite 38 im script sieht oder?
Ja, so soll das aussehen. Wobei da im Skript ein Fehler ist, glaub ich. Auf Folie 35 heißt es "Matrix der Größe nK" (K ist die Rucksackgröße und n die Anzahl der Elemente). Die Matrix muss aber n(K+1) Einträge haben, wenn man die Größe 0 auch berücksichtigt.
Geht bei irgendjemand von euch des testcase für den rucksack?
hm also hab nun nen grünen hintergrund und rote kreise. den schwarzen rand hab ich noch nicht hinbekommen.
Die Anzahl der Kreise kann ich selbst bestimmen oder? Zumindest hab ich das nun einmal gemacht. Größe und Position ist auch zufällig.
Mein Problem ist ich hab das alles nicht in einer Klasse in der Klasse und auch nicht mir JPanel
habe
import ....
public class Circles extends Applet {
...
}
da den ganzen code dann drin für rote kreise auf grünem hintergrund etc. Funktioniert soweit auch. Nun die Frage wie krieg ich das in eine geschützte Klasse ?
Der code der auf Seite 1 steht den hab ich mal getestet aber da funktioniert mal nix. da startet nichtmal ein Applet. Häng da nun den ganzen Tag schon dran und muss nun mal schlafen ![]()
Vielleicht hat ja jemand ne Lösung. Hab schon diverse Java Bücher durch bezgl. Applets. Da war auch nie ne Klasse in ner Klasse. :moody:
Den Sinn von dem JPanel ist vermutlich nur, dass wir im Standalone-Fall gar keine direkten AWT-Sachen mehr zumindest am Bildschirm haben, oder so…
Ich bin mir nicht sicher, ob ich da die richtige Lösung erwischt hab, im Browser streikt mir das Ganze nämlich immer noch… :-/
Theoretisch schaut’s aber so aus, dass du in der Applet-Klasse einfach noch eine [m]protected class XYZ extends JPanel { … }[/m] einfügst und die dann wahlweise auf dem Applet, oder von der [m]main[/m] aus in ein JFrame einbaust (wie mit dem JButton/JList damals auch).
In der protected-Klasse kannst du dann die Methode zum Malen überschreiben (bei Swing am besten paintComponent), und dann sollte es gehen…
Aja, die Anzahl der Kreise bekommst du über Parameter von außen, die Kreise kann man mit [m]drawOval[/m] zeichnen.
Wer hat eigentlich noch alles die Probleme beim Anzeigen im Browser? Scheint ja bei einigen Leuten sogar offizielle Demo-Programme von Sun zu betreffen, und ich bin irgendwie auch zu blöd…
Hab grade nochmal versucht meinen Rucksack abzugeben und bei mir gehts heute genausowenig wie gestern. Die Testcases sind echt nervig!