Scrollbar - Bild - paint-Methode - zoom

Status
Nicht offen für weitere Antworten.

Kiola

Mitglied
Hallo,

ich habe ein Panel, in das ich mit der paintComponent-Methode ein Bild male. Auf dieses Bild zeichne ich mit drawLine Linien ein. Jetzt möchte ich zoomen, was auch schon funktioniert.
Jedoch kriege ich die Scrollbar nicht richtig eingebaut und wie ich realisieren soll, dass die eingezeichneten Linien nach dem Zoomen auch an der gleichen Stelle wie vorher sind, habe ich auch noch nicht hinbekommen. Mit stroke habe ich die Linienstärke vergrößert, aber da kann man auch nur ganze zahlen übergeben...
Jetzt ist meine Frage, ob das generell überhaupt möglich ist, wenn ich die paint-Methode verwende?
Und wenn ja wie..

Viele Grüße,
Kiola
 
Zuletzt bearbeitet:

Geeeee

Bekanntes Mitglied
Dein Panel packste dann einfach in eine Scrollpane und dann ein set(Preferred)Size() aufrufen auf dem Panel. Dann klappts eigentlich auch mit den Scrollbars.

Für das Linienzeichnen brauchste eigentlich ja auch nur einen zoomFactor
Java:
private double zoomFactor = 1;
   
public void setZoomFactor(double zoomFactor) {
    this.zoomFactor = zoomFactor;
}
    
@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D gg = (Graphics2D) g;
    gg.setColor(Color.RED);
    gg.drawLine((int)(10*zoomFactor), (int)(10*zoomFactor), (int)(100*zoomFactor), (int)(100*zoomFactor));
}
 
Zuletzt bearbeitet:

Kiola

Mitglied
hatte mir eine Testklasse geschrieben, in der auch alles funktioniert hat:

Java:
public class Test extends JPanel{
	private Image image;
	public Test(){
		JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       	this.setPreferredSize(new Dimension(1000, 1000));
        this.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
		try{
			image = ImageIO.read(getClass().getResource("background.bmp"));
		} catch(IOException e){
			e.printStackTrace();
		}

        JScrollPane contentPane = new JScrollPane(this);
        contentPane.setPreferredSize(new Dimension(250, 250));
        frame.getContentPane().add(contentPane);
        frame.pack();
        frame.setVisible(true);
      
	}
	
	
	
	
	public void paintComponent(Graphics g){
        super.paintComponent(g);
//        ImageIcon i = new ImageIcon(image);
//        Graphics2D g2 = (Graphics2D)g.create();
//        Insets inset = this.getInsets();
//        i.paintIcon(this, g2, 0, 0);
////        i.paintIcon(this, g2,  i.getIconWidth() + inset.left, i.getIconHeight() + inset.top);
//        g2.dispose();
        g.drawImage(image, 0, 0, null);
    }

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

}


als ich das dann in meinem Programm umsetzen wollte, welches auch so aufgebaut ist (extends JPanel etc...) hat das ganze nicht mehr funktioniert. Mir ist nur aufgefallen, dass die Zeile: contentPane.setPreferredSize(new Dimension(250, 250)); keine Wirkung hatte.
Dann habe ich setPreferredSize auf das JPanel aufgerufen und schon hat es funktioniert =)))
echt komisch...

Einen Zoomfaktor habe ich schon eingefügt. Das Problem ist nur, dass wenn man zoomt, gehen Teile aus dem Panel raus...
weiß jemand woran das liegen könnte?
und bei der Methode g.setStroke(new BasicStroke(int i)), wird leider ein int Wert erwartet, d.h. ich kann die Linienstärke nicht zb. um den Faktor 1,5 erhöhen.

Viele Grüße, Kiola
 

Geeeee

Bekanntes Mitglied
Das Problem ist nur, dass wenn man zoomt, gehen Teile aus dem Panel raus...
???:L Verstehe ich gerade überhaupt nicht, was du meinst.
Evtl. in Bezug auf die ScrollPane, dass da noch keine Balken kommen?! -> repaint() nach setPreferredSize() oder einfach setSize() <-- erzwingt auch das updaten.
 

