Verdchiebung beim Zeichnen

Status
Nicht offen für weitere Antworten.
K

k-s

Gast
Code:
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class LineRectOval
{
  public static void main(String args[])
  {new MyFrame("LineRectOval");}
}

class MyFrame extends JFrame implements ActionListener
{
  private Point a = null;
  private Point b = null;

  JButton bLine = new JButton("Line");
  JButton bRectangle = new JButton("Rectangle");
  JButton bOval = new JButton("Oval");
  
  JPanel zFlaeche = new JPanel(new GridLayout(1,1));
  JPanel panel = new JPanel();
  
  MyFrame(String s)
  {
    super(s);

    getContentPane().setLayout(new BorderLayout());
    panel.add(bLine); panel.add(bRectangle); panel.add(bOval);
    getContentPane().add(panel, BorderLayout.SOUTH);
    getContentPane().add(zFlaeche, BorderLayout.CENTER);

    zFlaeche.setBackground(Color.WHITE);
    zFlaeche.setBorder(BorderFactory.createLineBorder(Color.BLACK));

    bLine.addActionListener(this);bLine.setActionCommand("LINE");
    bRectangle.addActionListener(this);bRectangle.setActionCommand("RECTANGLE");
    bOval.addActionListener(this);bOval.setActionCommand("OVAL");
    
    addMouseListener(new MouseAdapter()
                                       {
                                         public void mouseClicked(MouseEvent e)
                                         {if(a==null){a = e.getPoint();} else{b = e.getPoint();}};
                                       });

    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    setLocation( (d.width-900)/2 , (d.height-900)/2 );
    setSize(900, 900);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);
  }
  
  public void actionPerformed(ActionEvent e)
  {
    if((a!=null)&(b!=null))
    {
      int obenlinks_x,obenlinks_y,breite,hoehe;
      obenlinks_x = (int)Math.min(a.getX(), b.getX());
      obenlinks_y = (int)Math.min(a.getY(), b.getY());
      breite      = (int)Math.abs(a.getX()-b.getX());
      hoehe        = (int)Math.abs(a.getY()-b.getY());

      if (e.getActionCommand().equals("LINE"))
         {zFlaeche.getGraphics().drawLine((int)a.getX(),(int)a.getY(),(int)b.getX(),(int)b.getY());}
      else
          if (e.getActionCommand().equals("RECTANGLE"))
             {zFlaeche.getGraphics().drawRect(obenlinks_x,obenlinks_y,breite,hoehe);}
          else
               if (e.getActionCommand().equals("OVAL"))
                  { int radius = (int)Math.sqrt((breite*breite)+(hoehe*hoehe));
                    zFlaeche.getGraphics().drawOval
                                                  ((int)a.getX()-radius,(int)a.getY()-radius,2*radius,2*radius);}
    }
    a = null; b = null;
  }
}

Bei mir verschieben sich alle Figuren auf der Zeichenfläche um paar Pixeln nach unten-rechts, habe keine Ahnung warum Ö_ö
 

André Uhres

Top Contributor
Weil der MouseListener am Frame und nicht an der Zeichenfläche hängt:
Code:
package paint;
/*
 * LineRectOval2.java
 */
import java.awt.image.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class LineRectOval2 {
    public static void main(String args[]) {
        new MyFrame("LineRectOval2");}
}
class MyFrame extends JFrame implements ActionListener {
    private Point a = null;
    private Point b = null;
    private JButton bLine = new JButton("Line");
    private JButton bRectangle = new JButton("Rectangle");
    private JButton bOval = new JButton("Oval");
    private ZeichenFlaeche zFlaeche = new ZeichenFlaeche();
    private JPanel panel = new JPanel();
    private Image bildBuffer;
    private Graphics2D bildBufferGraphics;
    MyFrame(String s) {
        super(s);
        getContentPane().setLayout(new BorderLayout());
        panel.add(bLine); panel.add(bRectangle); panel.add(bOval);
        getContentPane().add(panel, BorderLayout.SOUTH);
        getContentPane().add(zFlaeche, BorderLayout.CENTER);
        zFlaeche.setBackground(Color.WHITE);
        zFlaeche.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        bLine.addActionListener(this);bLine.setActionCommand("LINE");
        bRectangle.addActionListener(this);bRectangle.setActionCommand("RECTANGLE");
        bOval.addActionListener(this);bOval.setActionCommand("OVAL");
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
        setLocation( (d.width-900)/2 , (d.height-900)/2 );
        setSize(900, 900);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }
    public void actionPerformed(ActionEvent e) {
        if((a!=null)&(b!=null)) {
            int obenlinks_x,obenlinks_y,breite,hoehe;
            obenlinks_x = (int)Math.min(a.getX(), b.getX());
            obenlinks_y = (int)Math.min(a.getY(), b.getY());
            breite      = (int)Math.abs(a.getX()-b.getX());
            hoehe        = (int)Math.abs(a.getY()-b.getY());
            if (e.getActionCommand().equals("LINE")) {
                bildBufferGraphics.drawLine((int)a.getX(),(int)a.getY(),(int)b.getX(),(int)b.getY());
            }else if (e.getActionCommand().equals("RECTANGLE")) {
                bildBufferGraphics.drawRect(obenlinks_x,obenlinks_y,breite,hoehe);
            }else if (e.getActionCommand().equals("OVAL")) {
                int radius = (int)Math.sqrt((breite*breite)+(hoehe*hoehe));
                bildBufferGraphics.drawOval((int)a.getX()-radius,(int)a.getY()-radius,2*radius,2*radius);
            }
            zFlaeche.repaint();
        }
        a = null; b = null;
    }
    class ZeichenFlaeche extends JPanel{
        public ZeichenFlaeche(){
            addMouseListener(new MouseAdapter() {
                public void mouseClicked(MouseEvent e) {
                    if(a==null){a = e.getPoint();} else{b = e.getPoint();}};
            });
        }
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            if(bildBuffer == null){
                //Bildpuffer erzeugen:
                int w = getWidth();
                int h = getHeight();
                bildBuffer = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
                bildBufferGraphics = (Graphics2D)bildBuffer.getGraphics();
                bildBufferGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                        RenderingHints.VALUE_ANTIALIAS_ON);
                bildBufferGraphics.setBackground(Color.WHITE);
                bildBufferGraphics.clearRect(0, 0, w, h);
                bildBufferGraphics.setColor(Color.BLACK);
            }
            //Bildpuffer malen:
            g.drawImage(bildBuffer, 0, 0, null);
        }
    }
}
________________________________________
Fahrt fort, einander zu ertragen und einander bereitwillig zu vergeben.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B im JFrame gesetzte Hintergrundfarbe wird beim Ausführen nicht gezeigt AWT, Swing, JavaFX & SWT 2
Juelin Problem beim Laden Controller AWT, Swing, JavaFX & SWT 2
O Swing Icon verschwindet beim Verschieben eines JLabels AWT, Swing, JavaFX & SWT 8
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
L Java FX Exception beim start AWT, Swing, JavaFX & SWT 2
L JSplitPane Divider Location beim Maximieren AWT, Swing, JavaFX & SWT 6
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
J ObservableList wirft exception beim zweiten füllen. AWT, Swing, JavaFX & SWT 4
emma_louisa JavaFX Werte beim Aufrufen des Fensters übernehmen (SceneBuilder) AWT, Swing, JavaFX & SWT 3
Tronert JavaFX Fehler beim Ändern der font-weight AWT, Swing, JavaFX & SWT 7
G Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8
D Kein Icon beim JTabbedPane AWT, Swing, JavaFX & SWT 1
L JavaFX LoadException beim Laden von JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
N Eclipse - GUI - MacBook - Buttonsichtbarkeit beim Anlegen/Erstellen AWT, Swing, JavaFX & SWT 14
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
Tommy135 JavaFX JavaFX Fehler beim Scenewechsel AWT, Swing, JavaFX & SWT 23
E Swing Miserable Performance beim Ändern der Hintergrundfarbe von JLabels AWT, Swing, JavaFX & SWT 3
L Charset beim Drucken falsch AWT, Swing, JavaFX & SWT 2
MaxG. Swing Farbe von Button beim drücken ändern AWT, Swing, JavaFX & SWT 4
H JavaFX Kriege fehler beim Fenster wechseln AWT, Swing, JavaFX & SWT 7
D Swing Swing Objekte sehen im Entwurf anders aus als beim Ausführen AWT, Swing, JavaFX & SWT 3
R Swing Programm läuft nur beim Debuggen korrekt ab AWT, Swing, JavaFX & SWT 4
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
K Probleme beim JPasswordField AWT, Swing, JavaFX & SWT 11
W Kodierung (CharSet) beim Schreiben ändern AWT, Swing, JavaFX & SWT 1
D Swing JComboBox (DefaultComboBoxModel) überschreibt Eintrag beim erstellen AWT, Swing, JavaFX & SWT 0
T JButton überlagern sich und werden erst beim Mausscrollen sichtbar AWT, Swing, JavaFX & SWT 2
Thallius Swing "..." beim JLabel verhindern? AWT, Swing, JavaFX & SWT 3
P Scrollbalken verschwinden beim Zoomen AWT, Swing, JavaFX & SWT 4
A JavaFX DatePicker in Swing beim Start nicht sichtbar AWT, Swing, JavaFX & SWT 2
D JavaFX Probleme bei Service-Klasse beim ändern der GUI AWT, Swing, JavaFX & SWT 8
D JavaFX (WebStart) Graues Fenster beim Start AWT, Swing, JavaFX & SWT 4
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
O Swing JList beim Klicken in der GUI erstellen AWT, Swing, JavaFX & SWT 6
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
R Hilfe beim ändern des Hintergrundes eines JFrames AWT, Swing, JavaFX & SWT 9
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
L JavaFX Verzögerung beim Laden von Daten AWT, Swing, JavaFX & SWT 6
S NullPointer Exception beim Laden von Bildern AWT, Swing, JavaFX & SWT 11
I JavaFX Speichern der eingefügten Einträge beim Neustart des Programms AWT, Swing, JavaFX & SWT 2
J JavaFx/SceneBuilder/Felder beim verlassen prüfen AWT, Swing, JavaFX & SWT 1
D JavaFX Beim Schließen (Rotes X) Code ausführen AWT, Swing, JavaFX & SWT 1
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
C Gesucht: Hilfe beim programmieren. AWT, Swing, JavaFX & SWT 1
S Action durchführen beim Programm beenden AWT, Swing, JavaFX & SWT 3
J JavaFX Tooltip Verzögerung beim ersten Anzeigen AWT, Swing, JavaFX & SWT 4
C Hilfe beim programmieren mit studiumgebundenes Projekt AWT, Swing, JavaFX & SWT 1
A JavaFX Hilfe beim Design eines Quiz AWT, Swing, JavaFX & SWT 2
H JavaFX Freezes beim Zeichnen mit Canvas AWT, Swing, JavaFX & SWT 3
D JavaFX build.fxbuild error beim Erstellen einer exe AWT, Swing, JavaFX & SWT 2
C Java FX Probleme beim Schließen einer Stage AWT, Swing, JavaFX & SWT 11
M Swing Vorgehen beim Aufruf der Klassen/Methoden AWT, Swing, JavaFX & SWT 7
T Swing NullPointerException beim auslesen von jTextField - Anfänger! AWT, Swing, JavaFX & SWT 3
R Swing Elemente verschieben sich im GBL beim Ein/Ausblenden AWT, Swing, JavaFX & SWT 0
N Swing JTree Problem beim erstellen der Knoten AWT, Swing, JavaFX & SWT 0
F Breite beim GridBagLayout festlegen AWT, Swing, JavaFX & SWT 2
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
R TriangleMesh verschwindet teilweise beim resizen des Frames, sowie beim rotieren? AWT, Swing, JavaFX & SWT 1
S Swing Warum funktioniert der automatische Zeilenumbruch mit arabischen Zeichen beim JTextPane nicht AWT, Swing, JavaFX & SWT 3
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
S Größe der Komponenten, beim ändern der größe des Frames, mit ändern! AWT, Swing, JavaFX & SWT 2
K Swing Automatisches "Packen" beim "Neu-Painten" AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben