Möchte in Java ein Bildstück markieren können

C

CodeRausch

Hi leute ich habe ein kleines Problem und zwar,

ich habe ein Java Programm geschreiben in dem man über einen Button in den FileChooser gelangt und man dort ein Bild auswählen kann. Dieses Bild wird das als Hintergrund in einem JFrame dargestellt.

Ich möchte aber nun das man eine quadratische Markierung in diesem Bild setzen kann und man dann die Koordinaten des linken oberen und des rechten unteren punktes der Markierung ausgegeben bekommt.

Kann mir nun jemand sagen wie ich das hinbekomme?
 
Hallo,

ich habe das gleiche Problem, hast du das schon hinbekommen oder noch nicht.
Ich habe als Aufgabe ein Bild in einer bestimmten Größe zu importieren, etwas drauf darzustellen und auch den Nutzern die Möglichkeit zu geben, ein Stück des Bildes in der o.g. Größe zu zeigen.

Wenn jamand mir helfen könnte, wäre ich sehr dankbar
 
Moin,

schau mal hier, der Code sollte Dir einen Anreiz geben, wie das Ganze aussehen könnte:

Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

public class MouseTracker extends JFrame
        implements MouseListener, MouseMotionListener {

    private JLabel mousePosition;
    int x, y;
    int x1, x2, y1, y2;
    int w, h;
    private JLabel recStart;
    private JLabel recStop;
    private JLabel cords;

    public MouseTracker() {
        super("Rectangle Drawer");

        mousePosition = new JLabel();
        mousePosition.setHorizontalAlignment(SwingConstants.CENTER);
        getContentPane().add(mousePosition, BorderLayout.CENTER);

        JLabel text1 = new JLabel();
        text1.setText("At the center the mouse pointer's coordinates will be displayed.");
        getContentPane().add(text1, BorderLayout.SOUTH);

        recStart = new JLabel();
        getContentPane().add(recStart, BorderLayout.WEST);

        recStop = new JLabel();
        getContentPane().add(recStop, BorderLayout.EAST);

        cords = new JLabel();
        getContentPane().add(cords, BorderLayout.NORTH);


        addMouseListener(this);
        addMouseMotionListener(this);

        setSize(800, 600);
        setVisible(true);
    }

    public void mouseClicked(MouseEvent event) {
        mousePosition.setText("Clicked at [" + event.getX() +
                ", " + event.getY() + "]");
    }

    public void mousePressed(MouseEvent event) {

        mousePosition.setText("Pressed at [" + (x1 = event.getX()) +
                ", " + (y1 = event.getY()) + "]");

        recStart.setText("Start:  [" + x1 +
                ", " + y1 + "]");
    }

    public void mouseReleased(MouseEvent event) {
        mousePosition.setText("Released at [" + (x2 = event.getX()) +
                ", " + (y2 = event.getY()) + "]");

        recStop.setText("End:  [" + x2 +
                ", " + y2 + "]");
        repaint();

    }

    public void mouseEntered(MouseEvent event) {
        mousePosition.setText("Mouse entered at [" + event.getX() +
                ", " + event.getY() + "]");
    }

    public void mouseExited(MouseEvent event) {
        mousePosition.setText("Mouse outside window");
    }

    public void mouseDragged(MouseEvent event) {
        mousePosition.setText("Dragged at [" + (x = event.getX()) +
                ", " + (y = event.getY()) + "]");
        repaint();

    }

    public void mouseMoved(MouseEvent event) {
        mousePosition.setText("Moved at [" + event.getX() +
                ", " + event.getY() + "]");
        repaint();
    }

    public void paint(Graphics g) {
        super.paint(g);
        g.drawString("Start Rec Here", x1, y1);
        g.drawString("End Rec Here", x, y);

        w = x1 - x;
        h = y1 - y;
        w = w * -1;
        h = h * -1;

        g.drawRect(x1, y1, w, h);

        cords.setText("w = " + w + ", h = " + h);
    }

    public static void main(String args[]) {
        MouseTracker application = new MouseTracker();
        application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

Gruß,
Xan
 
Zuletzt bearbeitet:
Schau(t) dir/euch das mal an.
Habe ich mal aus langeweile gecodet. Ist nur eine von den warscheinlich tausend Möglichkeiten, und vielleicht auch nicht besonderst hübsch, aber was solls.

Es funktioniert so nur von NW - SE, die 3 anderen Möglichkeiten müssen ins if noch eingetragen werden, sonst fliegt ne Exception. (<- Faulpelz :eek:)
Da man offensichtlich mousePressed/Released mit mouseMoved nicht verknüpfen kann muss man dafür mouseDragged nehmen, mit dem ich aber keine Erfahrung habe. Deshalb muss man klicken. Nach dem man einen Bereich ausgewählt hat wird der einfach auf die Größe des gesamten Bereiches vergrößert.
 

Anhänge

Hallo,

Vielen Dank für die Hilfe, ich möchte aber mit der rechten Maustaste die Möglichkeit geben ein Bildstück markieren können und das gesamte Bild so vergrößen, dass das markierte Stück auf dem Rahmen passt.

Mit der linken Maustaste möchte ich das bild in allen Richtungen navigieren.

Besten Dank und frohe Weihnachtszeit.
 
Zurück