Neu zeichnen vergessen?

R

Random

Gast
Tag - ich bins wieder. Es geht um mein aktuelles Programm. Erstmal der Quelltext:

EditorForm.java
Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * EditorForm.java
 *
 * Created on 13.06.2011, 15:17:50
 */

package H_Game;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileFilter;

/**
 *
 * @author Carl Hamann
 */
public class EditorForm extends javax.swing.JFrame
{

    // ************************************

    // ----- Liste der hinzugefügten Bilder -----
    private ArrayList <ForegroundPic> PicList = new ArrayList <ForegroundPic>();

    // ----- Das Hintergrundbild -----
    private BackgroundPic BackGround = null;

    // ************************************




    /** Creates new form EditorForm */
    public EditorForm()
    {
        initComponents();
        InitHEditor();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        MenuBar = new javax.swing.JMenuBar();
        jMenuGeneral = new javax.swing.JMenu();
        jMenuItemSetBackground = new javax.swing.JMenuItem();
        jMenuAdd = new javax.swing.JMenu();
        jMenuItemLoadImg = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("H_Editor");
        setAlwaysOnTop(true);
        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentResized(java.awt.event.ComponentEvent evt) {
                formComponentResized(evt);
            }
        });

        jMenuGeneral.setText("Allgemein");

        jMenuItemSetBackground.setText("Hintergrundbild laden");
        jMenuItemSetBackground.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemSetBackgroundActionPerformed(evt);
            }
        });
        jMenuGeneral.add(jMenuItemSetBackground);

        MenuBar.add(jMenuGeneral);

        jMenuAdd.setText("Hinzufügen");

        jMenuItemLoadImg.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_I, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemLoadImg.setText("Bild");
        jMenuItemLoadImg.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemLoadImgActionPerformed(evt);
            }
        });
        jMenuAdd.add(jMenuItemLoadImg);

        MenuBar.add(jMenuAdd);

        setJMenuBar(MenuBar);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-748)/2, (screenSize.height-396)/2, 748, 396);
    }// </editor-fold>                        

    private void jMenuItemLoadImgActionPerformed(java.awt.event.ActionEvent evt)                                                 
    {                                                     
        // Über Filechooser Datei suchen
        JFileChooser PicChooser = new JFileChooser();
        PicChooser.setFileFilter(new FileFilter()
        {
            @Override public boolean accept (File f)
            {
                return f.getName().endsWith(".jpg")
                        || f.getName().endsWith(".jpeg")
                        || f.getName().endsWith(".png")
                        || f.getName().endsWith(".gif")
                        || f.isDirectory();
            }

            @Override public String getDescription ()
            {
                return "Bilddateien";
            }
        });

        int retVal = PicChooser.showOpenDialog(this);

        if (retVal == JFileChooser.APPROVE_OPTION)
        {
            // Neues Bild eintragen
            PicList.add(new ForegroundPic(0, 0, PicChooser.getSelectedFile().getPath(), this));
            getContentPane().add(PicList.get(PicList.size()-1));
            RepaintPics();

            // In Order img kopieren
            File SrcFile = new File(PicChooser.getSelectedFile().getPath());
            File DestFile = new File("img/" + PicChooser.getSelectedFile().getName());

            try
            {
                FileChannel iChannel = new FileInputStream(SrcFile).getChannel();
                FileChannel oChannel = new FileOutputStream(DestFile).getChannel();

                iChannel.transferTo(0, iChannel.size(), oChannel);

                if (iChannel != null)
                    iChannel.close();
                if (oChannel != null)
                    oChannel.close();
            }
            catch (IOException ex)
            {
                Logger.getLogger(EditorForm.class.getName()).log(Level.SEVERE, null, ex);
                JOptionPane.showMessageDialog(null, "Datei nicht gefunden!");
            }
        }
    }                                                

    private void jMenuItemSetBackgroundActionPerformed(java.awt.event.ActionEvent evt)                                                       
    {                                                           
        // Über Filechooser Datei suchen
        JFileChooser PicChooser = new JFileChooser();
        PicChooser.setFileFilter(new FileFilter()
        {
            @Override public boolean accept (File f)
            {
                return f.getName().endsWith(".jpg")
                        || f.getName().endsWith(".jpeg")
                        || f.getName().endsWith(".png")
                        || f.getName().endsWith(".gif")
                        || f.isDirectory();
            }

            @Override public String getDescription ()
            {
                return "Bilddateien";
            }
        });

        int retVal = PicChooser.showOpenDialog(this);

        if (retVal == JFileChooser.APPROVE_OPTION)
        {
            // Neues Bild anzeigen
            BackGround = new BackgroundPic(PicChooser.getSelectedFile().getPath());
            BackGround.setLayout(null);
            setContentPane(BackGround);
            RepaintPics();

            // In Order img kopieren
            File SrcFile = new File(PicChooser.getSelectedFile().getPath());
            File DestFile = new File("img/" + PicChooser.getSelectedFile().getName());

            try
            {
                FileChannel iChannel = new FileInputStream(SrcFile).getChannel();
                FileChannel oChannel = new FileOutputStream(DestFile).getChannel();

                iChannel.transferTo(0, iChannel.size(), oChannel);

                if (iChannel != null)
                    iChannel.close();
                if (oChannel != null)
                    oChannel.close();
            }
            catch (IOException ex)
            {
                Logger.getLogger(EditorForm.class.getName()).log(Level.SEVERE, null, ex);
                JOptionPane.showMessageDialog(null, "Datei nicht gefunden!");
            }
        }
    }                                                      

    private void formComponentResized(java.awt.event.ComponentEvent evt)                                      
    {                                          
        //JOptionPane.showMessageDialog(null, "Resized!");
    }                                     

    private void InitHEditor ()
    {
        // ggf. Ordner erstellen
        File DirImg = new File("img");
        if (!DirImg.exists())
            DirImg.mkdir();
    }

    public void RepaintPics ()
    {
        for (ForegroundPic fp : PicList)
            fp.repaint();
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[])
    {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new EditorForm().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JMenuBar MenuBar;
    private javax.swing.JMenu jMenuAdd;
    private javax.swing.JMenu jMenuGeneral;
    private javax.swing.JMenuItem jMenuItemLoadImg;
    private javax.swing.JMenuItem jMenuItemSetBackground;
    // End of variables declaration                   
}

ForegroundPic.java
Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package H_Game;

import java.awt.Cursor;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JLabel;

/**
 *
 * @author Carl Hamann
 */
public class ForegroundPic extends JLabel
{
    private ImageIcon imgico = null;
    private Image img = null;
    private EditorForm eForm = null;
    private int x, y;

    ForegroundPic (int x, int y, String path, final EditorForm eForm)
    {
        this.x = x;
        this.y = y;
        this.eForm = eForm;

        Toolkit toolkit = Toolkit.getDefaultToolkit();
        MediaTracker mediatracker = new MediaTracker(this);
        img = toolkit.getImage(path);

        mediatracker.addImage(img, 0);

        try
        {
            mediatracker.waitForID(0);
        }
        catch (InterruptedException e)
        {
            img = null;
        }

        // Icon laden
        imgico = new ImageIcon(img);

        this.setIcon(imgico);
        this.setSize(getPreferredSize());
        this.setLocation(x, y);

        addMouseMotionListener(new java.awt.event.MouseMotionAdapter()
        {
            @Override public void mouseDragged(java.awt.event.MouseEvent evt)
            {
                PicMouseDragged(evt);
            }
        });

        addMouseListener(new java.awt.event.MouseAdapter()
        {

            @Override public void mouseReleased(java.awt.event.MouseEvent evt)
            {
                PicMouseReleased(evt);
            }
        });
    }

    ForegroundPic (int x, int y, URL path, final EditorForm eForm)
    {
        this.x = x;
        this.y = y;

        Toolkit toolkit = Toolkit.getDefaultToolkit();
        MediaTracker mediatracker = new MediaTracker(this);
        img = toolkit.createImage(path);

        mediatracker.addImage(img, 0);

        try
        {
            mediatracker.waitForID(0);
        }
        catch (InterruptedException e)
        {
            img = null;
        }

        // Icon laden
        imgico = new ImageIcon(img);

        this.setIcon(imgico);
        this.setSize(getPreferredSize());
        this.setLocation(x, y);
        
        addMouseMotionListener(new java.awt.event.MouseMotionAdapter()
        {
            @Override public void mouseDragged(java.awt.event.MouseEvent evt)
            {
                PicMouseDragged(evt);
            }
        });

        addMouseListener(new java.awt.event.MouseAdapter()
        {

            @Override public void mouseReleased(java.awt.event.MouseEvent evt)
            {
                PicMouseReleased(evt);
            }
        });
    }

    public void SetX (int x)
    {
        this.x = x;
    }

    public void SetY (int y)
    {
        this.y = y;
    }

    public int GetX ()
    {
        return x;
    }

    public int GetY ()
    {
        return y;
    }

    public void PicMouseDragged (MouseEvent evt)
    {
        // Cursor ändern
        eForm.setCursor(new Cursor(Cursor.MOVE_CURSOR));

        // Position ändern
        Rectangle rect = this.getBounds();
        x = rect.x + evt.getX();
        y = rect.y + evt.getY();

        // Location ändern
        setLocation(rect.x + evt.getX(),
                rect.y + evt.getY());

    }

    public void PicMouseReleased(MouseEvent evt)
    {
        eForm.setCursor(Cursor.DEFAULT_CURSOR);
    }
}

BackgroundPic.java
Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package H_Game;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import javax.swing.JPanel;

/**
 *
 * @author Carl Hamann
 */
public class BackgroundPic extends JPanel
{
    private Image img = null;

    BackgroundPic (String path)
    {
        if (path != null)
        {
            MediaTracker mt = new MediaTracker(this);
            img = Toolkit.getDefaultToolkit().getImage(path);
            mt.addImage(img, 0);

            try
            {
                mt.waitForAll();
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
        }
    }
    
    @Override protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
    }
}

Das Problem ist die Methode [c]jMenuItemSetBackgroundActionPerformed[/c] (EditorForm.java). Hierbei kann man ein Hintergrundbild für das Frame (bzw. die ContentPane) bestimmen. Wenn ich dann ein Hintergrundbilde lade bleibt der Hintergrund zunächst unverändert, erst wenn ich die Größe des Fensters ändere wird das Hintergrundbild angezeigt. Wenn ich jedoch schon zuvor mit der Methode [c]jMenuItemLoadImgActionPerformed[/c] (auch EditorForm.java) Bilder geladen habe werden diese dannach nicht mehr angezeigt (nach dem Laden des Hintergrundbildes (also vor dem Größe-Ändern) sind sie noch sichtbar). Kann mir jemand sagen, wie ich das Hintergrundbild gleich anzeigen lassen kann und dannach die ForegroundPics zeichnen lassen kann?

Vielen Dank im Voraus!
 

javaDev2011

Mitglied
Hi,

bei JFrame gibts die Methode validate(), wenn es nichts hilft, währe eine Notlösung einfach den JFrame kurz 1px größer zu machen und danach zurück.

javaDev2011
 
R

Random

Gast
Danke erstmal. Das Hintergrundbild wird nun angezeigt, dennoch werden die Vordergrundbilder nicht neu gezeichnet...
 
R

Random

Gast
Also die Vordergrundbilder sind keine Panels sondern Labels. Wie ich sie hinzufüge sieht man im Code:

private void jMenuItemLoadImgActionPerformed(java.awt.event.ActionEvent evt)
[JAVA=133]// Neues Bild eintragen
PicList.add(new ForegroundPic(0, 0, PicChooser.getSelectedFile().getPath(), this));
getContentPane().add(PicList.get(PicList.size()-1)); // Bild der Contentpane hinzufügen
RepaintPics();[/code]

Das Label (und das Hintergrundpanel) haben eigentlich kein Layout, bzw. habe ich ihnen kein besonderes zugewiesen.
 

Marco13

Top Contributor
Ja, in dem Code steht viel, und auf ziemlich unlesbare Weise. Mach' mal irgendwo am Anfang ein
sonstwas.getContentPane().setLayout(new FlowLayout());
oder so.
 
R

Random

Gast
Falls mein Post arrogant rüber gekommen ist entschuldige ich mich dafür. Auch die große Codemasse tut mir Leid - wenn ich das nächste Mal ein Problem habe kürze ich...

Nun zu deinem Post: Wenn ich z.B. FlowLayout setzte habe ich das Problem, dass ich die Vordergrundbilder nicht mehr absolut positionieren kann.
 

Marco13

Top Contributor
Aber das ContentPane hat schon ein Layout. Wenn du sie absolut positionieren willst, vielleicht sowas wie
getContentPane().setLayout(null);
und dann eben
Component pic = PicList.get(PicList.size()-1);
getContentPane().add(pic);
pic.setBounds(10,20,40,50);
 
R

Random

