 |
10.08.2005, 11:22
| Nach oben
#1 | | Erfahrener Benutzer
Registriert seit: 02.02.2005
Beiträge: 539
| repaint verhindern
Ich habe ein Applet in Form eines Fernseher. Rechts, Links, Oben und Unten ein JPanel (jeweils eine Klasse, die von JPanel erbt und mit der paintComponent()-Methode und Graphics2D gezeichnet wird) für den Rahmen und in der Mitte der Inhalt. Dieser Fernseher geht über die größe des Bildschirms, sodass man für den unteren Teil im Browser nach unten scrollen muss. Beim runterscrollen flackert das Applet. Dieses möchte ich verhindern. Habe mir gedacht, dass ich den JPanels ein setIgnoreRepaint mitgebe, hilft aber auch nichts.
Und zwar immer, wenn über oder unter dem Applet kein Freiraum ist, also wenn das Applet sich über mehr als das komplette vertikale Sichtfeld des Users zieht
|
| |
10.08.2005, 17:34
| Nach oben
#2 | | Erfahrener Benutzer
Registriert seit: 02.02.2005
Beiträge: 539
|
Hab gehört, dass Double Buffering das Problem behebt. Nur will das bei mir nicht so ganz funktionieren. Kann mir jemand ein Beispiel evtl. dazu posten? Thx
|
| |
11.08.2005, 11:01
| Nach oben
#4 | | Erfahrener Benutzer
Registriert seit: 02.02.2005
Beiträge: 539
|
Danke für den Link. Aber anscheinend bin ich zu blöd das anzuwenden. Hab mich gestern scho an nem Tutorial für double Buffering versucht und bin ebenfalls kläglich gescheitert. Selbes bild wie gestern: Entweder NullPointerException bei den getGraphics() vom offscreenImage, oder es läd sich zu tode, oder es wird einfach ein Viereckiger kasten angezeigt. :confused: :mad: . Wenn jemand lust hat, könnte er sich ja mal daran versuchen. Währe sehr net. Mein code ist auch net lang: PHP-Code: import java.awt.*; import javax.swing.*; import javax.swing.event.*; import java.awt.event.*; import java.net.*; import java.io.*; public class Fenster extends JApplet implements HyperlinkListener { static JEditorPane edit = new JEditorPane(); LeftPane left = new LeftPane(); RightPane right = new RightPane(); JPanel mainPane = new JPanel(); JScrollPane scroll = new JScrollPane(edit); public void init() { edit.setEditable(false); edit.addHyperlinkListener(this); left.setPreferredSize(new Dimension(25, 610)); right.setPreferredSize(new Dimension(25, 610)); mainPane.setLayout(new BorderLayout()); mainPane.add(left, BorderLayout.WEST); mainPane.add(right, BorderLayout.EAST); mainPane.add(scroll); try { edit.setPage(new URL(getCodeBase(), "go_Home.html")); edit.getPage(); } catch (IOException e) { System.out.println(e); } setContentPane(mainPane); } public void hyperlinkUpdate(HyperlinkEvent hyl) { if (hyl.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { try { if (hyl.getDescription().startsWith("http://")) { getAppletContext().showDocument(new URL(hyl.getDescription()), "_blank"); } else { edit.setPage(new URL(getCodeBase(), hyl.getDescription())); edit.getPage(); } } catch(IOException e) { System.out.println(e); } } } } class LeftPane extends JPanel { public void paintComponent(Graphics comp) { Graphics2D comp2D = (Graphics2D)comp; comp2D.setColor(new Color(120, 0, 0)); comp2D.fillRect(0, 0, 25, 610); comp2D.setColor(Color.black); comp2D.fillRoundRect(0, 0, 50, 610, 610, 610); } } class RightPane extends JPanel { public void paintComponent(Graphics comp) { Graphics2D comp2D = (Graphics2D)comp; comp2D.setColor(new Color(120, 0, 0)); comp2D.fillRect(0, 0, 25, 610); comp2D.setColor(Color.black); comp2D.fillRoundRect(-25, 0, 50, 610, 610, 610); } }
|
| |
11.08.2005, 15:36
| Nach oben
#5 | | Erfahrener Benutzer
Registriert seit: 02.02.2005
Beiträge: 539
|
Hab jetzt noch n Tut gefunden und das Ding nach gebaut. LeftPane schaut jetzt so aus: PHP-Code: class LeftPane extends JPanel { Image gebuffered; Graphics drawBuffer; public LeftPane() { gebuffered = createImage(25, 610); drawBuffer = gebuffered.getGraphics(); } public void paint(Graphics comp) { drawBuffer.setColor(new Color(120, 0, 0)); drawBuffer.fillRect(0, 0, 25, 610); drawBuffer.setColor(Color.black); drawBuffer.fillRoundRect(0, 0, 50, 610, 610, 610); comp.drawImage(gebuffered, 0, 0, this); } public void update(Graphics g) { paint(g); } }
Ich denke, der müsste so auch funktionieren. Nur leider bekomme ich bei
drawBuffer = gebuffered.getGraphics();
eine NullpointerException Zitat:
Java Plug-in 1.5.0_02
Verwendung der JRE-Version 1.5.0_02 Java HotSpot(TM) Client VM
Home-Verzeichnis des Benutzers = C:\Dokumente und Einstellungen\stkiese
----------------------------------------------------
c: Konsolenfenster schließen
f: Objekte in Finalisierungswarteschlange finalisieren
g: Speicherbereinigung
h: Diese Hilfemeldung anzeigen
l: ClassLoader-Liste ausgeben
m: Speicherbelegung anzeigen
o: Protokollierung auslösen
p: Proxy-Konfiguration neu laden
q: Konsole ausblenden
r: Richtlinien-Konfiguration neu laden
s: System- und Bereitstellungseigenschaften ausgeben
t: Threadliste ausgeben
v: Thread-Stack ausgeben
x: ClassLoader-Cache löschen
0-5: Trace-Stufe auf <n> setzen
----------------------------------------------------
java.lang.NullPointerException
at LeftPane.callStart(Fenster.java:64)
at Fenster.init(Fenster.java:1
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
| Weiß jemand woran das liegt?
|
| | |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | | | | Themen-Optionen | Thema durchsuchen | | | |
Forumregeln
| Es ist dir nicht erlaubt, neue Themen zu verfassen. Es ist dir nicht erlaubt, auf Beiträge zu antworten. Es ist dir nicht erlaubt, Anhänge hochzuladen. Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten. HTML-Code ist aus. | | | Alle Zeitangaben in WEZ +1. Es ist jetzt 01:20 Uhr.
|