Kiola

Mitglied
nee also ich habe ein Bild in einem Panel mit Scrollbalken.
wenn ich jetzt auf "zoom in" klicke, wird der ausschnitt vergrößert, ich kann auch noch weiterhin scrollen, aber die Gesamtgröße des Bildes ist die gleiche geblieben, d.h. er hat Teile des Bildes abgeschnitten (links, rechts, oben, unten)
 

Kiola

Mitglied
also mein Zoomen sieht in etwa so aus:
Java:
zoomInButton.addActionListener(new ActionListener(){
              public void actionPerformed(ActionEvent e) {
                  if(scaleFactor < 3.5){
                      scaleFactor += 0.25;                            
                      repaint();                
                }

              }                 
        });

Ausschnitt aus der paintComponent:

Java:
protected void paintComponent(Graphics g){
		super.paintComponent(g);
		g2D = (Graphics2D) g;
        final Dimension panelSize = getSize();
        final int width = panelSize.width;
        final int height = panelSize.height;
        final int imageWidth = (int) (image.getWidth() * scaleFactor);
        final int imageHeight = (int) (image.getHeight() * scaleFactor);
        final int imageX = width/2 - imageWidth/2;
        final int imageY = height/2 - imageHeight/2;

		image1 = image.getScaledInstance(imageWidth, imageHeight, Image.SCALE_SMOOTH);
		g2D.drawImage(image1, imageX, imageY, null);
 

Geeeee

Bekanntes Mitglied
ahh..nun verstanden.
Also das problem ist ja, dass dein ScaledImage "nur" so groß ist, wie dass, was du angibst.
Genau das "Gegenteil" von dem was du gerade machst. Also du machst das Bild ja halb so groß und stretcht es in die Pane. Nun das Bild einfach auf ein doppelt so großes Panel malen.
 
Zuletzt bearbeitet:

Kiola

Mitglied
achso....
also einfach vorm "drawImage" nochmal setpreferredSize von dem Panel aufrufen...
macht Sinn =)
Nur leider scheint getScaledInstance furchtbar langsam zu sein.... wenn ich nachm zoomen scrollen will, ruckelt es total..
 

Geeeee

Bekanntes Mitglied
Du könntest ja das Scaled Image schon "vorbereiten". Also einmal anlegen und dann dir einfach in der paintComponent holen. Ist ja auch irgendwie unlogisch bei jedem Paint das Bild neu zu erstellen.
Da hab ich vorher gar nicht drauf geachtet gehabt.
 

Kiola

Mitglied
also das Problem mit dem Ruckeln habe ich mittlerweile gelöst. Habe gelesen, dass getScaledInstance veraltet ist und deswegen folgendes AUSSERHALB der paintcomponent gemacht:

Java:
 int iWidth = ( int ) ( image.getWidth(null)*scaleFactor );
              	    int iHeight = ( int ) ( image.getHeight(null)*scaleFactor );
              		
              	    // create a BufferedImage instance
              	    bufferedImage = new BufferedImage( iWidth, iHeight, BufferedImage.TYPE_INT_RGB );
              	    RootPatch.this.setPreferredSize(new Dimension(bufferedImage.getWidth(RootPatch.this),bufferedImage.getHeight(RootPatch.this)));
              	    contentPane.repaint();
              	    contentPane.validate();
//                  contentPane.setPreferredSize(new Dimension(250, 250));
              	    extension.getContentPane().add(contentPane, BorderLayout.CENTER);
              	    validate();
                    repaint();

aber leider habe ich schon wieder ein neues Problem mit den Scrollbalken^^
wenn ich einmal auf zoomen gehen, verändern sich diese nicht, erst wenn ich auf den Rand des Fensters klicke, aktualisieren sie sich....
hatte das Problem schon öfters und meine mich zu erinnern, dass ein validate dann immer ausgereicht hat, aber hier anscheinend nicht..
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T ScrollBar TableView Java Basics - Anfänger-Themen 6
Franzi1001 ScrollBar lässt sich nicht bewegen Java Basics - Anfänger-Themen 4
B Wie kann man an ein JPanel eine Scrollbar anheften? Java Basics - Anfänger-Themen 8
DaCrazyJavaExpert JScollPane scrollbar unsichtbar machen Java Basics - Anfänger-Themen 2
M TextArea scrollbar bei editable false Java Basics - Anfänger-Themen 5
G Darstellungsproblem beim Betätigen der Scrollbar in JTabe Java Basics - Anfänger-Themen 2
T JScrollPane nicht scrollbar (mit KSKB!) Java Basics - Anfänger-Themen 4
A TextArea und ScrollBar Java Basics - Anfänger-Themen 17
J Methoden Knopffarbe einer Scrollbar Java Basics - Anfänger-Themen 5
M Scrollbar zu Textarea Java Basics - Anfänger-Themen 5
B JList mit Scrollbar? Java Basics - Anfänger-Themen 7
W Scrollbar HORIZONTAL Java Basics - Anfänger-Themen 2
C Scrollbar !? Java Basics - Anfänger-Themen 3
H JTable in JScrollPane: Scrollbar wird nicht angezeigt. Java Basics - Anfänger-Themen 2
H >>ScrollBar<< Java Basics - Anfänger-Themen 2
H ScrollBar inaktiv / Rekursive Methode Java Basics - Anfänger-Themen 4
A Scrollbar und Änderung Java Basics - Anfänger-Themen 3
L scrollbar auf double? Java Basics - Anfänger-Themen 6
Horst79 Scrollbar in einem jEditorPane Java Basics - Anfänger-Themen 2
A ChatGUI: Scrollbar und Funktionen Java Basics - Anfänger-Themen 5
A jtable scrollbar Java Basics - Anfänger-Themen 8
G horizontale scrollbar Java Basics - Anfänger-Themen 14
K J_table scrollbar Java Basics - Anfänger-Themen 13
O Scrollbar in GUI einfügen Java Basics - Anfänger-Themen 4
E ScrollBar automatisch scrollen Java Basics - Anfänger-Themen 8
N Scrollbar addAdjustmentListener Java Basics - Anfänger-Themen 3
P In JTextArea soll automisch an einen bestimmte Scrollbar pos Java Basics - Anfänger-Themen 14
E Scrollbar mit NULL- Layout? Java Basics - Anfänger-Themen 4
H Anfänger verzweifelt: Buttons und Scrollbar in einem Applet Java Basics - Anfänger-Themen 5
H JScrollPane -> Problem bei ScrollBar Java Basics - Anfänger-Themen 3
C ein Canvas ist zu groß. mit Scrollbar ? Java Basics - Anfänger-Themen 8
E Scrollbar- Farben Java Basics - Anfänger-Themen 5
G Scrollbar einer Itemlist hinzufügen Java Basics - Anfänger-Themen 3
G scrollbar, brauche hilfe wird nicht dargestellt Java Basics - Anfänger-Themen 2
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
I Kamera anschließen / Bild machen / Live View / Externe Blitz Java Basics - Anfänger-Themen 19
I Innerhalb einem Bild ein Teil austauschen Java Basics - Anfänger-Themen 26
I Datei (Bild) Drucken und wie Druckeinstellung speichern? Java Basics - Anfänger-Themen 3
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
H Artefact mit Bild erzeugen Java Basics - Anfänger-Themen 11
R UML-Bild (Erkennung ob static o. nicht) Java Basics - Anfänger-Themen 18
J Bild auf Hintergrundbild zeichnen Java Basics - Anfänger-Themen 5
krgewb Bild itextpdf Java Basics - Anfänger-Themen 2
C Bild in executable JAR File mitgeben Java Basics - Anfänger-Themen 5
VPChief Bild in JEditorPane Java Basics - Anfänger-Themen 9
B Warum bekomme ich kein Bild. Java Basics - Anfänger-Themen 10
S Bild einfügen // NEU Java Basics - Anfänger-Themen 12
N Bild drehen Java Basics - Anfänger-Themen 3
S Ein Bild mit dynamischer Quelle neuzeichnen Java Basics - Anfänger-Themen 12
N GLOOP Bild nicht ansichtbar Java Basics - Anfänger-Themen 5
M Bild in JFrame Java Basics - Anfänger-Themen 1
B Signatur erstellen - Bild ist nur weiß Java Basics - Anfänger-Themen 0
CptK Interface Bild rotieren Java Basics - Anfänger-Themen 17
CptK Interface Bild rotieren Java Basics - Anfänger-Themen 1
Anica Processing Animation Bild-Position ändern Java Basics - Anfänger-Themen 9
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
CptK Interface Curser durch Bild ersetzen & MouseListner Java Basics - Anfänger-Themen 2
M jTextPane Bild anzeigen Java Basics - Anfänger-Themen 6
CptK Bild beim betätigen eines JButtons Java Basics - Anfänger-Themen 6
S Bild über JButton legen Java Basics - Anfänger-Themen 3
B Bild mit Schrift befüllen / Anpassung bei Wortlänge Java Basics - Anfänger-Themen 2
D Google maps bild mit marker versehen Java Basics - Anfänger-Themen 12
D ImageView mit einfarbigem Bild fuellen Java Basics - Anfänger-Themen 3
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
M Einzelne Pixel in einem Bild auslesen und bearbeiten Java Basics - Anfänger-Themen 1
M Bild wird von JFrame nicht geladen Java Basics - Anfänger-Themen 12
J Bild in Button einsetzen Java Basics - Anfänger-Themen 6
S button kommt durch bild Java Basics - Anfänger-Themen 13
M Ein Bild durch Objekterzeugung zeichnen Java Basics - Anfänger-Themen 5
B Greenscreen (grüner Hintergrund ersetzen mit Bild) Java Basics - Anfänger-Themen 49
K Interface Kein Bild im .jar-File Java Basics - Anfänger-Themen 15
S Bild in Jar-File mit ImageIO Java Basics - Anfänger-Themen 50
S Bild einfügen Java Basics - Anfänger-Themen 16
binop Bild anzeigen lassen Java Basics - Anfänger-Themen 2
D Bild zu Text Java Basics - Anfänger-Themen 4
I HTML Code in Bild (transparent) konvertieren Java Basics - Anfänger-Themen 0
I Watermark erstellen mit HTML in Bild? Java Basics - Anfänger-Themen 7
D Classpath Bild kann in .jar nicht geladen werden Java Basics - Anfänger-Themen 2
Anfänger2011 Bild programmieren?! Java Basics - Anfänger-Themen 3
8 Eigenes Bild in email einfügen Java Basics - Anfänger-Themen 1
K JTable Bild einfügen Java Basics - Anfänger-Themen 1
L BufferdImage schwarzes Bild nach zusammenfügen zweier Bilder Java Basics - Anfänger-Themen 8
S Bild in JOptionPane Java Basics - Anfänger-Themen 1
C Abfrage nach einem Bild im Array Java Basics - Anfänger-Themen 9
J Umgebungsvariable Programmfenster zeigt kein Bild an Java Basics - Anfänger-Themen 1
J Bild loopen Java Basics - Anfänger-Themen 6
M JFrame Bild einfügen Java Basics - Anfänger-Themen 3
S Bild bei Kontakt ändern Java Basics - Anfänger-Themen 2
C Erste Schritte Bild holen und speichern Java Basics - Anfänger-Themen 1
D Bild in Frame einfügen Java Basics - Anfänger-Themen 11
D Bild im Applet anzeigen Java Basics - Anfänger-Themen 3
F Bild in ein Runnable Jar File packen (eclipse) Java Basics - Anfänger-Themen 2
M Java-Applet: Bild einbinden (getImage) Java Basics - Anfänger-Themen 0
J Ganzes Bild Java Basics - Anfänger-Themen 4
T GUI anstatt Bild schwarzes Rechteck gespeichert Java Basics - Anfänger-Themen 0
A Bild verschwindet! Wieso?? Java Basics - Anfänger-Themen 2
I Bild aus Bereich laden Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben