Paintcomponent-hilfe Nötig java ^^
#1
geschrieben 26. April 2006 - 19:23
also es dreht sich um folgendes:
ich soll in einem JApplet einen Couter einbauen, der mir einfach nur die Zeit hochzählen lassen soll (die Zeit wird dann später noch benörtigt).
Jetzt hab ich das halt mit der normalen paint-Methode probiert, aber da überschreibt er einfach die vorherige Zahl und nach 3 Zahlen kann man nichts mehr erkennen ^^.
Hab nun meinen Lehrer gefragt und der hat mir nur als Antwort gegeben, dass ich eine gewisse paintComponent -Methode benutzen soll. Nur leider habe ich über diese Methode noch nie etwas gehört
Tja, da diese Methode im Rahmen eines Projektes steckt, dass wir selber lösen sollen, hat er gemeint ich soll das Internet absuchen und die JavaDocu lesen.. nun ja, da ich keinen Schimmer habe wie man die JAvaDoc richtig und sinnvoll lesen kann und im Internet nichts gefunden hab (kA sry) wollt ich mal fragen ob ihr mir vielleicht helfen könnt einen einfachen, kleinen Couter der sich einfach nur pro Sekunde um +1 erhöht, an zu fertigen.
Wäre euch sehr dankbar!
mfg
Anzeige
#2
geschrieben 26. April 2006 - 21:15
da ich nicht weiss, was genau du brauchst, versuchs mal hiermit:
Erstelle eine neue Klasse, nenne sie Count.class und kopiere das hier hinein:
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JLabel; import javax.swing.Timer; public class Count extends JLabel { /** * Aktueller Sekundenwert. */ private int currentValue; private Timer timer; /** * Konstruktor. */ public Count() { super(); this.currentValue = 0; this.timer = new Timer(1000, new ActionListener() { public void actionPerformed(ActionEvent arg0) { currentValue++; setText("Zeit:" + currentValue); repaint(); } }); } /** * Startet den Timer. * */ public void start() { this.timer.start(); } /** * Stoppt den Timer. * */ public void stop() { this.timer.stop(); } /** * Gibt den aktuellen Sekundenwert zurück. * @return Aktueller Sekundenwert. */ public int getSeconds() { return this.currentValue; } }
Füge dann deinem Applet ein Objekt vom Typ Count hinzu. Den Timer kannst du mit start() starten, mit stop() anhalten und getSeconds() gibt dir die verstrichene Zeit zurück.
#3
geschrieben 27. April 2006 - 19:17
also erstmals danke für die Bemühung, aber irgendwie dürft ich doch noch gröbere Lücken in JApplets haben -.-
import javax.swing.*; import java.awt.*; import java.applet.*; import java.awt.event.*; /** *Farb-Korb Spiel *Der Spieler soll zwei Körbe steuern und mit ihnen farbige Bälle die von oben kommen einfangen. *Ziel ist es, moeglichst nahe an einen Grauton heranzukomm, ausserdem soll die Farbdiffernz moeglichst gering sein *@author ***** *@version 0.2 */ public class FarbKorbSpiel extends JApplet implements ActionListener { private JLabel name; private JLabel schwierigkeitsgrad; private JLabel sound; private JButton start; private JButton restart; private JButton fertig; private JRadioButton easy; private JRadioButton normal; private JRadioButton hard; private JRadioButton nightmare; private JRadioButton on; private JRadioButton off; private ButtonGroup schwierigkeitsstufen; private ButtonGroup toene; private JTextField zeit; // ich nehm halt mal an, dass es sich um ein Textfeld handelt beim Counter private JSlider schieber; //Konstanten des Schiebereglers final int value = 50; final int min = 0; final int max = 100; private Korb spiel; private Count counter; private AudioClip tetris; public FarbKorbSpiel() { } public void init() { //Name des Spieles name = new JLabel("Farb-Korb Spiel",JLabel.CENTER); //Ueberschrift: Schwierigkeitsgrad schwierigkeitsgrad = new JLabel("Schwierigkeitsgrad:"); //Ueberschrift: Sound sound = new JLabel("Sound:"); //Spielbuttons start = new JButton("Start"); restart = new JButton("Restart"); fertig = new JButton("Fertig"); //Schwierigkeitsregler easy = new JRadioButton("easy"); normal = new JRadioButton("normal"); hard = new JRadioButton("hard"); nightmare = new JRadioButton("nightmare"); //Soundschalter on = new JRadioButton("on"); off = new JRadioButton("off"); zeit = new JTextField("Zeit"); // richtig so? JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); JPanel p3 = new JPanel(); //Zusammenfassung der Radiobuttons schwierigkeitsstufen = new ButtonGroup(); toene = new ButtonGroup(); schieber = new JSlider(JSlider.HORIZONTAL, min, max, value); spiel = new Korb(); //Informationen anzeigen, wenn mit der Maus daruebergefahren wird start.setToolTipText("Klicken Sie hier um ein Spiel zu beginnen"); restart.setToolTipText("Klicken Sie hier um ein Spiel abzubrechen um ein neues zu beginnen"); fertig.setToolTipText("Klicken Sie hier wenn Sie der Meinung sind das best mögliche Ergebnis erreicht zu haben"); easy.setToolTipText("Klicken Sie hier um den leichtesten Schwierigkeitsgrad auszuwählen"); normal.setToolTipText("Klicken Sie hier um den mittleren Schwierigkeitsgrad auszuwählen"); hard.setToolTipText("Klicken Sie hier um einen schweren Schwierigkeitsgrad auszuwähelen"); nightmare.setToolTipText("Klicken Sie hier um einen extrem schweren Schwierigkeitsgrad auszuwählen"); on.setToolTipText("Klicken Sie hier um den Spielton einzuschalten"); off.setToolTipText("Klicken Sie hier um den Spielton auszuschalten"); tetris = getAudioClip(getCodeBase(), "tetris.mid"); Container c=this.getContentPane(); zeit = new JTextField(15); // Layout c.setLayout(new BorderLayout()); c.add(name, BorderLayout.NORTH); c.add(p1, BorderLayout.WEST); c.add(p2, BorderLayout.EAST); c.add(p3, BorderLayout.CENTER); //Linke Seite des Layouts p1.setLayout(new GridLayout(8,1,3,3)); p1.add(schwierigkeitsgrad); p1.add(easy); p1.add(normal); p1.add(hard); p1.add(nightmare); p1.add(sound); p1.add(on); p1.add(off); //Rechte Seite des Layouts p2.setLayout(new GridLayout(4,1,3,3)); p2.add(zeit); p2.add(start); p2.add(restart); p2.add(fertig); p3.setLayout(new BorderLayout()); p3.add(spiel, BorderLayout.CENTER); p3.add(schieber, BorderLayout.SOUTH); //Radiobuttons zusammenfassen, sodass nur einer angeklickt werden kann schwierigkeitsstufen.add(easy); schwierigkeitsstufen.add(normal); schwierigkeitsstufen.add(hard); schwierigkeitsstufen.add(nightmare); toene.add(on); toene.add(off); start.addActionListener(this); restart.addActionListener(this); fertig.addActionListener(this); easy.addActionListener(this); normal.addActionListener(this); hard.addActionListener(this); nightmare.addActionListener(this); on.addActionListener(this); off.addActionListener(this); } public void actionPerformed(ActionEvent e) { if(on.isSelected()) tetris.loop(); else tetris.stop(); if(start.isSelected()) // tja, und da häng ich dann komplett -.- ... wie mach ich das, dass er halt dann in das JTextField das reinschreibt? } }
ich mein, falls du (oder sonst wer) Zeit hast (/hat) könnt ja auf dieses Layout dann das fertige Prog machen? *gg* Angabe steht ja ganz oben
falls sich da wirklich wer bereit findet, soll sich bei mir melden, dann gibts die gesamte Angabe
aber ich häng halt leider noch da: eben wie mach ich das, dass ich wenn ich auf start klicke, der dann im Zeit-Fenster die Zeit reinmacht.
Wo ich leider auch noch ein bissl hänge ist, wie mach ich das, dass wenn ich im design.class (jetzt nur zur Verdeutlichung!! (auch auf Skizze!)) den Schiebebalken nehme oder wenn ich bei Schwierigkeitsgrad einen anderen Wert einstelle, wie kann ich das in die spiel.class übernehmen?
ich hoff es kann mir wer helfen!
hab nur noch 6 Wochen zeit, aber da muss ja die Dokumentation auch noch dazu.
mfg
Dieser Beitrag wurde von bluescorp bearbeitet: 27. April 2006 - 19:20
#4
geschrieben 27. April 2006 - 20:33
Zitat
Wir helfen gerne, aber machen musst du's schon selber
Ist auch ganz simpel jetzt: Du kopierst meinen Code in eine Datei, die nennst du "Count.java".
Deinen Code änderst du dann wie folgt:
Aus
private JTextField zeit; // ich nehm halt mal an, dass es sich um ein Textfeld handelt beim Counter
wird
private Count zeit; // ich nehm halt mal an, dass es sich um ein Textfeld handelt beim Counter
und aus
zeit = new JTextField(15);
wird
zeit = new Count(); zeit.setBounds(0,0, 50, 20); //setzt position und grösse, nach bedarf anpassen
Tja, und ganz am Ende dann
if(start.isSelected()) zeit.start();
Wenn du die Zeit dann irgendwann anhalten willst reicht ein
zeit.stop();
Zu deinem anderen Problem:
Zitat
Dazu erstellst du in deiner "spiel.java" Methoden, die du bei Änderungen im Design einfach aufrufst.
#5
geschrieben 27. April 2006 - 22:05
probieren kann mans ja
zeit = new Count(); zeit.setBounds(0,0, 50, 20); //setzt position und grösse, nach bedarf anpassen
ok noch kurz: für was stehen die 4 Zahlen? x,y,usw?
weil: Compiler sagt jetzt nix mehr, aber ich seh halt nirgendwo den Counter.. hab auch shcon ein paar Zahlen durchprobiert, aber ohne Erfolg
Zu deinem anderen Problem:
Dazu erstellst du in deiner "spiel.java" Methoden, die du bei Änderungen im Design einfach aufrufst.
ok, ich denke wenn es soweit ist, werd ich mich wieder melden
Dieser Beitrag wurde von bluescorp bearbeitet: 27. April 2006 - 22:07
#6
geschrieben 27. April 2006 - 22:54
Zitat
Zitat
die Zahlen definieren ein Viereck, in dem der Zähler angezeigt wird. Die ersten zwei Zahlen bestimmen die obere linke Ecke dieses Vierecks, die anderen beiden die Breite und die Höhe.
#7
geschrieben 18. Mai 2006 - 23:37
Ich hab mal als Anhang den Quellcode von allem was wir bis jetzt haben unten angehängt, damit du/ihr das euch mal anschauen könnt was wir bis jetzt (falsch?) haben.
blabla usw .. alles geklärt ^^
So zu den Problemen:
- Der Counter läuft zwar, aber er zeigt mir immer Null an :/
- Wie oben schon erwähnt, der Zufallsgenerator spinnt komplett rum
- Wir schaffen es nicht, dass nachdem ein Ball runter geflogen ist, ein zweiter Ball nachkommt
- Ich weiß einfach nicht wie ich dem Programm sage, dass wenn ich einen Schiebebalken beweg dann in der anderen Klasse sich etwas bewegt (zB mit dem Korb hin und her fahren).. dito mit einer Eingabe bei JApplets (Highscore)
Vielleicht (Hoffentlich!) findet sich jemand der uns beiden Noob-Programmieren aus der Patsche helfen kann, es wäre wirklich sehr _sehr_ SEHR dringend!
mfg, blue&Partner
Angehängte Datei(en)
-
Projekt.rar (3,14K)
Anzahl der Downloads: 94
Dieser Beitrag wurde von bluescorp bearbeitet: 04. Juni 2006 - 15:11
#8
geschrieben 19. Mai 2006 - 12:13
Das Archiv ist beschädigt (unerwartetes Dateiende), kann zwar die Files sehen aber nicht alle entpacken.
Naja, egal.
Viel habt ihr ja nicht geschafft
Ich hab' euch jetzt mal schnell das Spiel zusammengeschis*en, es fehlt jede Menge Feinschliff.
Ihr müsst jetzt hauptsächlich noch die Buttons usw. in das rechtseitige Panel werfen.
Dazu editiert ihr die Datei "OptionenPanel.java".
Seht euch den Code an, wenn ihr was nicht versteht, dann lest erstmal bei Sun in der Java-Doku nach, wenn das auch nicht hilft dann schick' mir 'ne PM. Antwort könnte aber etwas dauern, bin momentan etwas eingespannt.
Ah so: Gesteuert wird mit A und D (Eimer 1) bzw. Pfeil-Links und Pfeil-Rechts (Eimer 2).
Falls das nicht klappt müsst ihr mit der Maus einmal in die Spielfläche klicken, da stimmt irgendwas mit dem Focus nicht.
Angehängte Datei(en)
-
index.zip (6,02K)
Anzahl der Downloads: 130
Dieser Beitrag wurde von MNG bearbeitet: 19. Mai 2006 - 17:34
#9
geschrieben 20. Mai 2006 - 08:42
Da ich jetzt selber auf Sportwoche von Sonntag bis Donnerstag bin werd ich dich eh nix fragen können allerdings doch weiter an dem Projekt arbeiten (nehme Laptop mit damit wir dran arbeiten können)
Habe mal so spaßhalber alles kompiliert, bis auf die Ball und Statuszeile kommen überall ein Haufen mit Fehlern ^^
zB wenn ich die Eimer.java kompiliere sagt er:
cannot resolve symbol symbol : class Ball
location: class spiel.Eimer
public int abstand(Ball ball)
^ ( Der ^ Pfeil gehört unter Ball)
Das zieht sich halt durch alle Files durch, das er nicht auf das andere zugreifen kann -.-
Najo, wir werden uns den Code nächste Woche ordentlich zu Gemühte führen, denke aber, dass sicherlich noch ein paar Fragen aufkommen werden
Danke für deine Antwort und das du dir die Arbeit für uns gemacht hast
Das mit dem Entpacken liegt wohl daran, dass du wahrscheinlich nicht WinRAR (wurde mit der 3.60beta_1 gepackt) hast, denn bei uns hats funktioniert.
mfg
Dieser Beitrag wurde von bluescorp bearbeitet: 20. Mai 2006 - 08:46
#10
geschrieben 20. Mai 2006 - 09:07
der Compiler-Fehler kommt daher, dass du den Classpath nicht gesetzt hast.
Beim Kompilieren einfach statt
javac Eimer.java
folgendes tippen
javac -cp "Verzeichnis" Eimer.java
wobei Verzeichnis der Pfad zum Oberverzeichnis des Programms ist (also der Ordner, in dem bei euch die index.html liegt).
#11
geschrieben 20. Mai 2006 - 13:01
C:\j2sdk1.4.2_11\bin>javac -cp C:\Projekt\mng\ Eimer.java
sagt er mir -cp gibts nicht... also halt auschreiben:
C:\j2sdk1.4.2_11\bin>javac -classpath C:\Projekt\mng\ Eimer.java
error: cannot read: Eimer.java
1 error
:/
bei TextPad-Kompilierung auch geändert
siehe hier
Baumstruktur sieht so aus: C:\Projekt\mng\ und da dann halt spiel,grafik,main-ordner inklusive index.html
ebenfalls ohne Erfolg (wie man im Hintergrund sieht)
Dieser Beitrag wurde von bluescorp bearbeitet: 20. Mai 2006 - 13:13
#12
geschrieben 20. Mai 2006 - 19:12
javac ist da eigenwillig. Entweder
C:\j2sdk1.4.2_11\bin>javac -cp "C:\Projekt\mng\" "C:\Projekt\mng\spiel\Eimer.java"
oder
C:\Projekt\mng\spiel> "C:\j2sdk1.4.2_11\bin\javac" -cp "C:\Projekt\mng\" Eimer.java
Und -cp sollte eigentlich gehen.... warum er dat ausgeschrieben haben will
#13
geschrieben 21. Mai 2006 - 05:21
javac: no source files
bzw
C:\j2sdk1.4.2_11\bin>javac -classpath "C:\Projekt\mng\" "C:\Projekt\mng\spiel\Eimer.java"
javac: no source files
hmm.. haut auch irgendwie nicht hin oO
könntest du das kompilierte einfach hier noch dran hängen mal zum Testen wie das alles aussieht (dann kann man sich mehr darunter vorstellen) .. ich hoffe, dass wir da unten wenigstens kurz ins inet können
mfg
Dieser Beitrag wurde von bluescorp bearbeitet: 21. Mai 2006 - 05:22
#14
geschrieben 21. Mai 2006 - 10:41
also, den zweiten der Befehle die ich geschrieben hatte, den hättste im bla\bla\spiel - Ordner ausführen müssen. Vielleicht stört sich javac auch daran, dass der Classpath mit 'nem "\" endet.
Nuja, egal:
Angehängte Datei(en)
-
index.zip (13,64K)
Anzahl der Downloads: 92
#15
geschrieben 03. Juni 2006 - 13:44
Knöppe tun alle was sie sollen, der Slider regelt die Geschwindigkeit, die Dropdown-Box die Anzahl der Bälle.
Was ihr noch tun müsst: Entweder an euer Layout anpassen (oder es lassen...), den Highscore anzeigen (wird in Eimer.java für jeden Korb gespeichert), feddich.
Angehängte Datei(en)
-
Code.zip (21,12K)
Anzahl der Downloads: 93