kein Scrollen nach affinertransformation bei mouse dragged

pitsoft21

Mitglied
Hallo ich habe mit jdk8 ein JFrame darin ein JScrollPane und darin ein JPanel. Dafür habe ich die paint Methode überschrieben und mache folgendes:
ich lese vorher ein Bild ein .Dieses BufferedImage wird dann per affiner Transformation gedreht und verschoben. Dann will ich mit der Mouse einen Fangrahmen bilden um das Bild neu zuzuschneiden. Bis dahin geht es auch. Das Bild ist größer als das Panel und es hat in x und y Scrollbars. Ziehe ich aber den Fangrahmen über den Fensterrand scrollt das Bild nicht mit. Auch bei Vollbildanzeige ist das so. Leider kann ich z.Z. keinen Code angeben, da das Projekt auf einem Rechner ist, der jetzt nicht zugreifbar ist. Warum scrollt das Bild nicht mit, wenn die Mouse schon unterhalb des Fensters ist?
 

pitsoft21

Mitglied
[CODE lang="java" title="Der Code zu meiner Frage - Wie kriege ich das Fangrect rechtwinklig dargestellt?"]package pitsoft.image_cutter;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Stack;

import javax.imageio.ImageIO;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;




/** Diese Klasse soll Images rotieren und zuschneiden
*
* @author prog
*
*/
public class ImageCutter extends JFrame implements WindowListener,MouseListener,MouseMotionListener,ActionListener
{

String[] args=null;
MediaTracker mt=new MediaTracker(this);
BufferedImage img=null;
JFileChooser fc=null;
String openSpec=null;
JPanel pnlTop=null;
JScrollPane spImage=null;
JPanel pnlImage=null;

JMenuBar menubar=null;
MenuListener menuListener=null;
JMenu menuDatei=null;

JMenuItem itemOpenImage=null;
JMenuItem itemSaveAs=null;
JMenuItem itemExit=null;

JMenu menuPicture=null;
JMenuItem itemPictureAtLinePrepare=null;
JMenuItem itemPictureAtLineDoit=null;

Point mouseClick=null;
Point mouseDrag=null;
AffineTransform atrRotate=null;
AffineTransform atrMove=null;
Stack pointStack=new Stack();
//Fang
JCheckBox cbFang=null;
JCheckBox cbMove=null;



public ImageCutter(String[] _args)
{
super();
this.args=_args;
createGui();
fc=new JFileChooser();


}

public void createGui()
{
Container cp=this.getContentPane();
cp.setLayout(new BorderLayout());
this.setSize(800,600);


pnlTop=new JPanel();
cbFang=new JCheckBox("Fang");
pnlTop.add(cbFang);

cbMove=new JCheckBox("Move");
pnlTop.add(cbMove);

spImage=new JScrollPane();

pnlImage=new JPanel()
{
public void paint(Graphics gr)
{
if (gr !=null)
{
Graphics2D gr2=(Graphics2D) gr;
super.paint(gr2);

if (img!=null)
{

// gr2.transform(atrZoom);

if (atrMove !=null)
{
gr2.transform(atrMove);
}
if (atrRotate !=null)
{
gr2.transform(atrRotate);
}
gr2.drawImage(img,0,0,Color.WHITE,null );

}
if (cbFang.isSelected() && mouseClick !=null && mouseDrag !=null)
{
gr2.setColor(Color.RED);
gr2.drawRect(mouseClick.x,mouseClick.y,mouseDrag.x-mouseClick.x,mouseDrag.y-mouseClick.y);
spImage.getVerticalScrollBar().setValue(spImage.getVerticalScrollBar().getMaximum());


}
}
}};

cp.add(pnlTop,BorderLayout.NORTH);
spImage.getViewport().add(pnlImage);
cp.add(spImage,BorderLayout.CENTER);

this.addWindowListener(this);
pnlImage.addMouseListener(this);
pnlImage.addMouseMotionListener(this);
createMenu();
setVisible(true);
}

private void createMenu()
{
//Menu
menubar=new JMenuBar();
menuListener=new MenuListener();
menuDatei=new JMenu("Datei");
itemOpenImage=new JMenuItem("Open a Image File");
// itemOpen=new JMenuItem("Open a Image File");
itemSaveAs=new JMenuItem("SaveAs");
itemExit=new JMenuItem("Exit");

menuDatei.add(itemOpenImage);
menuDatei.add(itemSaveAs);
menuDatei.add(itemExit);

menuPicture=new JMenu("Picture");
itemPictureAtLineDoit=new JMenuItem("Order On Line Doit");
itemPictureAtLinePrepare=new JMenuItem("Prepare Order On Line");
menuPicture.add(itemPictureAtLinePrepare);
menuPicture.add(itemPictureAtLineDoit);

menubar.add(menuDatei);
menubar.add(menuPicture);
this.setJMenuBar(menubar);
//Actions
itemOpenImage.addActionListener(menuListener);
itemSaveAs.addActionListener(menuListener);
/* itemOpen.addActionListener(menuListener);

itemLz.addActionListener(menuListener);
itemDelFang.addActionListener(menuListener);
itemAddPad.addActionListener(menuListener);
itemDelSelLz.addActionListener(menuListener);
itemGlueFang.addActionListener(menuListener);
itemGridX.addActionListener(menuListener);
itemGridY.addActionListener(menuListener);
itemInfo.addActionListener(menuListener);*/
itemPictureAtLinePrepare.addActionListener(menuListener);
itemPictureAtLineDoit.addActionListener(menuListener);
itemExit.addActionListener(menuListener);
// itemShowBe.addActionListener(menuListener);

}


private Image loadImage(String file)
{
Image img=null;
try
{
img =ImageIO.read(new File(file));
mt.addImage(img,0);
try
{
mt.waitForAll();
mt.checkAll(true);
System.out.println( "LoadImage" +file+ "x="+img.getWidth(null)+" y="+img.getHeight(null));

} catch (InterruptedException e) {e.printStackTrace(); }
}
catch (IOException e) { e.printStackTrace(); }
return img;
}

public double toRadiant(int inGrad )
{
//360 Grad =2 PI
double d= (inGrad*Math.PI*2)/360;
// System.out.println("Aus "+inGrad+" wird Bogenmass "+d);
return d;
}

private void saveImage(BufferedImage img,String name)
{
try {
boolean state=ImageIO.write(img, "jpg", new File(name));
} catch (IOException e) {

e.printStackTrace();
}
}




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

}

@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mouseDragged(MouseEvent me)
{
System.out.println("Mouse Dragged at "+me.getX()+"x"+me.getY());
this.mouseDrag=me.getPoint();
if (cbMove.isSelected())
{
atrMove=AffineTransform.getTranslateInstance(this.mouseDrag.x-mouseClick.x,this.mouseDrag.y-mouseClick.y);
}
repaint();
}

@Override
public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mouseClicked(MouseEvent me)
{


}

@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent me) {
this.mouseClick=me.getPoint();
System.out.println("Mouse Pressed at "+mouseClick.x+"x"+mouseClick.y);
pointStack.push(mouseClick);

}

@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void windowActivated(WindowEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void windowClosed(WindowEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void windowClosing(WindowEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void windowDeactivated(WindowEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void windowDeiconified(WindowEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void windowIconified(WindowEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void windowOpened(WindowEvent arg0) {
// TODO Auto-generated method stub

}

//#########################################################################
/*
* Handelt alle Actionen der MenuBar
*/
private class MenuListener implements ActionListener
{


public void actionPerformed(ActionEvent menuEvent)
{
Object o=menuEvent.getSource();
if (o==itemOpenImage)
{
fc=new JFileChooser();
fc.setDialogTitle("Open a Image File");
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
fc.setCurrentDirectory(new File("."));
int erg=fc.showOpenDialog(ImageCutter.this);
if (erg==JFileChooser.APPROVE_OPTION)
{
openSpec=fc.getSelectedFile().getAbsolutePath();
img=(BufferedImage) loadImage(openSpec);
pnlImage.setSize(img.getWidth(null),img.getHeight(null));
pnlImage.setPreferredSize(new Dimension(img.getWidth(null),img.getHeight(null)));


}


}//
else if (o==itemSaveAs)
{
fc.setDialogTitle("Save Layout to File");
fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
fc.setCurrentDirectory(new File("."));
int erg=fc.showSaveDialog(ImageCutter.this);

if (erg==JFileChooser.APPROVE_OPTION)
{
String saveSpec=fc.getSelectedFile().getAbsolutePath();
saveImage(img,saveSpec);
}
}

else if (o==itemPictureAtLinePrepare)
{
pointStack.clear();
JOptionPane.showMessageDialog(ImageCutter.this, "Define Point 1 and 2");

}

else if (o==itemPictureAtLineDoit)
{
Point p1=null;
Point p2=null;
Point upper=null;
Point lower=null;

p1=(Point) pointStack.pop();
p2=(Point) pointStack.pop();


//waagerechtes Ausrichten der Linie
//den höheren Punkt finden
if (p1.y < p2.y)
{
upper=p1;
lower=p2;
}
else
{
upper=p2;
lower=p1;
}
double d1=upper.y-lower.y;
double d2=upper.x-lower.x;
double winkel=-1*Math.atan(d1/d2);

// rotation=45;
// double rad=toRadiant(30);
// atrRotate.transform(new Point(0,0), new Point(imgLs.getWidth()/2,imgLs.getHeight()/2));
atrRotate= AffineTransform.getRotateInstance(winkel,p1.getX(),p1.getY()); //Rotation um rad Grad um den Punkt x,y

repaint();





}
else if (o==itemExit)
{
dispose();
System.exit(0);
}
}
}
}
[/CODE]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O JScrollPane beinhaltet JPanel mit null Layout kein Scrollen AWT, Swing, JavaFX & SWT 3
N imageIcon zeigt kein Bild an AWT, Swing, JavaFX & SWT 5
Fridolin111 Der KeyListener Löst kein event aus AWT, Swing, JavaFX & SWT 6
F Kein JavaFX mehr im Eclipse Wizard AWT, Swing, JavaFX & SWT 1
S Swing Bei start des Programmes kein Fenster zu sehen AWT, Swing, JavaFX & SWT 1
L JavaFX TableView kein content text ändern AWT, Swing, JavaFX & SWT 2
cool_brivk24 Swing ImageIcon lädt kein Bild AWT, Swing, JavaFX & SWT 12
L JavaFX Anderer Text, wenn kein Platz ist. AWT, Swing, JavaFX & SWT 1
C JavaFX ProGuard -> TableView kein Inhalt AWT, Swing, JavaFX & SWT 7
B JavaFX Text wird nicht angezeigt, kein Fehler AWT, Swing, JavaFX & SWT 2
D Kein Icon beim JTabbedPane AWT, Swing, JavaFX & SWT 1
P Kein Bild wird angezeigt bei ImageIcon AWT, Swing, JavaFX & SWT 16
krgewb Kein src-Verzeichnis AWT, Swing, JavaFX & SWT 1
A Swing CardLayout - kein Wechsel möglich AWT, Swing, JavaFX & SWT 5
Wurstkopp JavaFX JavaFX KeyEvent kein Zahlencode um unbekannte Mediatasten auszuwerten? AWT, Swing, JavaFX & SWT 0
Nabbit Über JList kein JPopupMenu AWT, Swing, JavaFX & SWT 2
S Kein JFrame unter Mac? AWT, Swing, JavaFX & SWT 8
F Gui weicht von Designpreview ab (kein fensterrahmen, andere größe) AWT, Swing, JavaFX & SWT 13
Z AWT JLabel setzt kein neuen Text AWT, Swing, JavaFX & SWT 6
Seikuassi Swing JTextField nimmt kein Einfügen (Strg+V) an AWT, Swing, JavaFX & SWT 4
T JavaFX ControlsFX-Notification öffnet nicht wenn kein JavaFX-Fenster offen. AWT, Swing, JavaFX & SWT 1
M Kein Zeichnen der Figuren auf JPanel AWT, Swing, JavaFX & SWT 4
P Event Handling Anfängerfrage: ActionEvent bekommt kein Zugriff auf Objekt AWT, Swing, JavaFX & SWT 3
S Kein DnD in allen Java Applikationen AWT, Swing, JavaFX & SWT 5
D Event Handling "Plötzlich" kein mouseMoved-Event AWT, Swing, JavaFX & SWT 2
R Bitte kein Menü bei F10 AWT, Swing, JavaFX & SWT 9
M Kein resize nach Component.setVisible() AWT, Swing, JavaFX & SWT 2
T AWT Graphics G Kein Text erscheint warum? AWT, Swing, JavaFX & SWT 12
C AWT Fokus von Component entfernen, wenn kein anderes vorhanden AWT, Swing, JavaFX & SWT 4
M Swing JMenu verdeckt durch Komponente (aber kein AWT und Swing mix!?) AWT, Swing, JavaFX & SWT 3
P EDT Problem? Kein Aufruf der repaint Methode AWT, Swing, JavaFX & SWT 6
H TextArea zeigt kein Text an AWT, Swing, JavaFX & SWT 6
Y Kein GantChart in einem GridLayout AWT, Swing, JavaFX & SWT 5
D Event in Fenster ausgeben + Observer + kein Plan AWT, Swing, JavaFX & SWT 2
D JTable während edit kein update machen lassen AWT, Swing, JavaFX & SWT 2
M Swing Kein update bei simulierten HTML-Link AWT, Swing, JavaFX & SWT 4
S JTable erlaubt kein Komma um Dezimazahlen einzugeben..? AWT, Swing, JavaFX & SWT 2
S Swing jTextPaine kein Zeilenumbruch nach setText() AWT, Swing, JavaFX & SWT 9
hdi Swing EDT macht kein repaint() AWT, Swing, JavaFX & SWT 2
T Editable ComboBox / kein Weiterspringen AWT, Swing, JavaFX & SWT 12
Spin Innere Klasse : kein static? AWT, Swing, JavaFX & SWT 8
G jpanel macht kein repaint AWT, Swing, JavaFX & SWT 2
V Kein Fokus für Key Bindings auf JPanel bzw JApplet AWT, Swing, JavaFX & SWT 2
G CellEditor - Kein "Textfeld" AWT, Swing, JavaFX & SWT 6
N JCalendar - Kein Datum auswählen AWT, Swing, JavaFX & SWT 3
E Hat Netbeans unter Linux kein Designer für Swing? AWT, Swing, JavaFX & SWT 3
@ JPanel: kein paintComponent() trotz repaint() AWT, Swing, JavaFX & SWT 4
W Kein MouseKlick-Event bei Bewegung AWT, Swing, JavaFX & SWT 2
B Finde kein PrintService der das Attribut PageRanges annimmt AWT, Swing, JavaFX & SWT 22
B [JTable] kein Sortieren der versteckten Columns AWT, Swing, JavaFX & SWT 9
B kein MouseEvent bei zu schneller Bewegung der Maus AWT, Swing, JavaFX & SWT 7
N Threads kein neues Fenster erzeugen lassen AWT, Swing, JavaFX & SWT 4
A Komponente entfernen. Kein neuzeichnen nach validate() AWT, Swing, JavaFX & SWT 2
technolion FileDialog/keine Multi-Selektion vs. JFileCHooser/kein LaF AWT, Swing, JavaFX & SWT 2
G Leider trotz allem kein Icon :( Brauche Hilfe AWT, Swing, JavaFX & SWT 3
M Problem mit verschachtelten Events und kein ausweg in sicht AWT, Swing, JavaFX & SWT 3
Z kriege kein paint AWT, Swing, JavaFX & SWT 13
B Kein Repaint während eines Prozesses. AWT, Swing, JavaFX & SWT 5
K jTable - kein repaint? AWT, Swing, JavaFX & SWT 9
D JDialog: kein Icon nach setResizeable(false) AWT, Swing, JavaFX & SWT 5
K Kein Header in JTable ! AWT, Swing, JavaFX & SWT 8
S Mouselistener erzeugt kein Event in einem Menuitem AWT, Swing, JavaFX & SWT 2
J Tabelle zeigt kein Header AWT, Swing, JavaFX & SWT 5
A Ich kann kein JInternalFrame anzeigen ! AWT, Swing, JavaFX & SWT 7
G für showInputDialog kein eigenes Icon auswählen AWT, Swing, JavaFX & SWT 6
R JTextField - setBackground - kein Effekt AWT, Swing, JavaFX & SWT 5
volcanos Scrollen: JScrollPane mit Graphics g und Java-Fonts extends Frame ? AWT, Swing, JavaFX & SWT 5
S JavaFX JavaFX TableView scrollen färbt falsche Zeilen AWT, Swing, JavaFX & SWT 1
S Nach scrollen verschwindet das zuvor im JPanel gezeichnete AWT, Swing, JavaFX & SWT 2
J JList scrollen AWT, Swing, JavaFX & SWT 3
Bluedaishi JTextArea gefundene Zeile nach Oben Scrollen AWT, Swing, JavaFX & SWT 13
P Swing Horizontales Scrollen mit Shift-Mausrad AWT, Swing, JavaFX & SWT 2
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
W JavaFX Scrollpane elementweise scrollen AWT, Swing, JavaFX & SWT 4
Thallius Automatisches Scrollen zum aktiven JTextView klappt nicht AWT, Swing, JavaFX & SWT 2
J Swing JTextPane mit JScrollPane auf JPanel scrollen nicht AWT, Swing, JavaFX & SWT 6
W Swing Zum Ende einer Scrollpane scrollen AWT, Swing, JavaFX & SWT 2
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
S JavaFX Mehrere TreeTableView's synchron scrollen AWT, Swing, JavaFX & SWT 0
O Tabelle "animiert" Scrollen AWT, Swing, JavaFX & SWT 1
O Swing JTable per Scrollen füllen! AWT, Swing, JavaFX & SWT 7
J AWT choice mit viel Auswahl aktualisiert sich nicht korrekt beim scrollen?! AWT, Swing, JavaFX & SWT 3
P Durch Bilder Scrollen AWT, Swing, JavaFX & SWT 2
U Swing JPane und JScrollpane in JSplitpane-Seite: Scrollen funktioniert nicht AWT, Swing, JavaFX & SWT 3
J JTable wird bei scrollen falsch gezeichnet AWT, Swing, JavaFX & SWT 3
N Touchscreen-Scrollen, wo liegt der Fehler? AWT, Swing, JavaFX & SWT 3
S Swing Scrollpanes: wie kann ich durch Java-Code an den "Anfang" scrollen AWT, Swing, JavaFX & SWT 8
G JTable zentriert scrollen AWT, Swing, JavaFX & SWT 2
D SWING - Ein Composite scrollen AWT, Swing, JavaFX & SWT 6
S Canvas in ScrollPane wird beim scrollen immer neu gezeichnet AWT, Swing, JavaFX & SWT 3
D Swing JScrollbar ganz nach unten scrollen AWT, Swing, JavaFX & SWT 2
K SWT treeviewer scrollen AWT, Swing, JavaFX & SWT 8
F Swing Mehrere Textfelder in Scrollpane einfügen und dann zum Scrollen bringen? AWT, Swing, JavaFX & SWT 4
J Lazy Loading eine JTree während Scrollen AWT, Swing, JavaFX & SWT 11
A Swing Scrollen über JPane AWT, Swing, JavaFX & SWT 20
Dit_ JTextArea zu Zeile X scrollen AWT, Swing, JavaFX & SWT 4
S SWT Zwei Tabellen gleichzeitig Scrollen AWT, Swing, JavaFX & SWT 3
Dragonfire Swing JPanel nur vertikal scrollen AWT, Swing, JavaFX & SWT 4
hdi SWT ScrolledComposite -> Nix mit Scrollen? AWT, Swing, JavaFX & SWT 8
T In einem Label scrollen AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben