repaint() nicht richtig?

Java123???

Mitglied
Guten Tag,
ich habe mir ein Programm geschrieben welches Bilder einlesen soll.
Das Bild wird während das Programm schon läuft in ein JPanel gezeichnet, damit ich dieses Bild scrollen kann, wenn es größer ist, liegt diese JPanel in einem JScrollPane.
Nachdem das Bild nun aber in das JPanel gezeichnet wurde und das Bild auch größer ist, müssten die ScrollBars erscheinen nun leider tun diese das erst wenn ich danach z.B. die Fenstergröße ändere. Deshalb wollte ich mal fragen wieso dies so ist und wie ich das richtig hinbekomme (mit repaint() müsste es doch eigentlich funktionieren, mehr wird bei dem Ändern der Fenstergröße doch auch nicht aufgerufen oder?).

Meine Quellcode:
Java:
public class Test extends JPanel {
    public static void main(String[] args) {
        new Test();
    }

    JFrame mainFrame;
    JScrollPane scrollPane;
    BufferedImage bild;
    public Test() {
        //frame
        mainFrame = new JFrame("Test");
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setPreferredSize(new Dimension(300, 200));

        //Menuebar
        JMenuBar menueBar = new JMenuBar();

        JMenu dateiMenue = new JMenu("Datei");
        menueBar.add(dateiMenue);

        JMenuItem oeffneDatei = new JMenuItem("Öffnen");
        dateiMenue.add(oeffneDatei);
        oeffneDatei.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {
                    bild = ImageIO.read(getClass().getResource("img.jpg"));
                    repaint();
                } catch (IOException ex) {
                    Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });
        mainFrame.setJMenuBar(menueBar);

        //komponenten zum frame adden
        setLayout(new BorderLayout());
        scrollPane = new JScrollPane(this);
        mainFrame.add(scrollPane);


        mainFrame.pack();
        mainFrame.setVisible(true);
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        if(bild!=null) {
            g.drawImage(bild, 0, 0, this);
            setPreferredSize(new Dimension(bild.getWidth(), bild.getHeight()));
        }
    }
}

Bild eingelesen, keine Scrollbars:
ek4ppyb7.gif


Größe des Fensters verändert, Scrollbars erscheinen:
3l5leg2v.gif
 
S

SlaterB

Gast
versuche validate() vor dem repaint(), das kümmert sich um Layout-Fragen wie Größen von Komponenten,
welche sich gewiss auf ScrollBars auswirken

idealerweise beide Methoden am JFrame mainFrame aufrufen, nicht am JPanel, einem Teil der GUI,
hier mag es reichen, JFrame als Chefebene ist das sicherste
 

r.w.

Bekanntes Mitglied
Hallo java123???,

ich habe es jetzt nicht ausprobiert, könnte mir aber vorstellen,
dass das setPreferredSize in der paintComponent() zu spät kommt.
Versuche doch mal, die Größe direkt nach dem Einlesen des Bildes zu setzen.

VG ROlf
 

Marco13

Top Contributor
r.w. hat Recht: in der paintComponent-Methode sollte wenn möglich NUR gezeichnet werden, aber auf keinen Fall irgendwelche Änderungen an der Component gemacht werden (die ggf. wieder ein Neuzeichnen (und damit ein paintComponent) auslösen könnten ).
 

Java123???

Mitglied
Ok, danke für danke für den Tipp, ich habe setPreferredSize jetzt aus der paintComponent() rausgenommen und es direkt nach dem Einlesen des Bildes aufgerufen, allerdings immernoch der gleiche Effekt und mit dem validate() habe ich es auch probiert, trotzdem leider alles wie vorher.
Habt ihr vielleicht noch eine Idee?

Mfg
 

jgh

Top Contributor
du musst einfach:

Java:
	public void actionPerformed(ActionEvent e) {
				try {
					bild = ImageIO.read(getClass().getResource("img.jpg"));

					setPreferredSize(new Dimension(bild.getWidth(), bild
							.getHeight()));
					revalidate();
				} catch (IOException ex) {
					Logger.getLogger(Test.class.getName()).log(Level.SEVERE,
							null, ex);
				}
			}

revalidate aufrufen...zumindest klappt es so bei mir ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Repaint mittels Button richtig aufrufen klappt nicht AWT, Swing, JavaFX & SWT 1
D Repaint Funktioniert nicht AWT, Swing, JavaFX & SWT 2
J actionperformed wird nicht aufgerufen/ repaint() AWT, Swing, JavaFX & SWT 6
L Swing repaint() ruft paintComponent(g1d) nicht auf AWT, Swing, JavaFX & SWT 12
G Repaint wird nicht durchgeführt AWT, Swing, JavaFX & SWT 8
Joew0815 JDialog repaint() funktioniert nicht wie gewünscht. AWT, Swing, JavaFX & SWT 2
N Observer: update ruft nicht repaint auf AWT, Swing, JavaFX & SWT 0
C Repaint() funktioniert nicht in TabbedPanel AWT, Swing, JavaFX & SWT 5
N Swing Funktion repaint() updated nicht AWT, Swing, JavaFX & SWT 5
F repaint reagiert nicht AWT, Swing, JavaFX & SWT 8
M Eine nicht korrekte Darstellung bei repaint() warum? AWT, Swing, JavaFX & SWT 4
R validate(), repaint funktionieren nicht! AWT, Swing, JavaFX & SWT 7
M 2D-Grafik repaint() löscht altes Bild nicht AWT, Swing, JavaFX & SWT 2
N Swing repaint() funktioniert nicht AWT, Swing, JavaFX & SWT 5
C Swing Linux mag mein Swing-repaint() nicht... AWT, Swing, JavaFX & SWT 7
T Image wird nicht angezeigt?! - MediaTracker/repaint AWT, Swing, JavaFX & SWT 9
T Fenster wird trotz repaint() und revalidate() nicht sofort neu gezeichnet AWT, Swing, JavaFX & SWT 6
C repaint() funktioniert nicht; AWT, Swing, JavaFX & SWT 2
K repaint() ruft paint() nicht auf AWT, Swing, JavaFX & SWT 14
A repaint() geht nicht ? AWT, Swing, JavaFX & SWT 5
I Java Swing - repaint() funktioniert nicht AWT, Swing, JavaFX & SWT 4
hdi repaint() mag mal wieder nicht. AWT, Swing, JavaFX & SWT 9
T Repaint funktioniert nicht über JViewPort AWT, Swing, JavaFX & SWT 2
T repaint wird trotz Thread nicht ausgeführt AWT, Swing, JavaFX & SWT 5
G Schleife mit repaint funktioniert nicht. AWT, Swing, JavaFX & SWT 7
M repaint() löscht altes "Bild" nicht? AWT, Swing, JavaFX & SWT 2
D JUNG Repaint function does not work AWT, Swing, JavaFX & SWT 2
E repaint Probleme AWT, Swing, JavaFX & SWT 13
G listener repaint() - verschiedene Darstellung AWT, Swing, JavaFX & SWT 24
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
I Swing Verhindern, dass repaint() kaskadiert AWT, Swing, JavaFX & SWT 6
ms_cikar Update swingUtilities Repaint in der Schleife AWT, Swing, JavaFX & SWT 3
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
N Swing JButtons werden nach repaint() doppelt dargestellt AWT, Swing, JavaFX & SWT 12
K Methode repaint() AWT, Swing, JavaFX & SWT 1
B Swing Wann brauche ich repaint() ? AWT, Swing, JavaFX & SWT 1
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
A repaint(); AWT, Swing, JavaFX & SWT 9
J Swing ungewünschter Nebeneffekt bei der repaint() Methode AWT, Swing, JavaFX & SWT 3
A Problem: repaint() - Schleife AWT, Swing, JavaFX & SWT 3
S 2D-Grafik repaint()-Aufruf. Und nichts geschieht. AWT, Swing, JavaFX & SWT 5
P JPanel und Repaint AWT, Swing, JavaFX & SWT 5
J JavaFX Automatisches Neuzeichnen ("Repaint") abstellen. AWT, Swing, JavaFX & SWT 10
F JTable Repaint Issue AWT, Swing, JavaFX & SWT 1
S JList repaint AWT, Swing, JavaFX & SWT 1
L NullpointerException und Probleme mit repaint() AWT, Swing, JavaFX & SWT 11
B Repaint auf JFrame, JLabel und ImageIcon AWT, Swing, JavaFX & SWT 4
K 2D-Grafik Paint - Wie binde ich repaint ein? AWT, Swing, JavaFX & SWT 8
D repaint() klappt anders als vorgestellt AWT, Swing, JavaFX & SWT 15
R Repaint() in Schleifen, Threads AWT, Swing, JavaFX & SWT 13
B Swing Repaint Problem - mal wieder AWT, Swing, JavaFX & SWT 5
P 2D-Grafik Gezielter Repaint einzelner Frames in Java-Game AWT, Swing, JavaFX & SWT 6
javampir Bei repaint nix los AWT, Swing, JavaFX & SWT 2
B Swing repaint() AWT, Swing, JavaFX & SWT 3
Ernesto95 AnimationLoop - Problem bei Aufruf von repaint AWT, Swing, JavaFX & SWT 6
P 2D-Grafik repaint(); steigender RAM Verbauch AWT, Swing, JavaFX & SWT 6
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
S Applet Repaint AWT, Swing, JavaFX & SWT 3
M Programm hängt sich auf nachdem repaint() benutzt wurde AWT, Swing, JavaFX & SWT 2
R Swing Grafikfehler bei repaint AWT, Swing, JavaFX & SWT 2
N repaint() blockieren AWT, Swing, JavaFX & SWT 6
K canvas zeig nach repaint nichts an AWT, Swing, JavaFX & SWT 8
M Repaint() AWT, Swing, JavaFX & SWT 14
J Swing repaint, repaint, repaint AWT, Swing, JavaFX & SWT 8
M Applet repaint() verlangsamen AWT, Swing, JavaFX & SWT 7
R paintComponent malt bei repaint() Rahmen um Panel AWT, Swing, JavaFX & SWT 7
P EDT Problem? Kein Aufruf der repaint Methode AWT, Swing, JavaFX & SWT 6
V Applet JApplet Flackern durch Repaint AWT, Swing, JavaFX & SWT 11
kodela Problem mit repaint() AWT, Swing, JavaFX & SWT 3
S AWT Probleme mit repaint() AWT, Swing, JavaFX & SWT 2
D Repaint()? Oder was??? AWT, Swing, JavaFX & SWT 5
T 2D-Grafik Kreis "von Hand" zeichnen -> jedesmal repaint()? AWT, Swing, JavaFX & SWT 6
B AWT Canvas überdeckt nach repaint() JComboBox-Optionen AWT, Swing, JavaFX & SWT 2
B Swing verschachteltes GUI: repaint() ändert mehr als nur gewünschte Component AWT, Swing, JavaFX & SWT 4
S validate(), invalidate(), repaint(),... Was kommt wann? AWT, Swing, JavaFX & SWT 5
R repaint erzwingen AWT, Swing, JavaFX & SWT 3
Zettelkasten repaint() von anderen Klassen aufrufen AWT, Swing, JavaFX & SWT 4
H repaint()-Problem - 50% CPU-Auslastung AWT, Swing, JavaFX & SWT 4
P repaint während Thread läuft AWT, Swing, JavaFX & SWT 9
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
N Swing MainWindow(JFrame) aktualisieren(neuzeichnen) repaint AWT, Swing, JavaFX & SWT 4
T repaint() Problem AWT, Swing, JavaFX & SWT 2
A 2D-Grafik Repaint - Alternative? AWT, Swing, JavaFX & SWT 3
C JLabel, JTextArea, JScrollPane. repaint(); ? AWT, Swing, JavaFX & SWT 6
T Swing repaint funktioniert nur manchmal? AWT, Swing, JavaFX & SWT 6
K Jpanel repaint problem (Fullscreen) AWT, Swing, JavaFX & SWT 5
V Swing Bei repaint() tut sich nichts AWT, Swing, JavaFX & SWT 7
G ColorReader, bei Fadenkreuz zeichnen mit repaint() flackern AWT, Swing, JavaFX & SWT 19
I Canvas Repaint Probleme AWT, Swing, JavaFX & SWT 2
D Swing Actionlistener verhindert repaint?! AWT, Swing, JavaFX & SWT 2
S JLabel repaint AWT, Swing, JavaFX & SWT 8
J Swing paintComponent() - repaint() - BufferedImage anzeigen AWT, Swing, JavaFX & SWT 5
Luk10 repaint() auch in anderen Klassen! AWT, Swing, JavaFX & SWT 6
A repaint() zu langsam, bitte um alternativen AWT, Swing, JavaFX & SWT 5
T Überlappende Transparenz und repaint() AWT, Swing, JavaFX & SWT 10
E EINFACHE Verständnisfrage zu repaint(), paintComponent(), usw. AWT, Swing, JavaFX & SWT 16
O Girdbag Formatierung nach repaint verloren AWT, Swing, JavaFX & SWT 2
E Swing - repaint() AWT, Swing, JavaFX & SWT 6
E AWT Problem mit Repaint (in Loop oder Timer) AWT, Swing, JavaFX & SWT 3
O Exception bei repaint AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben