tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
480
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    JustinSane JustinSane ist offline Grünschnabel
    Registriert seit
    Jan 2012
    Beiträge
    2
    Hallo!

    hab jetzt schon länger in Foren, tutorials, oracle usw gesucht, aber leider zu meinem Problem keine wirkliche Lösung gefunden.

    Es geht grundsätzlich darum, dass ich ein Panel habe, dass sich aus 2 weiteren Panels zusammen setzt (alles Swing-Komponenten). Im oberen Panel werden meine Buttons dargestellt und im unteren soll ein Bild angezeigt werden. (soll ein einfaches Bildbearbeitungsprogramm werden)
    Die App(Frame) soll dann aus diesem Panel bestehen und wenn ein Bild geöffnet wird, die Methode initImg(img) aufgerufen werden.
    Das Problem ist nun jedoch das, dass mein Bild nur für einen Bruchteil einer Sekunde gemalen wird und dann sofort wieder verschwindet. Dabei habe ich meiner Meinung die paintComponents-Methode doch richtig überschrieben, oder?

    Der Quellcode des Jpanels ist

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    
    public class ImageEditingPanel extends javax.swing.JPanel {
     
        private boolean pictureLoaded;
        private float displayedHeight;
        private float displayedWidth;
        private int horCenter;
        private int vertCenter;
        private float imgWidth;
        private float imgHeight;
        private Image img;
        private boolean crop;
        private Rectangle rect;
        private Image originalImg;
        private float[] displayedSizes = new float[2];
        private DisplayImage displayImg;
        private ObserveImageChanges changeObserver; //enthält undo/redo-Funktionen
        private ArrayList<Image> undo;
        private ArrayList<Image> redo;
        private boolean init;
     
        public ImageEditingPanel() {
            initComponents();
        }
     
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (!init) {
                initComponents();
                init = true;
            }
            if (pictureLoaded) {
                horCenter = editingPanel.getWidth() / 2 - (int) displayedWidth / 2;
                vertCenter = editingPanel.getHeight() / 2 - (int) displayedHeight / 2;
                g.drawImage(img, horCenter, vertCenter, (int) displayedWidth, (int) displayedHeight, this);
            }
            if (crop) {
                Graphics2D g2 = (Graphics2D) g;
                g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                        RenderingHints.VALUE_ANTIALIAS_ON);
                g2.setColor(Color.red);
                g2.setStroke(new BasicStroke(5));
                g2.draw(rect);
                CropImageShape cropImgShape = new CropImageShape(this);
                this.addMouseListener(cropImgShape);
                this.addMouseMotionListener(cropImgShape);
            }
        }
     
        public void initImage(Image img) {
            this.originalImg = img;
            this.img = originalImg;
            imgWidth = img.getWidth(this);
            imgHeight = img.getHeight(this);
            displayImg = new DisplayImage(img, editingPanel);
            displayedSizes = displayImg.resize2WindowHeight();
            displayedWidth = displayedSizes[0];
            displayedHeight = displayedSizes[1];
            changeObserver = new ObserveImageChanges(img);
            undo = changeObserver.getUndo();
            redo = changeObserver.getRedo();
            pictureLoaded = true;
            redrawImg(img);
        }
     
        public void redrawImg(Image img) {
            changeObserver.observeImageChanges(img);
            this.img = img;
            this.repaint();
        }
    Geändert von sheel (16.01.12 um 08:28 Uhr) Grund: Codetags
     

  2. #2
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist offline Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Hi und willkommen bei tutorials.de,
    in deinem Code kann ich weitestgehend keinen Fehler finden, der auf dein Problem zurückzuführen wäre. Kannst du bitte den Code posten, in dem du mit dieser Klasse kommunizierst?

    Und verwende bitte die Java-Code Tags. Ein Beispiel hierfür findest du in meiner Signatur.

    Gruß

    Fabio
     
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  3. #3
    JustinSane JustinSane ist offline Grünschnabel
    Registriert seit
    Jan 2012
    Beiträge
    2
    hallo!

    und danke für die Hinweise! Werd ich das nächste mal beachten!

    aber jetzt noch mal zu meinem Problem:
    Hab grundsätzlich das Problem gelöst, auch wenn ich keine Ahnung habe, was und wieso falsch an meinem Code gewesen sein soll...

    Aber hab dann das Image nicht mehr vom Typ Image verwendet sondern BufferedImage verwendet und auf einmal hat es funktioniert!
    Hab dann versucht das Problem noch genauer zu identifizieren und das Programm auf den Konstruktor zu reduzieren, so dass von mir keine einzige Zeile Code ausgeführt wurde und Trotzdem wurde mir das JPanel (Buttons usw.) nicht gezeichnet (initComponents hab ich natürlich drinnen gelassen...). Glaube also das mir der GUI-Builder von Netbeans da irgendwas zusammengehaut hat!
    Werd mir in Zukunft also genauer überlegen, ob ich die GUI nicht eher programmatisch erzeuge...
     

Ähnliche Themen

  1. Antworten: 16
    Letzter Beitrag: 05.01.12, 14:05
  2. Jpanel verschwindet unter JButton
    Von MaximaxXx im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 22.06.10, 21:34
  3. XP-DFÜ-Probleme(beendet nach kurzer Zeit die Verbindung)
    Von therealcharlie im Forum Office-Anwendungen
    Antworten: 1
    Letzter Beitrag: 13.04.05, 04:15
  4. MSQL beendet sich immer selbst nach kurzer Zeit
    Von GuenterS im Forum Relationale Datenbanksysteme
    Antworten: 6
    Letzter Beitrag: 27.04.03, 17:13
  5. divx: wiedergabe bricht nach kurzer zeit ab !
    Von nils11 im Forum Microsoft Windows
    Antworten: 4
    Letzter Beitrag: 15.04.02, 15:14