2016-06-03 8 views
0

Ich erstellte eine JLabel als Bild und fügte sie zu JScrollPane und dann zu meiner JFrame. Als nächstes habe ich paint() Methode in meinem JFrame überschrieben und drawLine() Methode verwendet, um 4 Linien zu zeichnen (sie sehen aus wie ein Rahmen).Wie neu zu streichen, nachdem Sie blättern?

Jetzt, wenn ich scroll, verschwinden meine Linien und sie nicht repaint(). Nur wenn ich Maßnahmen wie Minimalisieren, Maximieren usw. durchführe, kann ich sie sehen.

Wie erzwingen Sie repaint() nach der Verwendung ScrollPane?

+0

Implementieren Sie Ihre benutzerdefinierte Malerei in 'paintComponent()', nicht 'paint()'. Siehe [hier] (https://docs.oracle.com/javase/tutorial/uiswing/painting/closer.html). – Frecklefoot

+0

und wenn das nicht funktioniert - setzen Sie einen Breakpoint in die paintComponent-Methode, um zu sehen, ob sie tatsächlich aufgerufen wird. In direkter Antwort auf Ihre Frage finden Sie die zweite Antwort auf diese Frage: http://stackoverflow.com/questions/6561246/scroll-event-of-a-jscrollpane. Setzen Sie einen ChangeListener auf den Viewport Ihres Scrollpanels. – Jeutnarg

Antwort

0

Sie müssen dem Ansichtsfenster des Bildlauffensters einen Änderungslistener hinzufügen. Siehe dieses Beispiel:

import javax.swing.*; 
import java.awt.*; 

public class Example extends JFrame { 

    public Example() { 

     PaintedComponent paintedComponent = new PaintedComponent(); 
     paintedComponent.setPreferredSize(new Dimension(500, 500)); 

     JScrollPane scrollPane = new JScrollPane(paintedComponent); 
     scrollPane.getViewport().addChangeListener(e -> paintedComponent.repaint()); 

     setContentPane(scrollPane); 
     setMaximumSize(new Dimension(300, 300)); 
     pack(); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     new Example(); 
    } 
} 

class PaintedComponent extends JComponent { 
    @Override 
    public void paintComponent(Graphics g) { 
     // Do your painting here 
     System.out.println("Repainted"); 
    } 
} 
Verwandte Themen