Pius Hermit
Erfahrenes Mitglied
Hallo Leute,
muß nun bezüglich eines anderen Themas:http://www.tutorials.de/forum/java/296642-hilfe-performance-problem.html
noch Performance-Tests durchführen, und bekomme meine Leinwand (JComponent) nicht zum Scrollen (NICHT JScrollPane, SONDERN Animation). Ohne Schleife werden die Operationen sauber angezeigt, mit der Schleife - trotz repaint() - nur das Endergebnis
Hier ein Code-Auszug:
Actionlistener
Klasse Steuerung
Klasse Leinwand
Bin völlig ratlos, und dankbar für jeden Tipp.
Anmerkung des Autors: Meine Blütezeit hatte ich eigentlich auf dem 286´er und lehne - obwohl ich Java sehr mag, das Graphics-Konzept absolut ab.
Gruß,
Ulrich
muß nun bezüglich eines anderen Themas:http://www.tutorials.de/forum/java/296642-hilfe-performance-problem.html
noch Performance-Tests durchführen, und bekomme meine Leinwand (JComponent) nicht zum Scrollen (NICHT JScrollPane, SONDERN Animation). Ohne Schleife werden die Operationen sauber angezeigt, mit der Schleife - trotz repaint() - nur das Endergebnis

Hier ein Code-Auszug:
Actionlistener
Code:
package dateien;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import leinwand.Steuerung;
@SuppressWarnings("serial")
public final class horizontalScrollen implements ActionListener {
private Steuerung s = null;
public void actionPerformed(ActionEvent e) {
if (!s.isKugelDarstellung()) {
int i = 0;
while (i<20 && !s.isEnde()) {
s.scrollHorizontal();
s.zeigeFlaeche();
s.getLeinwand().repaint();
i++;
try {
Thread.sleep(20);
}
catch(InterruptedException ex){}
}
s.resetEnde();
}
}
public horizontalScrollen(Steuerung s){
this.s = s;
}
}
Klasse Steuerung
Code:
public void scrollHorizontal() {
int w = i.getWidth();
int h = i.getHeight();
int[] iData = new int[(w-1)*h];
int[] iDat = new int[h];
i.getRGB(0, 0 , w-1, h, iData, 0, w-1);
i.getRGB(w-1, 0, 1, h, iDat, 0, 1);
i.setRGB(0, 0, 1, h, iDat, 0, 1);
i.setRGB(1, 0 , w-1, h, iData, 0, w-1);
}
public void zeigeFlaeche() {
if (this.i!=null) {
this.lw.setPreferredSize(
new Dimension(this.i.getWidth(),
this.i.getHeight()));
this.lw.setSize(
new Dimension(this.i.getWidth(),
this.i.getHeight()));
this.setBildVorhanden(true);
setKugelDarstellung(false);
lw.setLeinwand(i);
}
}
Klasse Leinwand
Code:
package leinwand;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.swing.JComponent;
@SuppressWarnings("serial")
public class Leinwand extends JComponent {
@SuppressWarnings("unused")
private Steuerung s = null;
private BufferedImage i = null;
public void setLeinwand(BufferedImage i) {
this.i = i;
}
public Leinwand(Steuerung s) {
this.s = s;
this.setVisible(true);
}
public void paintComponent(Graphics g) {
// super.paintComponent(g);
if (this.i != null) {
int x = (int)((this.getWidth() - i.getWidth())/2);
int y = (int)((this.getHeight() - i.getHeight())/2);
g.drawImage(i, x, y, this);
}
}
}
Bin völlig ratlos, und dankbar für jeden Tipp.
Anmerkung des Autors: Meine Blütezeit hatte ich eigentlich auf dem 286´er und lehne - obwohl ich Java sehr mag, das Graphics-Konzept absolut ab.
Gruß,
Ulrich