Scrollbalken verschwinden beim Zoomen

Petra19

Mitglied
Hallo zusammen,

ich hab' auf einem Panel gezeichnet und möchte mit dem Mausrad scrollen bzw. zoomen (Strg-Mausrad).
Leider funktioniert das Ganze nur zeitweise:
- Vergrößere ich die Zeichnung bis zur oberen Begrenzung (scale=15), verschwinden zwischendurch die Scrollbalken.
- Verkleinere ich die Zeichnung wieder bis zur unteren Begrenzung (scale=1), verschwinden die Scrollbalken wieder -zumindestens zeitweise.
- Vergrößere ich die Zeichnung wieder - ist nach scale=8 das Bild verschwunden und nichts geht mehr.

Leider verstehe ich nicht , warum das so ist.

Hier nun mein Quelltext:
Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseWheelEvent;
import java.awt.geom.Ellipse2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class ScrollAndZoomExample {
   
    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        DrawingPanel myPanel=new DrawingPanel();
       
JScrollPane scrollPane=new JScrollPane();
        scrollPane.getViewport().setView(myPanel);
        scrollPane.getHorizontalScrollBar().setUnitIncrement(25);
        scrollPane.getVerticalScrollBar().setUnitIncrement(25);
        f.getContentPane().setLayout(new BorderLayout());
        f.getContentPane().add(scrollPane,BorderLayout.CENTER);
        f.setSize(400, 400);
        f.setLocation(200,200);
        f.setVisible(true);
    }
}

class DrawingPanel extends JPanel{
    int scale;
   
    public DrawingPanel(){
        scale= 1;
        setPreferredSize(new Dimension(100,100));
        addMouseWheelListener(new java.awt.event.MouseWheelListener() {
            @Override
            public void mouseWheelMoved(MouseWheelEvent evt) {
                if (evt.isControlDown()) {
                    scale=(scale-evt.getWheelRotation());
                    if (scale<1) scale=1;
                    else if (scale>15) scale=15;
                    //System.out.println(scale);
                    setPreferredSize(new Dimension(getPreferredSize().width*scale,getPreferredSize().height*scale));
                   
                    revalidate();
                    repaint();
                }
                else{
                    evt.getComponent().getParent().dispatchEvent(evt);
                }
            }
        });
    }
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g;
        g2.scale(scale,scale);
        g2.draw(new Ellipse2D.Double(10, 10, 20, 20));
        g2.draw(new Ellipse2D.Double(10, 10, 40, 40));
        g2.draw(new Ellipse2D.Double(10, 10, 60, 60));
       
    }
}

Vielen Dank für eure Hilfe,

Petra
 

X5-599

Top Contributor
Ab scale Stufe 11 läuft der Integer über (preferred width und height). Will heissen, die resultierende Zahl ist negativ. Von da aus rechnet er natürlich mit falschen Werten und es kommt zu dem komischen Verhalten.
 

Petra19

Mitglied
Vielen Dank für deine Antwort.

Ich hab nun das ScaleMaximum auf 5 verändert. Am Ablauf verändert sich nichts. Es dauert nur etwas länger bis das Programm "hängt".

Oder hab ich dich falsch verstanden?

Ich kann auch die Zeile
Java:
g2.scale(scale,scale);
durch

Java:
AffineTransform tx = new AffineTransform();
tx.scale(scale, scale);
g2.setTransform(tx);

ersetzen und erhalte dasselbe Ergebnis. Ich vermute ich verwende die Scrollpane falsch. Leider weiß ich aber nicht, an welcher Stelle...
 

X5-599

Top Contributor
Ich glaub' du hast noch nen Fehler in der Logik drin. wenn man vor den repaint() revalidate() sich mal die PreferredSIze ausgeben lässt:
Code:
System.out.println("["+scale+"] "+getPreferredSize());
stellt man fest, dass z.B. wenn man immer von scale 1 auf 2 und wieder auf 1 dann auf 2 usw hin und her scrollt, sich die PreferredSIze immer und immer wieder verdoppelt.
Das kann doch eigentlich nicht der gewünschte Effekt sein, oder? Wird das nicht gemacht, damit sich die PreferredSize der neuen Bild (Graphics g) Größe anpasst?

Wäre so etwas nicht eher was du bräuchtest:
Code:
class DrawingPanel extends JPanel{
    int scale;
    int width = 100;
    int height = 100;

    public DrawingPanel(){
        scale= 1;
        setPreferredSize(new Dimension(width, height));
        addMouseWheelListener(new java.awt.event.MouseWheelListener() {
            @Override
            public void mouseWheelMoved(MouseWheelEvent evt) {
                if (evt.isControlDown()) {
                    scale=(scale-evt.getWheelRotation());
                    if (scale<1) scale=1;
                    else if (scale>15) scale=15;
                    //System.out.println(scale);
                    setPreferredSize(new Dimension(width*scale, height*scale));
                   
                   System.out.println("["+scale+"] "+getPreferredSize());
                    revalidate();
                    repaint();
                }
                else{
                    evt.getComponent().getParent().dispatchEvent(evt);
                }
            }
        });
    }
    
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g;
        g2.scale(scale,scale);
        
        g2.draw(new Ellipse2D.Double(10, 10, 20, 20));
        g2.draw(new Ellipse2D.Double(10, 10, 40, 40));
        g2.draw(new Ellipse2D.Double(10, 10, 60, 60));
    }
}

Die ursprüngliche Width und Height sind fest und dienen nur derBerechnung der neuen Skalierung.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Swing Problem: Horizontaler Scrollbalken in JComboBox hinzufügen AWT, Swing, JavaFX & SWT 4
M SWT Scrollbalken kommt zu spät AWT, Swing, JavaFX & SWT 5
A SWT Scrollbalken im Editorfenster erzwingen AWT, Swing, JavaFX & SWT 4
T Scrollbalken in JFrame AWT, Swing, JavaFX & SWT 8
C Swing Scrollbalken in JEditorPane - WIE? AWT, Swing, JavaFX & SWT 3
C JPanel mit FlowLayout in JScrollPane - keinen Scrollbalken AWT, Swing, JavaFX & SWT 2
M Swing Scrollbalken in einem JFrame AWT, Swing, JavaFX & SWT 10
B Swing JTable mit scrollbalken anhand von Spalten AWT, Swing, JavaFX & SWT 3
N Horizontale Scrollbalken in JTable AWT, Swing, JavaFX & SWT 2
R Scrollbalken für JFrame? AWT, Swing, JavaFX & SWT 2
C JTextArea zeigt keine Scrollbalken AWT, Swing, JavaFX & SWT 18
M Wie Scrollbalken links positionieren? AWT, Swing, JavaFX & SWT 14
A Scrollbalken von JScrollPane immer anzeigen AWT, Swing, JavaFX & SWT 2
G Scrollbalken SWT AWT, Swing, JavaFX & SWT 4
S 2D-Grafik beeinflussen durch Scrollbalken AWT, Swing, JavaFX & SWT 2
S JComboBox mit Scrollbalken AWT, Swing, JavaFX & SWT 2
D Scrollbalken zu langsam AWT, Swing, JavaFX & SWT 10
T Scrollbalken für ein Menü oder laufendes Dropdown-Menü wie? AWT, Swing, JavaFX & SWT 34
A 2 textareas, ein scrollbalken AWT, Swing, JavaFX & SWT 8
vogella JScrollPane - Position setzen der Scrollbalken AWT, Swing, JavaFX & SWT 5
H Dicke der Scrollbalken einer JScrollPane beeinflussbar? AWT, Swing, JavaFX & SWT 5
D Scrollbalken in einem View AWT, Swing, JavaFX & SWT 2
D Scrollbalken Wert setzen AWT, Swing, JavaFX & SWT 6
P In ein JScrollPane zeichnen und Scrollbalken anpassen AWT, Swing, JavaFX & SWT 13
J JTextpane einem Scrollbalken geben? AWT, Swing, JavaFX & SWT 2
T JScrollPane - ScrollBalken werden nicht angezeigt AWT, Swing, JavaFX & SWT 5
S ScrollPane zeigt scrollbalken nicht an AWT, Swing, JavaFX & SWT 12
M Textfeld mit Scrollbalken AWT, Swing, JavaFX & SWT 5
C Scrollbalken bei einem JInternalFrame AWT, Swing, JavaFX & SWT 6
T JScrollPane - Scrollbalken vermeiden AWT, Swing, JavaFX & SWT 5
S JTextArea - Vertikaler Scrollbalken AWT, Swing, JavaFX & SWT 4
sliwalker Swing: Scrollbalken scrollt den Inhalt einer JList nicht AWT, Swing, JavaFX & SWT 2
M Scrollbar: Scrollbalken versetzen AWT, Swing, JavaFX & SWT 2
A Automatische Scrollbalken bei einem JFrame AWT, Swing, JavaFX & SWT 8
L Horiz. Scrollbalken von JScrollPane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
S AffineTranformation Bilder verschwinden von Anzeige bei Pan, Zoom AWT, Swing, JavaFX & SWT 6
D JavaFX Menu soll nicht bei jedem Click verschwinden AWT, Swing, JavaFX & SWT 8
M Gezeichnete Linine verschwinden AWT, Swing, JavaFX & SWT 7
F textarea lässt panel verschwinden AWT, Swing, JavaFX & SWT 4
B setCursor() lässt Cursor ganz verschwinden AWT, Swing, JavaFX & SWT 9
F Swing JTextfield Beispieltext soll nach Klick verschwinden AWT, Swing, JavaFX & SWT 3
K LayoutManager Wieso verschwinden Elemente? AWT, Swing, JavaFX & SWT 20
A AWT Nach dem generieren von bildern verschwinden diese wieder AWT, Swing, JavaFX & SWT 9
M Verschwinden von gezeichneten Objekten nach Fensterverkleinerung AWT, Swing, JavaFX & SWT 3
A SWT Tooltip soll nicht verschwinden, solange User mit Maus auf Control ist AWT, Swing, JavaFX & SWT 5
C AWT Buttons verschwinden, wenn Fenster Vollbild gesetzt wird AWT, Swing, JavaFX & SWT 38
T Menüacceleratoren verschwinden bei JTree AWT, Swing, JavaFX & SWT 5
N Teile des GUI verschwinden AWT, Swing, JavaFX & SWT 8
J Hintergrundbild des JFrames lässt Textboxen verschwinden? AWT, Swing, JavaFX & SWT 4
data89 Komponenten verschwinden von JPanel, wenn ich den HG selbst male - Hilfeeee AWT, Swing, JavaFX & SWT 16
U SWT Linien verschwinden nach Verschieben AWT, Swing, JavaFX & SWT 3
G Hilfe Meine JPanels verschwinden im Müll AWT, Swing, JavaFX & SWT 10
G JTabbedPane verschwinden einfach bei Paelaktualisierung AWT, Swing, JavaFX & SWT 7
D SWING AWT - Komponenten komplett verschwinden lassen AWT, Swing, JavaFX & SWT 6
A Icons von Kontextmenüeinträgen verschwinden (SWT) AWT, Swing, JavaFX & SWT 2
K JSpinner Werte verschwinden bei Panel Wechsel AWT, Swing, JavaFX & SWT 2
G JPanel verschwinden lassen, aber wie? AWT, Swing, JavaFX & SWT 3
T Problem mit Image, restliche Elemente der Gui verschwinden AWT, Swing, JavaFX & SWT 9
B NULL Layout - TextFelder verschwinden AWT, Swing, JavaFX & SWT 8
G JTabbedPane: Tabs verschwinden lassen ? AWT, Swing, JavaFX & SWT 10
X Verschwinden des JMenu unterbinden AWT, Swing, JavaFX & SWT 3
L Labels verschwinden! AWT, Swing, JavaFX & SWT 10
G JTabbedPane: Tabs verschwinden lassen und wieder anzeigen AWT, Swing, JavaFX & SWT 3
juppi JFrame will nicht wieder verschwinden AWT, Swing, JavaFX & SWT 2
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
berserkerdq2 Wie greife ich auf ein Element zu, welches ich beim Scenebuilder erstellt habe AWT, Swing, JavaFX & SWT 10
H AWT Dialog Größe ändern - Schwarzer Inhalt beim groß ziehen AWT, Swing, JavaFX & SWT 1
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
B Output GUI funktioniert nur beim ersten Mal richtig. AWT, Swing, JavaFX & SWT 4
A JavaFX exportierte Jar ohne beim starten die Libs hinzufügen? AWT, Swing, JavaFX & SWT 2
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
S Fehler beim Öffnen weiterer FXML AWT, Swing, JavaFX & SWT 11
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
G Gui updated beim zweiten Aufruf nicht mehr AWT, Swing, JavaFX & SWT 15
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
W Nullpointer Exception beim übertragen von Daten von Scene zu Scene AWT, Swing, JavaFX & SWT 6
missy72 JavaFX Wiederholen einer IF-Abfrage beim erneuten Öffnen einer Stage AWT, Swing, JavaFX & SWT 11
D JavaFX Probleme beim nachtäglichen hinzufügen der jfx dependency AWT, Swing, JavaFX & SWT 7
R NullPointerException beim Start des Fensters AWT, Swing, JavaFX & SWT 1
D JavaFX Label flackert beim aktualisieren AWT, Swing, JavaFX & SWT 12
J Kann mir jemand beim MediaPlayer helfen ? AWT, Swing, JavaFX & SWT 2
S JavaFx Zufallsfarbe beim Button-Klick AWT, Swing, JavaFX & SWT 22
L Swing JDialog ton beim klicken ausstellen AWT, Swing, JavaFX & SWT 1
sascha-sphw JavaFX ListCell höhe verändert sich beim ändern der Text-Farbe AWT, Swing, JavaFX & SWT 14
H Beim JFrame erstellen ein anderes schließen AWT, Swing, JavaFX & SWT 0
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
M AWT Kann meinen Fehler beim ActionListener nicht finden AWT, Swing, JavaFX & SWT 5
R 2D-Grafik Massive Frame Drops beim Benutzen von AffineTransformOp AWT, Swing, JavaFX & SWT 2
ruutaiokwu Swing windowStateChanged macht exakt das Gegenteil beim Verändern der Fenstergrösse AWT, Swing, JavaFX & SWT 3
J Exception beim JFrame erstellen AWT, Swing, JavaFX & SWT 6
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
D JInternalFrame wechselt Position beim ersten Click AWT, Swing, JavaFX & SWT 0
steven789hjk543 Swing Verstehe etwas beim GUI nicht AWT, Swing, JavaFX & SWT 3
L JavaFX Probleme beim Installieren JavaFX11 / JavaFX12 -- Eclipse 2019-03 AWT, Swing, JavaFX & SWT 3
H JavaFX Probleme Beim Wechseln der scene als .fxml AWT, Swing, JavaFX & SWT 7
A Fehler beim Hintergrund AWT, Swing, JavaFX & SWT 17
F JavaFX Probleme beim automatischen Konvertieren AWT, Swing, JavaFX & SWT 4
J Hilfe beim tablevies AWT, Swing, JavaFX & SWT 2
L JavaFX Fehler beim setzen von Farben AWT, Swing, JavaFX & SWT 16
T LookAndFeel LookAndFeel funktioniert nicht beim JFrame wechsel AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben