Hi!
Ich habe jetzt von der paint() auf update() umgestellt, aber jetzt zeichnet er mir das Programm am start und bei einem resize nicht mehr?!
Was kann man da machen?
Code ist hier:
Ich glaub zwar, dass nur die update() wichtig ist, aber ich schick mal lieber das andere mit
Also woran liegts?
ToMiNaToR
Edit: nicht nur bei start und resize, sondern auch bei überlappung von anderen fenstern....
Ich habe jetzt von der paint() auf update() umgestellt, aber jetzt zeichnet er mir das Programm am start und bei einem resize nicht mehr?!
Was kann man da machen?
Code ist hier:
Code:
public void update(Graphics g) {
sx = getWidth();
sy = getHeight();
buffer = createImage(sx, sy); //
offscreen = buffer.getGraphics();
for (int i = 0; i <= (sy / 20); i++) {
listDrawLine(i + firstentry, i, sx, sy, offscreen);
}
g.drawImage(buffer, 0, 0, this);
}
public void listDrawLine(int iohne, int imit, int sx, int sy, Graphics gglobe) {
if (iohne == 0 || iohne % 2 == 0) {
gglobe.setColor(new Color(0, 0, 0));
} else {
gglobe.setColor(new Color(41, 41, 41));
}
gglobe.fillRect(0, imit * 20, sx, 20 + (imit * 20));
gglobe.setColor(new Color(255, 255, 255));
String[] temps = new String[5];
temps[0] = bib.getEntry(iohne).getTitel();
temps[1] = bib.getEntry(iohne).getDauer();
temps[2] = bib.getEntry(iohne).getInterpret();
temps[3] = bib.getEntry(iohne).getMusikrichtung();
temps[4] = bib.getEntry(iohne).getAlbum();
boolean tempm = bib.getEntry(iohne).getMarking();
boolean tempp = bib.getEntry(iohne).getPlaying();
for (int i = 0; i < temps.length - 1; i++) {
int tempwidth;
tempwidth = fmnorm.stringWidth(temps[i]);
if (i == 0 || i == temps.length - 1) {
if (i == 0) {
if (tempwidth + 2 * distance > lines[i]) {
while (tempwidth + 2 * distance > lines[i]) {
temps[i] = temps[i].substring(0,
temps[i].length() - 1);
tempwidth = stringWidth(tempm, tempp, temps[i]);
}
temps[i] = temps[i] + "...";
}
}
if (i == temps.length - 1) {
if (tempwidth + 2 * distance > sx - lines[i]) {
while (tempwidth + 2 * distance > sx - lines[i]) {
temps[i] = temps[i].substring(0,
temps[i].length() - 1);
tempwidth = stringWidth(tempm, tempp, temps[i]);
}
temps[i] = temps[i] + "...";
}
}
} else {
if (tempwidth + 2 * distance > lines[i] - lines[i - 1]) {
while (tempwidth + 2 * distance > lines[i] - lines[i - 1]) {
temps[i] = temps[i].substring(0, temps[i].length() - 1);
tempwidth = stringWidth(tempm, tempp, temps[i]);
}
temps[i] = temps[i] + "...";
}
}
}
for (int i = 0; i < temps.length; i++) {
int tempi = 0;
if (i != 0) {
tempi = lines[i - 1];
}
if (!tempm && !tempp) {
gglobe.setFont(fnorm);
gglobe.drawString(temps[i], distance + tempi, (20 * imit)
+ oanorm);
}
if (tempm && !tempp) {
gglobe.setFont(fmarking);
gglobe.drawString(temps[i], distance + tempi, (20 * imit)
+ oamarking);
}
if (!tempm && tempp) {
gglobe.setFont(fplay);
gglobe.drawString(temps[i], distance + tempi, (20 * imit)
+ oaplay);
}
if (tempm && tempp) {
gglobe.setFont(fplay);
gglobe.drawString(temps[i], distance + tempi, (20 * imit)
+ oaplay);
}
}
if (!tempm && !tempp) {
//nix
// gglobe.drawImage(imgMark, 0, 140, sx, 20, this);
}
if (tempm && !tempp) {
//nix
gglobe.drawImage(imgMark, 0, imit * 20, sx, 20, this);
}
if (!tempm && tempp) {
//nix
// gglobe.drawImage(imgMark, 0, imit*20, sx, 20, this);
}
if (tempm && tempp) {
//nix
gglobe.drawImage(imgMark, 0, imit * 20, sx, 20, this);
}
for (int i = 0; i < lines.length; i++) {
gglobe.drawImage(imgLine, lines[i], 0, 1, sy, this);
}
}
public int stringWidth(boolean mark, boolean play, String temp2) {
int temp = 0;
if (!mark && !play) {
temp = fmnorm.stringWidth(temp2) + ppnorm;
}
if (play) {
temp = fmplay.stringWidth(temp2) + ppplay;
}
if (mark && !play) {
temp = fmmarking.stringWidth(temp2) + ppmarking;
}
return temp;
}
Ich glaub zwar, dass nur die update() wichtig ist, aber ich schick mal lieber das andere mit
Also woran liegts?
ToMiNaToR
Edit: nicht nur bei start und resize, sondern auch bei überlappung von anderen fenstern....