# Kleines Malprogramm



## hauke1981 (20. Mrz 2006)

Hallo,
ich hab als Projekt jetzt aufgetragen bekommen ein kleines Malprogramm zu schreiben. JEtzt habe ich mal ein PaintFrame geschrieben in dem ich malen kann was auch funktioniert. Jetzt will ich aber ein paar Buttons noch einfügen z.B.: öffnen oder speichern. Kann ich jetzt den ButtonFrame in den PaintFrame einfügen ?? Habs mal probiert und dann konnte ich nicht mehr schreiben. Weiss einer wie ich das lösen kann ???

Grüße


----------



## Sky (20. Mrz 2006)

Leider kenn' ich weder deinen ButtonFrame noch deinen PaintFrame...

- Bei JFrame könntest Du es über JMenuBar lösen

- Bei JFrame könntest Du es auch über 2 Panels lösen


----------



## hauke1981 (20. Mrz 2006)

Also beide Frames sind mit JFrame realisiert. 
wie geht nochmal die lösung mit jmenubar hab ich schonmal gehört


----------



## Sky (20. Mrz 2006)

http://java.sun.com/docs/books/tutorial/uiswing/components/menu.html


----------



## hauke1981 (20. Mrz 2006)

Das mit dem Menü hab ich hinbekommen wie schaff ich das aber das ich beide felder (das zum malen und das wo das menü verankert ist) in einem fenster habe. Zur zeit werden bei mir zwei fenster aufgemacht.


----------



## Redfrettchen (20. Mrz 2006)

Hi,
verwende statt einem Frame ein Panel zum Malen und füg dieses dann zum Menuframe hinzu:

```
JFrame frame = new JFrame();
setJMenubar(new MyMenubar());
PaintPanel p = new PaintPanel(); // PaintPanel extends JPanel
frame.add(p); // von mir aus auch gleich frame.add(new PaintPanel()));
```


----------



## hauke1981 (21. Mrz 2006)

Habs versucht aber des will irgendwie net klappen , hier ist mal das was ich bis jetzt hab kann sich das einer anschauen und mir dann nen tipp geben wie ich das schaff das das menu im gleichen fenster ist wie das malprogramm


```
class RGPaintPanel extends JPanel implements MouseListener, MouseMotionListener
{ private int ixpos = 0;
  private int iypos = 0;

  RGPaintPanel(String title)
  { addMouseListener(this);
    addMouseMotionListener(this);
  }

  public void mousePressed(MouseEvent e)
  { ixpos = e.getX();
    iypos = e.getY();
  }
  
  public void mouseDragged(MouseEvent e)
  { Graphics g = getGraphics();
    int ix = e.getX();
    int iy = e.getY();
    
    g.drawLine(ixpos, iypos, ix, iy);
    ixpos = ix;
    iypos = iy;
  }
  
  public void mouseClicked(MouseEvent e){}        
  public void mouseEntered(MouseEvent e){}        
  public void mouseExited(MouseEvent e){}        
  public void mouseReleased(MouseEvent e){}
  public void mouseMoved(MouseEvent e){}
}
__________________________________________________________________
class Menu extends JFrame
{ public Menu()
   {
      super ("Menu");
      // MenuBar der ContentPane am oberen Rand hinzufügen
      getContentPane().add (createMenuBar(), BorderLayout.NORTH);
      setSize (300, 100);
      RGPaintPanel p = new RGPaintPanel("Paint");
      Container contentPane = getContentPane();
      contentPane.add(p);
   }

   private JMenuBar createMenuBar()
   {
      // Menüleiste erzeugen
      JMenuBar menuBar = new JMenuBar();
      // Menü erzeugen
      JMenu draw = new JMenu ("Datei");
      // Menüeintrag erzeugen und
      // dem Menü hinzufügen
      draw.add (new JMenuItem ("Öffnen"));
      draw.add (new JMenuItem ("Speichern"));
      draw.add (new JMenuItem ("Beenden"));
      menuBar.add (draw);
      return menuBar;
   }
}
```


----------



## Redfrettchen (21. Mrz 2006)

Warum machst du es nicht, wie ich es geschrieben habe?

```
public Menu() { 
      super ("Menu");
      setJMenubar(createMenuBar());
      setSize (300, 100);
      RGPaintPanel p = new RGPaintPanel("Paint"); 
      getContentPane().add(p);  
}
```


----------



## hauke1981 (21. Mrz 2006)

Ich habs hingekriegt ich ... hab beide anzeigen lassen mit *.show(); dann ist ja klar das beide geöffnet werden. 

Nur weisst du wie ich die menüeinträge mit aktionen belege ? Z.B.: Schliessen oder Abspeichern ??


----------



## André Uhres (21. Mrz 2006)

menuItem.addActionListener( -->ActionListener)
--> public void actionPerformed(ActionEvent evt){}


----------



## hauke1981 (21. Mrz 2006)

Kann ich durch den Befehl dann zum beispiel das programm beenden??


----------



## KSG9|sebastian (21. Mrz 2006)

*moved*


----------



## André Uhres (21. Mrz 2006)

hauke1981 hat gesagt.:
			
		

> Kann ich durch den Befehl dann zum beispiel das programm beenden??


Natürlich, brauchst nur in actionPerfomed() die Funktion "programm beenden" einfügen, oder was immer du machen willst.


----------



## hauke1981 (21. Mrz 2006)

Kannst du mir da ein kleinen Tipp geben ??


----------



## André Uhres (21. Mrz 2006)

hauke1981 hat gesagt.:
			
		

> Kannst du mir da ein kleinen Tipp geben ??


Was willste denn noch wissen?


----------



## hauke1981 (21. Mrz 2006)

Ich weiss nicht ich steh gerade dowas von auf den schlauch   

Wie ich das verbinde den menuitem und den actionlistener ?? WEiss grad net wie ich es schaffe das der meneintrag schliessen dann das programm beendet.


----------



## André Uhres (21. Mrz 2006)

```
...
        jMenuItem1 = new JMenuItem("Exit");
        jMenuItem1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                jMenuItem1ActionPerformed(evt);
            }
        });
...
        draw.add (jMenuItem1); 
...
    private void jMenuItem1ActionPerformed(ActionEvent evt) {
        System.exit(0);
    }
...
    private JMenuItem jMenuItem1;
...
```


----------



## hauke1981 (21. Mrz 2006)

Super danke


----------



## hauke1981 (22. Mrz 2006)

Nochmal was ich weiss kommt a bissle spät aber weiß einer zufälligerweise ob man wenn man was in dem programm das ich da geschrieben hab abspeichern kann oder geht das gar nicht ?? Gibt es sowas wie JTextArea auf für paintpanel oder so ??


----------



## André Uhres (22. Mrz 2006)

```
private void Item2ActionPerformed(ActionEvent evt){ 
        try{
            generateJPGFileFromComponent(myDrawingPanel,file);
        } catch(Exception ex){
        }
   }
    /*
     * Generate jpg
     */
    public  BufferedImage generateBufferedImageFromComponent(Component component) {
        BufferedImage image = new BufferedImage(component.getWidth(), component.getHeight(), BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();
        g.setColor(component.getBackground());
        g.fillRect(0, 0,  image.getWidth(), image.getHeight());
        component.print(g);
        g.dispose();
        return image;
    }
    public  void generateJPGFileFromComponent(Component component, String filename) throws IOException {
        generateJPGFileFromComponent(component, new File(filename));
    }
    public  void generateJPGFileFromComponent(Component component, File file) throws IOException {
        BufferedImage image = generateBufferedImageFromComponent(component);
        ImageIO.write(image, "jpg", file);
    }

__________________________
Item2 = new JMenuItem("Speichern");
      Item2.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent evt) {
        Item2ActionPerformed(evt);
       }
      });
      datei.add(Item2);
```


----------



## hauke1981 (24. Mrz 2006)

Muss ich dann mein komplettes programm in den try catch konstrukt packen ?? 

das was du unter generate jpg geschrieben hast muss ich dann wie beim abspeichern direkt in die klasse des menüs schreiben oder ??


----------



## André Uhres (24. Mrz 2006)

>Muss ich dann mein komplettes programm in den try catch konstrukt packen ?? 

Nein

>das was du unter generate jpg geschrieben hast muss ich dann wie beim abspeichern direkt in die klasse des menüs schreiben oder ??

Ja


----------



## hauke1981 (28. Mrz 2006)

Stimmt das dann so ???

```
private void Item2ActionPerformed(ActionEvent evt)
   { BufferedImage generateBufferedImageFromComponent(Component component)
    {
        BufferedImage image = new BufferedImage(component.getWidth(), component.getHeight(), BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();
        g.setColor(component.getBackground());
        g.fillRect(0, 0,  image.getWidth(), image.getHeight());
        component.print(g);
        g.dispose();
        return image;
    }
    public  void generateJPGFileFromComponent(Component component, String filename) throws IOException
    {
        generateJPGFileFromComponent(component, new File(filename));
    }
    public  void generateJPGFileFromComponent(Component component, File file) throws IOException
    {
        BufferedImage image = generateBufferedImageFromComponent(component);
        ImageIO.write(image, "jpg", file);
    }
   }
__________________________
Item2 = new JMenuItem("Speichern");
      Item2.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent evt) {
        Item2ActionPerformed(evt);
       }
      });
      datei.add(Item2);
```


----------



## André Uhres (28. Mrz 2006)

http://www.java-forum.org/de/viewtopic.php?p=177343#177343


----------



## hauke1981 (12. Jun 2006)

Nach langem mal wieder eine Frage von mir !!

Wie kann ich es machen das ich bei meinem Programm die x und y koordinate abspeichern kann ??? Mein Professor hat gemeint das sollte ich noch einfügen in mein Programm ...

Weiss das einer ??

Grüße


----------



## André Uhres (12. Jun 2006)

hauke1981 hat gesagt.:
			
		

> ..bei meinem Programm die x und y koordinate abspeichern..


Das musst du aber schon etwas konkreter erklären. Hab grad kein Ahnung wovon du sprichst  :?


----------



## hauke1981 (13. Jun 2006)

Mein Professor hat gemeint das man da eine x und y koordinate in einer textdatei abspeichern kann. Ich setz ja das Bild praktisch aus lauter kleinen Punkten zusammen vielleicht meint er da von den Punkten die Koordinaten. Er will dann halt in einem File (*.txt) nachher Koordinaten stehen haben.
Hilft dir das weiter ?


----------



## André Uhres (13. Jun 2006)

hauke1981 hat gesagt.:
			
		

> Mein Professor .. _vielleicht _meint er da .. Hilft dir das weiter ?


Nicht viel. 
Ausserdem stört mich das "_vielleicht_". 
Dir bleibt wohl nichts anderes übrig als den Professor zu fragen was er nun wirklich will.


----------



## hauke1981 (14. Jun 2006)

Kann ich die Werte

```
public void mouseDragged(MouseEvent e)
  { Graphics g = getGraphics();
    int ix = e.getX();
    int iy = e.getY();
    
    g.drawLine(ixpos, iypos, ix, iy);
    [u]ixpos = ix;
    iypos = iy;[/u]  }
```

in eine Textdatei abspeichern ?? Die wo ich unterstrichen habe?


----------



## André Uhres (14. Jun 2006)

hauke1981 hat gesagt.:
			
		

> Kann ich die Werte
> 
> ```
> public void mouseDragged(MouseEvent e)
> ...


Das ist möglich aber sinnlos.


----------



## hauke1981 (14. Jun 2006)

Ich weiss aber leider will das mein Professor !! Wie kann ich auf die Variablen zugreifen bei mir kommt immer ein fehler??
Noch eine Frage:   sorry für die vielen Fragen

Wie kann ich es machen das ich den Strich dann in Rot zeichnen kann. Hab folgendes mal probiert leider hats nicht funktioniert.



```
private void Item5ActionPerformed (ActionEvent evt)
   {
     Graphics g = getGraphics();
     g.setColor(Color.red);

   }

___________________________________________________

JMenu color = new JMenu ("Farbe");
      
      bearbeiten.add (color);
      Item5 = new JMenuItem("Rot");
      Item5.addActionListener(new ActionListener(){
        public void actionPerformed (ActionEvent evt){
          Item5ActionPerformed(evt);
        }
      });
      color.add(Item5);
```

Sollte doch so gehen oder ?? Der strich wird oben in der Klasse PaintPanel auch mit Graphics g = getGraphics(); realisiert!


----------



## André Uhres (14. Jun 2006)

hauke1981 hat gesagt.:
			
		

> ..Der strich wird oben in der Klasse PaintPanel auch mit Graphics g = getGraphics(); realisiert!


Ist sicher ein anderer Kontext.


----------



## hauke1981 (16. Jun 2006)

Wie meinst du das ?? Mit in einem anderen Kontext?

Übrigends das mit dem Abspeichern hat funktioniert bei mir...


----------



## André Uhres (16. Jun 2006)

hauke1981 hat gesagt.:
			
		

> Wie meinst du das ?? Mit in einem anderen Kontext?..


Jede JComponent hat einen anderen graphics context.


----------



## inflamer (16. Jun 2006)

edit: sorry, bitte diesen beitrag löschen


----------



## hauke1981 (22. Jun 2006)

Wie kann ich das dann anstellen das ich in einer anderen Farbe zeichnen kann ??? Oder geht das so gar nicht wie ich das mir gedacht habe mit meinem Coding???


----------



## André Uhres (22. Jun 2006)

DrawOnImage


----------