Gast
Was du vorgeschlagen hast, hat leider nichts geändert... Ich denke nicht, dass ich die Bounds noch extra setzten muss, das wird ja schon im Konstruktor (von ForegroundPic) über setLocation und setSize geregelt (gut ich könnte beide Befehle zu einem zusammenfassen...). Sofern ich das richtig verstanden habe sollte ich den Code bei [c]private void jMenuItemLoadImgActionPerformed(java.awt.event.ActionEvent evt)[/c] setzen.
 

Marco13

Top Contributor
Ja, das setBounds machst du schon indirekt über setPosition und setSize, das bringt aber nichts, wenn das ContentPane kein null-Layout hat. Insgesamt ist das aber im Moment nur stochern im Neben undurchsichtigen Codes. Bevor ich mir die Mühe mache, das zusammenzukopieren: Ist der Code compilier- und testbar?
 

Marco13

Top Contributor
Ach moment, was war jetzt der letzte Stand: Der Hintergund geht, aber der Vordergrund nicht? (Der Vordergund hatte bei mir auch ohne eine Änderung funktioniert... nur zur Sicherheit...)
 
R

Random

Gast
Genau. Die Vordergrundbilder werden einfach nicht wieder angezeigt, wenn ich jedoch vorher ein Hintergrundbild lade und dannach die Vordergrundbilder ist alles kein Problem. Und bei dir funktioniert das alles?
 

Marco13

Top Contributor
Ja (abgesehen von dem "logischen" Fehler, dass die Vordergrundbilder verschwinden, sobald man ein Hintergrundbild lädt - aber neu geladene Vordergrundbilder werden angezeigt). Vielleicht sagt ja noch jemand anderes was dazu...?
 
R

Random

Gast
Okay, das funktioniert bei mir auch. Vielleicht weiß jemand anderes wie man das Problem löst...
 

Marco13

Top Contributor
Irgendwie hängt das hier ja noch so in der Luft... Nochmal alles als KSKB zusammenkopiert, vielleicht probiert's dann jemand aus...

Nochmal: So, wie es jetzt hier gepostet ist, starten, dann im Menü "Hinzufügen->Bild" und irgendein Bild einfügen - bei mir wird das sofort angezeigt - und bei dir nicht?

Was passiert, wenn du dann da hinklickst, wo das Bild eigentlich sein müßte (oben links irgendwo) - erscheint es dann?

Java:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileFilter;

import java.awt.Cursor;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JLabel;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import javax.swing.JPanel;


/**
 *
 * @author Carl Hamann
 */
public class EditorForm extends javax.swing.JFrame
{

    // ************************************

    // ----- Liste der hinzugefügten Bilder -----
    private ArrayList <ForegroundPic> PicList = new ArrayList <ForegroundPic>();

    // ----- Das Hintergrundbild -----
    private BackgroundPic BackGround = null;

    // ************************************




    /** Creates new form EditorForm */
    public EditorForm()
    {
        initComponents();
        InitHEditor();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        MenuBar = new javax.swing.JMenuBar();
        jMenuGeneral = new javax.swing.JMenu();
        jMenuItemSetBackground = new javax.swing.JMenuItem();
        jMenuAdd = new javax.swing.JMenu();
        jMenuItemLoadImg = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("H_Editor");
        setAlwaysOnTop(true);
        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentResized(java.awt.event.ComponentEvent evt) {
                formComponentResized(evt);
            }
        });

        jMenuGeneral.setText("Allgemein");

        jMenuItemSetBackground.setText("Hintergrundbild laden");
        jMenuItemSetBackground.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemSetBackgroundActionPerformed(evt);
            }
        });
        jMenuGeneral.add(jMenuItemSetBackground);

        MenuBar.add(jMenuGeneral);

        jMenuAdd.setText("Hinzufügen");

        jMenuItemLoadImg.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_I, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemLoadImg.setText("Bild");
        jMenuItemLoadImg.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemLoadImgActionPerformed(evt);
            }
        });
        jMenuAdd.add(jMenuItemLoadImg);

        MenuBar.add(jMenuAdd);

        setJMenuBar(MenuBar);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-748)/2, (screenSize.height-396)/2, 748, 396);
    }// </editor-fold>

    private void jMenuItemLoadImgActionPerformed(java.awt.event.ActionEvent evt)
    {
        // Über Filechooser Datei suchen
        JFileChooser PicChooser = new JFileChooser();
        PicChooser.setFileFilter(new FileFilter()
        {
            @Override public boolean accept (File f)
            {
                return f.getName().endsWith(".jpg")
                        || f.getName().endsWith(".jpeg")
                        || f.getName().endsWith(".png")
                        || f.getName().endsWith(".gif")
                        || f.isDirectory();
            }

            @Override public String getDescription ()
            {
                return "Bilddateien";
            }
        });

        int retVal = PicChooser.showOpenDialog(this);

        if (retVal == JFileChooser.APPROVE_OPTION)
        {
            // Neues Bild eintragen
            PicList.add(new ForegroundPic(0, 0, PicChooser.getSelectedFile().getPath(), this));
            getContentPane().add(PicList.get(PicList.size()-1));
            RepaintPics();

            // In Order img kopieren
            File SrcFile = new File(PicChooser.getSelectedFile().getPath());
            File DestFile = new File("img/" + PicChooser.getSelectedFile().getName());

            try
            {
                FileChannel iChannel = new FileInputStream(SrcFile).getChannel();
                FileChannel oChannel = new FileOutputStream(DestFile).getChannel();

                iChannel.transferTo(0, iChannel.size(), oChannel);

                if (iChannel != null)
                    iChannel.close();
                if (oChannel != null)
                    oChannel.close();
            }
            catch (IOException ex)
            {
                Logger.getLogger(EditorForm.class.getName()).log(Level.SEVERE, null, ex);
                JOptionPane.showMessageDialog(null, "Datei nicht gefunden!");
            }
        }
    }

    private void jMenuItemSetBackgroundActionPerformed(java.awt.event.ActionEvent evt)
    {
        // Über Filechooser Datei suchen
        JFileChooser PicChooser = new JFileChooser();
        PicChooser.setFileFilter(new FileFilter()
        {
            @Override public boolean accept (File f)
            {
                return f.getName().endsWith(".jpg")
                        || f.getName().endsWith(".jpeg")
                        || f.getName().endsWith(".png")
                        || f.getName().endsWith(".gif")
                        || f.isDirectory();
            }

            @Override public String getDescription ()
            {
                return "Bilddateien";
            }
        });

        int retVal = PicChooser.showOpenDialog(this);

        if (retVal == JFileChooser.APPROVE_OPTION)
        {
            // Neues Bild anzeigen
            BackGround = new BackgroundPic(PicChooser.getSelectedFile().getPath());
            BackGround.setLayout(null);
            setContentPane(BackGround);
            RepaintPics();

            // In Order img kopieren
            File SrcFile = new File(PicChooser.getSelectedFile().getPath());
            File DestFile = new File("img/" + PicChooser.getSelectedFile().getName());

            try
            {
                FileChannel iChannel = new FileInputStream(SrcFile).getChannel();
                FileChannel oChannel = new FileOutputStream(DestFile).getChannel();

                iChannel.transferTo(0, iChannel.size(), oChannel);

                if (iChannel != null)
                    iChannel.close();
                if (oChannel != null)
                    oChannel.close();
            }
            catch (IOException ex)
            {
                Logger.getLogger(EditorForm.class.getName()).log(Level.SEVERE, null, ex);
                JOptionPane.showMessageDialog(null, "Datei nicht gefunden!");
            }
        }
    }

    private void formComponentResized(java.awt.event.ComponentEvent evt)
    {
        //JOptionPane.showMessageDialog(null, "Resized!");
    }

    private void InitHEditor ()
    {
        // ggf. Ordner erstellen
        File DirImg = new File("img");
        if (!DirImg.exists())
            DirImg.mkdir();
    }

    public void RepaintPics ()
    {
        for (ForegroundPic fp : PicList)
            fp.repaint();
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[])
    {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new EditorForm().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JMenuBar MenuBar;
    private javax.swing.JMenu jMenuAdd;
    private javax.swing.JMenu jMenuGeneral;
    private javax.swing.JMenuItem jMenuItemLoadImg;
    private javax.swing.JMenuItem jMenuItemSetBackground;
    // End of variables declaration
}

/**
 *
 * @author Carl Hamann
 */
class BackgroundPic extends JPanel
{
    private Image img = null;

    BackgroundPic (String path)
    {
        if (path != null)
        {
            MediaTracker mt = new MediaTracker(this);
            img = Toolkit.getDefaultToolkit().getImage(path);
            mt.addImage(img, 0);

            try
            {
                mt.waitForAll();
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
        }
    }

    @Override protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
    }
}
/**
 *
 * @author Carl Hamann
 */
class ForegroundPic extends JLabel
{
    private ImageIcon imgico = null;
    private Image img = null;
    private EditorForm eForm = null;
    private int x, y;

    ForegroundPic (int x, int y, String path, final EditorForm eForm)
    {
        this.x = x;
        this.y = y;
        this.eForm = eForm;

        Toolkit toolkit = Toolkit.getDefaultToolkit();
        MediaTracker mediatracker = new MediaTracker(this);
        img = toolkit.getImage(path);

        mediatracker.addImage(img, 0);

        try
        {
            mediatracker.waitForID(0);
        }
        catch (InterruptedException e)
        {
            img = null;
        }

        // Icon laden
        imgico = new ImageIcon(img);

        this.setIcon(imgico);
        this.setSize(getPreferredSize());
        this.setLocation(x, y);

        addMouseMotionListener(new java.awt.event.MouseMotionAdapter()
        {
            @Override public void mouseDragged(java.awt.event.MouseEvent evt)
            {
                PicMouseDragged(evt);
            }
        });

        addMouseListener(new java.awt.event.MouseAdapter()
        {

            @Override public void mouseReleased(java.awt.event.MouseEvent evt)
            {
                PicMouseReleased(evt);
            }
        });
    }

    ForegroundPic (int x, int y, URL path, final EditorForm eForm)
    {
        this.x = x;
        this.y = y;

        Toolkit toolkit = Toolkit.getDefaultToolkit();
        MediaTracker mediatracker = new MediaTracker(this);
        img = toolkit.createImage(path);

        mediatracker.addImage(img, 0);

        try
        {
            mediatracker.waitForID(0);
        }
        catch (InterruptedException e)
        {
            img = null;
        }

        // Icon laden
        imgico = new ImageIcon(img);

        this.setIcon(imgico);
        this.setSize(getPreferredSize());
        this.setLocation(x, y);

        addMouseMotionListener(new java.awt.event.MouseMotionAdapter()
        {
            @Override public void mouseDragged(java.awt.event.MouseEvent evt)
            {
                PicMouseDragged(evt);
            }
        });

        addMouseListener(new java.awt.event.MouseAdapter()
        {

            @Override public void mouseReleased(java.awt.event.MouseEvent evt)
            {
                PicMouseReleased(evt);
            }
        });
    }

    public void SetX (int x)
    {
        this.x = x;
    }

    public void SetY (int y)
    {
        this.y = y;
    }

    public int GetX ()
    {
        return x;
    }

    public int GetY ()
    {
        return y;
    }

    public void PicMouseDragged (MouseEvent evt)
    {
        // Cursor ändern
        eForm.setCursor(new Cursor(Cursor.MOVE_CURSOR));

        // Position ändern
        Rectangle rect = this.getBounds();
        x = rect.x + evt.getX();
        y = rect.y + evt.getY();

        // Location ändern
        setLocation(rect.x + evt.getX(),
                rect.y + evt.getY());

    }

    public void PicMouseReleased(MouseEvent evt)
    {
        eForm.setCursor(Cursor.DEFAULT_CURSOR);
    }
}
 
R

Random

Gast
Danke erstmal für die Zusammenfassung des Codes!
Nein - mein Problem ist ein ganz anderes. Wenn ich über Hinzufügen->Bild gehe und irgendein Bild auswähle funktoiniert alles ganz wunderbar. Wenn ich dannach über Allgemein->Hintergrundbild laden gehe werden die vorherigen Bilder nicht mehr angezeigt. Alle Bilder die ich dannach einfüge funktionieren wieder.
 
R

Random

Gast
Habs gelöst! Ich musste erstmal alle Componenten löschen mittels [c]getContentPane().removeAll()[/c] und dann wieder hinzufügen.
 

Marco13

Top Contributor
Wenn du das von Anfang an genau so formuliert hättest, hätte das uns BEIDEN viel wertvolle Zeit gespart. (Machmal frage ich mich, warum ich das hier eigentlich mache...)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Mandelbrot mit BigDecimal erstellen und in der UI zeichnen, funktionierte nicht. AWT, Swing, JavaFX & SWT 1
H JavaFX Canvas neu zeichnen anstoßen AWT, Swing, JavaFX & SWT 34
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
N JavaFX Unicode zeichnen in javafx Label verwenden AWT, Swing, JavaFX & SWT 2
G 2D-Grafik Grafik in zwei verschiedenen Fenstern gleichzeitig zeichnen AWT, Swing, JavaFX & SWT 9
S Event Handling Neu zeichnen nur wenn Berechnung fertig ist AWT, Swing, JavaFX & SWT 4
W JavaFX Ich kann keinen Kreis richtig zeichnen AWT, Swing, JavaFX & SWT 8
CptK Funktionsgraphen effizient zeichnen und nur Teile von JPanel erneuern AWT, Swing, JavaFX & SWT 2
G Dreieck aus Pixeln zeichnen AWT, Swing, JavaFX & SWT 8
N Mit KeyListener ein rechteck zeichnen AWT, Swing, JavaFX & SWT 9
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
Z Swing Graph zeichnen lassen AWT, Swing, JavaFX & SWT 16
O Kann kei neues Panel zum zeichnen aufrufen... AWT, Swing, JavaFX & SWT 4
L Swing zeichnen AWT, Swing, JavaFX & SWT 14
S GUI Kreuz zeichnen und Position ausgeben AWT, Swing, JavaFX & SWT 3
S GUI Kreis zeichnen AWT, Swing, JavaFX & SWT 13
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
L Swing Ein Rechteck in ein Grid Zeichnen AWT, Swing, JavaFX & SWT 5
L JavaFX Animation, erst zeichnen dann anzeigen AWT, Swing, JavaFX & SWT 4
K Mehrere Linien zeichnen AWT, Swing, JavaFX & SWT 8
E Transparent zeichnen AWT, Swing, JavaFX & SWT 2
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
T Tic Tac Toe - GUI Linien zeichnen AWT, Swing, JavaFX & SWT 14
C Applet Zeichnen über Button-Click AWT, Swing, JavaFX & SWT 13
Soloeco Graph zeichnen AWT, Swing, JavaFX & SWT 1
G Zeichnen Programm AWT, Swing, JavaFX & SWT 1
I Graph mit Swing zeichnen AWT, Swing, JavaFX & SWT 8
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
D Quadrat, Rechteck zeichnen AWT, Swing, JavaFX & SWT 3
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
JG12111989 mehrere Polyline-Objekte zeichnen AWT, Swing, JavaFX & SWT 3
A Swing JRadioButton zeichnen nicht AWT, Swing, JavaFX & SWT 4
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
P 2D-Grafik Bogen(Arc) zwischen zwei Punkten zeichnen AWT, Swing, JavaFX & SWT 2
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
KilledByCheese Swing 2D JLabel Array Maze zeichnen AWT, Swing, JavaFX & SWT 2
S Parallele Linien zeichnen AWT, Swing, JavaFX & SWT 5
J Linien auf JPanel zeichnen AWT, Swing, JavaFX & SWT 3
P AWT Canvas freihändig zeichnen AWT, Swing, JavaFX & SWT 1
llabusch Linien in JPanel zeichnen AWT, Swing, JavaFX & SWT 6
S passende PaintComponent ? Zeichnen in TextArea mit Scrollpane ? AWT, Swing, JavaFX & SWT 2
I Applet BlueJ Applet - Bild mit if-Schleife zeichnen lassen AWT, Swing, JavaFX & SWT 16
L JavaFX JavafX Timelime zeichnen und schön stylen? AWT, Swing, JavaFX & SWT 2
I JFrame neu zeichnen, nicht überzeichnen! AWT, Swing, JavaFX & SWT 2
I Spielsteine zeichnen und entfernen AWT, Swing, JavaFX & SWT 3
H JavaFX Freezes beim Zeichnen mit Canvas AWT, Swing, JavaFX & SWT 3
H Swing BufferedImage zeichnen AWT, Swing, JavaFX & SWT 1
M JFreeChart neu zeichnen sich Wenn Jtable sich ändert AWT, Swing, JavaFX & SWT 5
S 2D-Grafik MouseDragged Linien zeichnen AWT, Swing, JavaFX & SWT 4
M Zeichnen ohne vorherige Linien zu löschen AWT, Swing, JavaFX & SWT 2
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
T Swing / Kreis zeichnen AWT, Swing, JavaFX & SWT 2
I Text zur Linie zeichnen AWT, Swing, JavaFX & SWT 1
I Pfeil zeichnen am Ende einer Linie AWT, Swing, JavaFX & SWT 1
D 2D-Grafik Inhalt eines Graphics in anderes Graphics zeichnen.... AWT, Swing, JavaFX & SWT 3
F Zeichnen des Button AWT, Swing, JavaFX & SWT 4
B Zeichnen mit paintComponent? Oder anders? AWT, Swing, JavaFX & SWT 15
C Swing Aus verschiedenen Klassen zeichnen. AWT, Swing, JavaFX & SWT 2
C Swing BufferedImage zeichnen und JLabels setzen. AWT, Swing, JavaFX & SWT 17
M Kein Zeichnen der Figuren auf JPanel AWT, Swing, JavaFX & SWT 4
J JButton neu zeichnen lassen AWT, Swing, JavaFX & SWT 9
S Quadrat auf Frame zeichnen AWT, Swing, JavaFX & SWT 2
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
C Graphics Objekt in Zeitschleife zeichnen AWT, Swing, JavaFX & SWT 4
X Swing JPanel mehrere Ebenen zeichnen AWT, Swing, JavaFX & SWT 13
G Zeichnen auf eine schwergewichtige Komponente? AWT, Swing, JavaFX & SWT 0
G Mehrere Strings um Kreis zeichnen und positionieren AWT, Swing, JavaFX & SWT 0
P SWT Nebula Gallery - Bildbereiche zeichnen AWT, Swing, JavaFX & SWT 3
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
A 2D-Grafik Zeichnen einer sich bewegenden Box mit BufferStrategy zieht Spur AWT, Swing, JavaFX & SWT 2
T AWT Bild laden und transparent zeichnen AWT, Swing, JavaFX & SWT 2
Helgon Swing Mit Swing zeichnen / NetBeans GUI AWT, Swing, JavaFX & SWT 11
M JLabel über JButtons zeichnen AWT, Swing, JavaFX & SWT 4
J JApplet und Zeichnen AWT, Swing, JavaFX & SWT 8
P 2D-Grafik NPE beim Zeichnen auf Graphics g AWT, Swing, JavaFX & SWT 8
4 Swing Graphen selber zeichnen AWT, Swing, JavaFX & SWT 2
T Über mehrere Panel zeichnen AWT, Swing, JavaFX & SWT 2
T Zeichnen von getSubimage funktioniert nicht AWT, Swing, JavaFX & SWT 7
M Bilder zeichnen, NullPointer Exception AWT, Swing, JavaFX & SWT 3
N JPanel neu zeichnen AWT, Swing, JavaFX & SWT 10
D Zeichnen eines Barplots AWT, Swing, JavaFX & SWT 2
bluerob Problem beim Image zeichnen via andere Klasse AWT, Swing, JavaFX & SWT 7
M Swing JFrame in einem Panel zeichnen AWT, Swing, JavaFX & SWT 3
M Suche Javabibliothek zum Zeichnen mathematischer Funktionen AWT, Swing, JavaFX & SWT 11
M Swing Warum öffnen sich beim Zeichnen mit Swing plötzlich zwei Fenster? AWT, Swing, JavaFX & SWT 5
P ScrollPane nach zeichnen dynamisch resize AWT, Swing, JavaFX & SWT 7
M Swing In GUI-Builder-JFrame mit Menü Schreiben und Zeichnen AWT, Swing, JavaFX & SWT 4
N 2D-Grafik 2 Probleme beim zeichnen AWT, Swing, JavaFX & SWT 18
S Swing Bild auf jPanel nach Änderung von JComboBox zeichnen AWT, Swing, JavaFX & SWT 4
C Funktionen zeichnen AWT, Swing, JavaFX & SWT 16
P JPanel neu zeichnen AWT, Swing, JavaFX & SWT 10
M Auf einem Hintergrundbild zeichnen AWT, Swing, JavaFX & SWT 2
S Eigene JComponent Image zeichnen AWT, Swing, JavaFX & SWT 3
T Oval auf ein JPanel zeichnen AWT, Swing, JavaFX & SWT 3
L Zeichnen in zwei Fenstern AWT, Swing, JavaFX & SWT 8
S Font laden, Wort zeichnen und animieren..? AWT, Swing, JavaFX & SWT 2
S Bild von Punkt zu Punkt zeichnen AWT, Swing, JavaFX & SWT 8
U Pixel zeichnen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben