2017-07-13 2 views
0

Ich versuche ein ScrollPane zu erstellen, das ein JPanel mit einem transparenten Hintergrund (oder fast transparent in RGBA: 0, 0, 0, 150) enthält. Das Problem ist, wenn ich die JViewPort-Repaints nach unten/oben scrolle. Aber das Elternelement wird nicht neu gezeichnet, was einige Millisekunden später passiert. Für ein paar Millisekunden sehe ich alle Schaltflächen um den Bildlauf in der Bildlaufansicht. Gibt es dafür eine Lösung? Oder ist es möglich, die Repaint-Methode für den Viewport zu überschreiben, um den gesamten Bildschirm neu zu zeichnen?Java Swing ViewPort Scrolling Lags

Mein Code:

scrollView = new JScrollPane(content); 
    scrollView.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); 
    scrollView.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
    scrollView.getVerticalScrollBar().setUI(new ScrollBar()); 
    scrollView.getVerticalScrollBar().setUnitIncrement(1); 
    scrollView.setBorder(null); 
    scrollView.setViewportBorder(null); 
    scrollView.setBounds(20, 20, W - 40, H - 40); 
    scrollView.setPreferredSize(new Dimension(W - 40, H - 40)); 
    add(scrollView, 0); 
    parentScreen.repaint(); 

Antwort

1

ein JPanel mit einem transparenten Hintergrund (oder fast transparent in RGBA: 0, 0, 0, 150).

Swing malt transparente Komponenten nicht richtig, dies könnte dieses Problem sein. Swing erwartet, dass eine Komponente opak oder nicht opak ist (in diesem Fall wird die übergeordnete Komponente zuerst gezeichnet, um Malartefakte zu entfernen).

Weitere Informationen und mögliche Lösungen finden Sie unter Backgrounds With Transparency.