title image


Smiley paint()-Problem? Bild in JScrollPane wird nicht korrekt aktualisiert
Hallo da draussen!



Ich möchte gerne ein selbst gezeichnetes Bild (in diesem Beispiel ein Text mit drawString auf ein JPanel gezeichnet) innerhalb eines JScrollPanes anzeigen. Es sollte scrollbar sein und jederzeit korrekt angezeigt werden.



Wenn man folgendes Programm ausführt, wird das Bild erst angezeigt, wenn man das JFrame (enthält JScrollPane mit JPanel, auf welches das Bild gezeichnet wird, in korrekter Grösse) verkleinert, sodass die ScrollBars angezeigt werden, und anschliessend die ScrollBars bewegt.



Ich habe bereits alle möglichen Events ausprobiert, um das Bild jeweils neu zu zeichnen, glaube aber, dass es an der paint()-Methode (des JPanels?) liegen muss.



Kann mir irgendjemand sagen, was ich falsch mache??



mfG, Sandro











import java.awt.Color;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.event.ComponentEvent;

import java.awt.event.ComponentListener;

import java.awt.event.WindowEvent;

import java.awt.event.WindowFocusListener;

import java.awt.event.WindowListener;

import java.awt.image.BufferedImage;



import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JScrollPane;



public class ScrollPicture extends JFrame implements WindowListener, WindowFocusListener, ComponentListener

{

private BufferedImage img;

private JPanel pnl;

private JScrollPane scr;





public ScrollPicture()

{

// Bild erstellen:

img = new BufferedImage(400, 300, BufferedImage.TYPE_BYTE_INDEXED); // 256 Farben

generateImage();



// JPanel einrichten:

pnl = new JPanel()

{

public void paint(Graphics g)

{

super.paint(g);

refresh();

}

};

pnl.setPreferredSize(new Dimension(400, 300));



// JScrollPane einrichten:

scr = new JScrollPane();

scr.setViewportView(pnl);



// unterschiedliche Farben setzen:

scr.setBackground(Color.blue); // JScrollPane

pnl.setBackground(Color.green); // JPanel

this.getContentPane().setBackground(Color.red); // JFrame



// JFrame einrichten:

this.getContentPane().add(scr);

this.addWindowListener(this);

this.addWindowFocusListener(this);

this.addComponentListener(this);

this.pack();

this.setVisible(true);

}



public void generateImage() // ein BufferedImage zur Anzeige auf dem Panel erzeugen

{

Graphics2D g = img.createGraphics();

g.drawString("Dieser Text sollte immer korrekt angezeigt und gescrollt werden!", 0, 30);

}



public void refresh() // Bild auf Panel zeichnen

{

pnl.getGraphics().drawImage(img, 0, 0, this);

}





public static void main(String[] args)

{

ScrollPicture testApp = new ScrollPicture();

}





//////////////

// Listener //

//////////////



/* --- WindowListener --- */



public void windowIconified(WindowEvent arg0)

{

System.out.println("windowIconified");

refresh();

}



public void windowDeiconified(WindowEvent arg0)

{

System.out.println("windowDeiconified");

refresh();

}



public void windowActivated(WindowEvent arg0)

{

System.out.println("windowActivated");

refresh();

}



public void windowDeactivated(WindowEvent arg0)

{

System.out.println("windowDeactivated");

refresh();

}



public void windowClosing(WindowEvent arg0)

{

System.exit(0);

}



// nicht benutzt:

public void windowOpened(WindowEvent arg0)

{ }



public void windowClosed(WindowEvent arg0)

{ }





/* --- WindowFocusListener --- */



public void windowGainedFocus(WindowEvent arg0)

{

System.out.println("windowGainedFocus");

refresh();

}



public void windowLostFocus(WindowEvent arg0)

{

System.out.println("windowLostFocus");

refresh();

}





/* --- ComponentListener --- */



public void componentResized(ComponentEvent arg0)

{

System.out.println("componentResized");

//refresh(); -> führt zu NullPointerExcetion



}



public void componentShown(ComponentEvent arg0)

{

System.out.println("componentShown");

refresh();

}



public void componentHidden(ComponentEvent arg0)

{

System.out.println("componentHidden");

refresh();

}



// nicht benutzt:

public void componentMoved(ComponentEvent arg0)

{ }

}

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: