und schon wieder/immernoch ich!
Hab mir das leichter vorgestellt.
Ich lasse ein Bild anzeigen, frage Koordinaten ab, Transformiere diese und möchte
für die Maus ein Auswahlfenster zeichnen.
Hierbei hänge ich gewaltig.
An sich funzt es bis zum Auswahlfenster.
Entweder bleiben die Linien des Auswahlfensters Bestehen: (ohne nutzen der paintComponents)
oder das Bild wird zerschossen (mit nutzen der paintComponents)
Hänge hier schon wieder Stunden davor
finde aber keinen Fehler im Netz der ähnlich klingt.
Die Methode mit Graphic-Aufruf steht ganz unten
Qulecode:
Bin für die Hilfe dankbar!!
Gruß Grimnir
Hab mir das leichter vorgestellt.
Ich lasse ein Bild anzeigen, frage Koordinaten ab, Transformiere diese und möchte
für die Maus ein Auswahlfenster zeichnen.
Hierbei hänge ich gewaltig.
An sich funzt es bis zum Auswahlfenster.
Entweder bleiben die Linien des Auswahlfensters Bestehen: (ohne nutzen der paintComponents)
oder das Bild wird zerschossen (mit nutzen der paintComponents)
Hänge hier schon wieder Stunden davor
finde aber keinen Fehler im Netz der ähnlich klingt.
Die Methode mit Graphic-Aufruf steht ganz unten
Qulecode:
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.geom.Point2D;
import java.awt.geom.Point2D.Double;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.LineBorder;
public class AufBildZeichnenClass extends JFrame {
static Double clickkkoord1 ;
JLabel lblNewLabel;
Point dragSource;
Point dragTarget;
JPanel panel;
JLabel label;
ImageIcon icon;
BufferedImage image;
File file;
Graphics g;
public AufBildZeichnenClass() {
file = new File("maxresdefault.jpg");
try {
this.image = ImageIO.read(file);
} catch (IOException ex) {
ex.printStackTrace();
}
icon = new ImageIcon(image);
label = new JLabel(icon);
label.setBorder(new LineBorder(Color.WHITE));
panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setBackground(Color.DARK_GRAY);
panel.add(label, BorderLayout.NORTH);
JPanel panel_1 = new JPanel();
panel_1.setLayout(new BorderLayout());
lblNewLabel = new JLabel();
lblNewLabel.setText(" ");
lblNewLabel.setVerticalAlignment(SwingConstants.BOTTOM);
lblNewLabel.setEnabled(false);
panel_1.add(lblNewLabel);
panel.add(panel_1);
getContentPane().add(panel);
int imageBreite = image.getWidth();
int imageHoehe = image.getHeight();
setBounds(700, 10, imageBreite , imageHoehe +60);
setResizable(false);
label.addMouseListener (new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
dragSource = new Point(e.getX(), e.getY());
int bildhöhe = label.getHeight();
int bildbreite = label.getWidth();
double skal = (12000.000/bildhöhe) ; //12000 ist sollwert in Natur
clickkkoord1 = new Point2D.Double ( ((e.getX()* skal) + 66000) ,
(((((e.getY() - bildhöhe )*-1))*skal) + 21000));
lblNewLabel.setText(""+ clickkkoord1);
System.out.println(((Math.round((clickkkoord1.x)*1000))/1000.000));
}
public void mouseReleased(MouseEvent e) {
int bildhöhe = label.getHeight();
int bildbreite = label.getWidth();
double skal = (12000.000/bildhöhe); //12000 ist sollwert in Natur
Double clickkkoord2 = new Point2D.Double ( ((e.getX()* skal) + 66000) ,
(((((e.getY() - bildhöhe )*-1))*skal) + 21000));
lblNewLabel.setText(clickkkoord1 + " \t\t"+ clickkkoord2);
System.out.println(clickkkoord2);
dragSource = null;
dragTarget = null;
}});
label.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent ev) {
dragTarget = new Point(ev.getX(), ev.getY());
lblNewLabel.setText(dragTarget.toString());
int bildhöhe = label.getHeight();
if (dragSource != null && dragTarget != null) {
kastenzeichnen();
}
}
});
}
void kastenzeichnen() {
g = image.getGraphics();
paintComponents(g); // Wenn an dieser stelle paintComponents ausgeführt
// wird macht das Auswahlfenster was es soll, das
// Bild jedoch zerstückelt
g.setColor(Color.WHITE);
g.drawRect(dragSource.x, dragSource.y,
(dragTarget.x - dragSource.x), (dragTarget.y - dragSource.y));
repaint();
}
public static void main(String args[]) {
AufBildZeichnenClass cl = new AufBildZeichnenClass();
cl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cl.setVisible(true);
}
}
Bin für die Hilfe dankbar!!
Gruß Grimnir