# Canvas und Buttons



## Darkmaster (21. Mai 2008)

Hallo Leute,

ich hab vor Vier Gewinnt in Java zu programmieren und hab deswegen Canvas hergenommen. Hat bis jetzt auch alles gut geklappt mit dem zeichnen, nur habe ich keine Buttons integriert, und die brauch ich unbedingt, damit ich einen Stein in eine Spalte fallen lassen kann. Mein Problem ist jetzt, dass ich es nicht schaffe einen Button in dem Canvas zu erstellen.
Ich poste Mal meine bisherigen Erkenntnisse: 

```
package gewinnt;

import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.util.*;


class save 
{
	static char spielfeld[][];
}

public class Test extends Canvas{
	static int GROESSE=30;
	static int LAENGE=9;
	static int HOEHE=7;
	public static final int WIDTH = GROESSE*LAENGE+100;
	public static final int HEIGHT = WIDTH;


	Image bildns,bildg,bildmc; 
	public HashMap sprites;
	public BufferedImage buffer;
	
	public Test() {
		sprites = new HashMap();
		buffer = new BufferedImage(WIDTH,HEIGHT, BufferedImage.TYPE_INT_RGB);
		JFrame ventana = new JFrame("HaloZero");
		JPanel panel = (JPanel)ventana.getContentPane();
		setBounds(0,0,WIDTH,HEIGHT);
		panel.setPreferredSize(new Dimension(WIDTH,HEIGHT));
		panel.setLayout(null);
		panel.add(this);
		ventana.setBounds(0,0,WIDTH,HEIGHT);
		ventana.setVisible(true);
		ventana.addWindowListener( new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		ventana.setIgnoreRepaint(true);
		ventana.setResizable(false); 

	    bildns = java.awt.Toolkit.getDefaultToolkit().getImage("c:/Bilder/nicht_sand.gif");
	    bildg  = java.awt.Toolkit.getDefaultToolkit().getImage("c:/Bilder/gegner.gif");
	    bildmc = java.awt.Toolkit.getDefaultToolkit().getImage("c:/Bilder/MasterChief.gif");


		 }

	  
 public void createspielfeld() 
    {

        int i=6+1;    //Weil unten eine Mauer ist
        int j=7+2;    //Weil links und rechts Mauern sind.
        
        save.spielfeld = new char[i][j];

                for (j=0, i=0; i <HOEHE; i++)   //LINKE MAUER
                    save.spielfeld[i][j]='#';

                for (j=0; j < LAENGE-1; j++)
                        for(i=0; i < HOEHE; i++)
                        {
                                if (i==HOEHE-1) //UNTERE MAUER
                                        save.spielfeld[i][j]='#';
                        }
                for (j=LAENGE-1, i=0; i < HOEHE; i++)//RECHTE MAUER
                        save.spielfeld[i][j]='#'; 
    }

		public void showspielfeld()//SPIELSTAND AKTUALISIEREN
		{
                   
			Graphics g = buffer.getGraphics();
                        
			getGraphics().drawImage(buffer,0,0,this);
					for (int j=0; j < LAENGE; j++)
						for (int i=0; i < HOEHE; i++)
						{
//							System.out.println(save.spielfeld[i][j]);
							if(save.spielfeld[i][j]=='#')
								g.drawImage(bildns, j*GROESSE+100, i*GROESSE+100, this);
							else if(save.spielfeld[i][j]=='1')
								g.drawImage(bildmc, j*GROESSE+100, i*GROESSE+100, this);
							else if(save.spielfeld[i][j]=='2')
								g.drawImage(bildg, j*GROESSE+100, i*GROESSE+100, this);
						}
		}
		
	public void game() 
	{

		createspielfeld();

		while (isVisible()) 
		{

			showspielfeld();
                        
		}
	}
	
	public static void main(String[] args) 
	{
		Test inv = new Test();
		inv.game();
	}
}
```
Es soll also wie hier zu sehen, ein Spiefeld mit der Grösse 6 auf 7 erstellt werden und außen rum Kästchen die als Mauer dienen(Nur oben nicht, denn da kommen die Steine ja rein.) Und jetzt hoff ich dass jemand mir den Code so ändert, dass da zumindest ein Button auftaucht.

MFG

Markus


----------



## L-ectron-X (21. Mai 2008)

Du solltest Swing und AWT besser nicht mischen. Daher am besten das Canvas gegen ein JPanel tauschen.
Im JPanel überschreibst du dann die paintComponent()-Methode mit deinem Zeichencode.


----------



## Darkmaster (21. Mai 2008)

L-ectron-X hat gesagt.:
			
		

> Du solltest Swing und AWT besser nicht mischen. Daher am besten das Canvas gegen ein JPanel tauschen.
> Im JPanel überschreibst du dann die paintComponent()-Methode mit deinem Zeichencode.


Ok, du meinst also, dass ich das ganze was ich bereits geschrieben habe in einem JPanel unterbringen kann indem ich nur irgendwie eine paintComponent()-Methode hernehme? Vielleicht könntest du mir ein kurzes Beispiel dafür geben, denn ich weiß noch nicht genau wie die Methode funktionieren soll.

P.S.: Schönes Bild


----------



## L-ectron-X (21. Mai 2008)

Darkmaster hat gesagt.:
			
		

> Ok, du meinst also, dass ich das ganze was ich bereits geschrieben habe in einem JPanel unterbringen kann indem ich nur irgendwie eine paintComponent()-Methode hernehme?


Genau, so in etwa.


```
import java.awt.*;
import javax.swing.*;

public class FigureFrame extends JFrame {
   public FigureFrame(String title) {
      super(title);
      setSize(800, 600);
      setLocationRelativeTo(null);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
      DrawingPanel panel = new DrawingPanel();
      add(panel);
   }
   
   class DrawingPanel extends JPanel {
      DrawingPanel() {
         setBackground(Color.BLACK);
      }
      
      public void paintComponent(Graphics g) {
         super.paintComponent(g);
         g.setColor(Color.BLUE);
         g.fillOval(200, 50, 400, 400);
         g.setColor(Color.CYAN);
         g.drawOval(200, 50, 400, 400);
         g.setColor(Color.YELLOW);
         g.fillOval(200, 200, 200, 200);
      }
   }

   public static void main(String[] args) {
      new FigureFrame("Erde und Mond").setVisible(true);
   }
}
```


----------



## Darkmaster (22. Mai 2008)

Ich habs jetzt in ein JPanel kopiert und musste nicht mal irgendwelche Methoden umschreiben. Das Button konnte ich setzen, aber leider ist der Hintergrund immer schwarz und der verdeckt dann das Button. Ich habe also mein Feld in dem die Steine sind, und über dem sollen dann ja kleine button sein wo ich die steine reinwerfen kann. Weißt du wie ich jetzt die Hintergrundfarbe schwarz abstelle? Der Code ist immer noch der selbe.


----------



## L-ectron-X (22. Mai 2008)

Guck dir doch mal den Konstruktor von meiner Klasse DrawingPanel an.  :wink: 
Der ist noch auf meine Zeichnung abgestimmt. Wie fügst du die Button hinzu? Dran denken: *J*Button verwenden!


----------



## Darkmaster (22. Mai 2008)

L-ectron-X hat gesagt.:
			
		

> Guck dir doch mal den Konstruktor von meiner Klasse DrawingPanel an.  :wink:
> Der ist noch auf meine Zeichnung abgestimmt. Wie fügst du die Button hinzu? Dran denken: *J*Button verwenden!


Ja ich hab das Feld zu groß dimensioniert und hab dadurch alles verdeckt. Jetzt seh ich auch die Buttons und kann sie endlich anklicken. Aber ein letztets Problem bleibt. Ich rufe das ganze von einem Hauptfenster auf in dem ich mehrere Schaltflächen habe. Neues Spiel, Laden, Highscore. usw. Ich rufe also bei einem Neues Spiel Button die Main der Spielfläche auf und habe dann nur das Feld und nicht mehr die Buttons. Kann ich denn nicht einfach Spielfeld.java aufrufen? Weil sonst gibt er nur das Spielfeld aus und die Knöpfe macht er nicht. Oder muss ich irgendwie die Main verändern? Der Code mit dem Fenster schließen liest er ja auch nicht.


```
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
   
Playground.main(null);
}
```


----------



## Morgyr (22. Mai 2008)

Dann gestalte das ganze so, dass du irgendwo am Rand dein Menü hast und dann auf dem restlichen Fensterinhalt ein JPanel mit dem Spielfeld drauf.
So lässt sich das Spielfeld auch leichter wieder ausblenden.
Sprich, du hast ein Fenster mit den JButton und einem JPanel, dass wiederum das Spielfeld beinhaltet. Das lässt sich ja über panel.setVisible(true); ein-, bzw. über panel.setVisible(false); ausblenden.


Was genau bedeutet der Code, den du gepostet hast?


----------



## Darkmaster (22. Mai 2008)

Morgyr hat gesagt.:
			
		

> Dann gestalte das ganze so, dass du irgendwo am Rand dein Menü hast und dann auf dem restlichen Fensterinhalt ein JPanel mit dem Spielfeld drauf.
> So lässt sich das Spielfeld auch leichter wieder ausblenden.
> Sprich, du hast ein Fenster mit den JButton und einem JPanel, dass wiederum das Spielfeld beinhaltet. Das lässt sich ja über panel.setVisible(true); ein-, bzw. über panel.setVisible(false); ausblenden.
> 
> ...



Ok, ich habs wohl falsch formuliert. Ich habe im Moment 2 Fenster. Eines ist das Hauptfenster in dem die grundlegenden Sachen zum auswählen drin sind, und nicht das Spielfeld. In dem zweiten Fenster soll nach dem ich den Neues Spiel Button im Hauptmenü gedrückt habe das Spielfeld erscheinen und drüber die Buttons zum reinwerfen in die jeweilige Spalte. Wenn ich das zweite Fenster alleine starte ohne über den Weg Hauptfenster -> Neues Spiel dann erscheint alles korrekt, heißt ich habe das Spielfeldfenster, das Spielfeld, die Buttons und kann das Fenster schließen. Wenn ich hingegen es so starte wie ich es später haben will ist keine Möglichkeit da das Fenster zu schließen oder irgendwelche Buttons, weil sie gar nicht aufgerufen wurden, die jeweiligen Deklarationen oder wie auch immer. Ich habe den Code so gepostet wie er im Hauptmenü drin ist. der ruft die Main auf und die Main wie man ja sieht dann game() und irgendwie ist der Code von Test(); scheinbar ungelesen. Also wie ändere ich das jetzt?


----------



## Darkmaster (23. Mai 2008)

Seid ihr jetzt schon überfordert, oder hab ich euch zu sehr verwirrt?  :bahnhof:


----------



## L-ectron-X (23. Mai 2008)

Eher Letzteres. Denn wenn man sich deinen Code so anschaut, merkt man, dass dir noch einige Grundlagen fehlen. Und für Grundlagen gibts gute Bücher.


----------



## Darkmaster (23. Mai 2008)

Ok, ich geb ja zu, dass ich mich mit der grafischen Oberfläche von Java noch nicht sehr gut auskenne. Ich hab ja erst vor 2 Monaten mit Java angefangen. Bücher hab ich im Moment nur Java ist auch eine Insel, aber so richtig weitergebracht hat es mich eigentlich nicht. Drum dacht ich mir frag ich mal in einem Forum, ob denn jemand eine Ahnung hat bzw. mir helfen kann. Ich weiß ja nur ned genau, warum einerseits wenn ich die java datei mit dem spielfeld und den button aufruf so aussieht wie sie soll, und wenn ich von einer anderen java datei das mache, es keine button anzeigt.


----------



## L-ectron-X (23. Mai 2008)

Ich würde dir ja gerne weiter helfen. Dazu brauche ich aber die auch die Bilder, die du einbinden möchtest, ich kann sonst nichts kompilieren. Außerdem ist es immer hilfreich, ein Bild zu posten, wie das Ganze aussehen soll, dann kann man auch mal ein kleines passendes Beispiel zusammen bauen, von dem du lernen kannst.


----------



## Darkmaster (23. Mai 2008)

So ich hab dir jetzt mal ein Bild zusammengestellt wie das jetztige Programm aussieht. Rechts siehst du wenn ich das Playground.java selbst öffnen. Links wenn ich es über die main öffne. Du siehst, dass hier die Buttons auf einmal fehlen. Ich will also hinter der Main ein Bild zeichnen, dass direkt im Hintergrund ist, und nicht die Buttons verdeckt. 
Da sind im Moment 4 Buttons mit Neues Spiel usw und direkt dahinter soll das Bild sein, welches ich noch nicht habe. (Such ich erst noch aus). In dem Spielfeldfenster will ich auch ein Hintergrundbild und am besten wärs wenn das aufrufen besser funktionieren würde über Neues Spiel, so das die Buttons auch da sind. Falls du doch nun ein Hintergrundbild benötigst werd ich noch schnell was zusammenstellen.


----------



## Morgyr (23. Mai 2008)

Schick doch bitte auch nochmal den kompletten Code. Zumindest den, der dein Spielfeld komplett zeichnet, und den Abschnitt im gesamten Code, der das Spielfeld aufrufen soll.
Sowie ich das sehe, rufst du bei dem Klick auf "Neues Spiel" irgendeine Methode in irgendeiner Klasse Playground auf. Das Problem ist, ich sehe nirgends eine Klasse Playground. Am besten postet du das noch mal unterteilt, damit unser Wissensstand aktueller wird.


----------



## Darkmaster (23. Mai 2008)

na klar, kein problem, ich schick einfach die neue version.
Hier das Hauptmenue.java


```
/*
 * Hauptmenue.java
 *
 * Created on 19. Mai 2008, 18:25
 */

package gewinnt;

/**
 *
 * @author  User
 */
public class Hauptmenue extends javax.swing.JFrame {

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

    /** 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() {

        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("Neues Spiel");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setText("Spiel laden");

        jButton3.setText("Anleitung");

        jButton4.setText("Beenden");
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(161, 161, 161)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(jButton4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jButton3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jButton2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jButton1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap(152, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(81, 81, 81)
                .addComponent(jButton1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton4)
                .addContainerGap(109, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
   
Playground.main(null);
}                                        

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
// TODO add your handling code here:
}                                        

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

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    // End of variables declaration                   

}
```
Und hier das Spielfeld

```
/*
 * NewJPanel.java
 *
 * Created on 21. Mai 2008, 23:19
 */

package gewinnt;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.util.*;
class sav 
{
	static char spielfeld[][];
}
/**
 *
 * @author  Darkmaster
 */
public class Playground extends javax.swing.JPanel 
{

  int posX=100;
  int posY=100;
    static int GROESSE=30;
    static int LAENGE=9;
    static int HOEHE=7;
    public static final int WIDTH = GROESSE*LAENGE;
    public static final int HEIGHT = GROESSE*HOEHE;
    Image bildns,bildg,bildmc; 
    public HashMap sprites;
    public BufferedImage buffer;

    Playground() 
    {
     
		sprites = new HashMap();
		buffer = new BufferedImage(WIDTH,HEIGHT, BufferedImage.TYPE_INT_RGB);
		JFrame ventana = new JFrame("Halo Zero JPANEL");
		JPanel panel = (JPanel)ventana.getContentPane();
		setBounds(0,0,WIDTH+posX,HEIGHT+posY);//POSITION DES FELDES
		panel.setPreferredSize(new Dimension(WIDTH,HEIGHT));
		panel.setLayout(null);
		panel.add(this);
		ventana.setBounds(0,0,500,500);//FENSTERGROESSE
		ventana.setVisible(true);
		ventana.addWindowListener( new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		ventana.setIgnoreRepaint(true);
		ventana.setResizable(false); 

	    bildns = java.awt.Toolkit.getDefaultToolkit().getImage("c:/Bilder/nicht_sand.gif");
	    bildg  = java.awt.Toolkit.getDefaultToolkit().getImage("c:/Bilder/gegner.gif");
	    bildmc = java.awt.Toolkit.getDefaultToolkit().getImage("c:/Bilder/MasterChief.gif");
		 }

    public void createspielfeld() 
        {

            int i=6+1;    //Weil unten eine Mauer ist
            int j=7+2;    //Weil links und rechts Mauern sind.
//            Graphics g  = buffer.getGraphics();
//             g.setColor(getBackground());
//            g.fillRect(0,0,getWidth(),getHeight());
            sav.spielfeld = new char[i][j];

                    for (j=0, i=0; i <HOEHE; i++)   //LINKE MAUER
                        sav.spielfeld[i][j]='#';

                    for (j=0; j < LAENGE-1; j++)
                            for(i=0; i < HOEHE; i++)
                            {
                                    if (i==HOEHE-1) //UNTERE MAUER
                                            sav.spielfeld[i][j]='#';
                            }
                    for (j=LAENGE-1, i=0; i < HOEHE; i++)//RECHTE MAUER
                            sav.spielfeld[i][j]='#'; 
        }

        public void showspielfeld()//SPIELSTAND AKTUALISIEREN
        {
          
            Graphics g  = buffer.getGraphics();
            getGraphics().drawImage(buffer,posX,posY,this);
 
            for (int j=0; j < LAENGE; j++)
                for (int i=0; i < HOEHE; i++)
                {
//                  System.out.println(save.spielfeld[i][j]);

                    if(sav.spielfeld[i][j]=='#')
                        g.drawImage(bildns, j*GROESSE, i*GROESSE, this);
                    else if(sav.spielfeld[i][j]=='1')
                        g.drawImage(bildmc, j*GROESSE, i*GROESSE, this);
                    else if(sav.spielfeld[i][j]=='2')
                        g.drawImage(bildg, j*GROESSE, i*GROESSE, this);
                }
        }
		
	public void game() 
	{
            
               initComponents();
		createspielfeld();
		while (isVisible()) 
		{
			showspielfeld();
		}
	}
	
	public static void main(String[] args) 
	{
            Playground inv = new Playground();
            inv.game();
            
	}


    /** 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() {

        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jButton5 = new javax.swing.JButton();
        jButton6 = new javax.swing.JButton();
        jButton7 = new javax.swing.JButton();

        jButton1.setMaximumSize(new java.awt.Dimension(30, 30));
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setMaximumSize(new java.awt.Dimension(30, 30));

        jButton3.setMaximumSize(new java.awt.Dimension(30, 30));
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        jButton4.setMaximumSize(new java.awt.Dimension(30, 30));

        jButton5.setMaximumSize(new java.awt.Dimension(30, 30));

        jButton6.setMaximumSize(new java.awt.Dimension(30, 30));
        jButton6.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton6ActionPerformed(evt);
            }
        });

        jButton7.setMaximumSize(new java.awt.Dimension(30, 30));
        jButton7.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton7ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(144, 144, 144)
                .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 25, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton5, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton6, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton7, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(185, 185, 185))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(73, 73, 73)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jButton7, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 23, Short.MAX_VALUE)
                    .addComponent(jButton6, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 23, Short.MAX_VALUE)
                    .addComponent(jButton5, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 23, Short.MAX_VALUE)
                    .addComponent(jButton4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 23, Short.MAX_VALUE)
                    .addComponent(jButton3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 23, Short.MAX_VALUE)
                    .addComponent(jButton2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 23, Short.MAX_VALUE)
                    .addComponent(jButton1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 23, Short.MAX_VALUE))
                .addGap(214, 214, 214))
        );
    }// </editor-fold>                        

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    System.out.println("dhsaf");
}                                        

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
// TODO add your handling code here:
}                                        

private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {                                         
// TODO add your handling code here:
}                                        

private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {                                         
// TODO add your handling code here:
}                                        


    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButton5;
    private javax.swing.JButton jButton6;
    private javax.swing.JButton jButton7;
    // End of variables declaration                   

}
```


----------



## Darkmaster (24. Mai 2008)

Hmm, ich hoffe, dass irgendjemand auch die zweite seite ansieht.


----------



## L-ectron-X (24. Mai 2008)

Wie man ein Hintergrundbild einsetzen kann, habe ich oben bereits beschrieben.
Aber gut, ein Beispiel schreibe ich dir dazu noch.

BackgroundPictureFrame.jar
Quellcode im Jar.

Es kann auch nicht schaden, dass du dir mal dieses Tutorial ansiehst: http://www.java-forum.org/de/topic46550_zeichnen-swing-tutorial.html


----------



## Darkmaster (25. Mai 2008)

Danke erst mal, dass du dir die Zeit genommen hast mir zu helfen. Ich hab es noch nicht ganz angesehen, aber welche plattform nimmst du den zum programmieren her? Mit den Jar-File kenn ich mich jetzt aber noch nicht ganz aus. Du hast da zwei mal zwei java-files und zweimal die gleichen klassen. Warum, wieso?   

P.S: Das Hintergrundbild ist der Hammer!  :toll:


----------



## L-ectron-X (25. Mai 2008)

Darkmaster hat gesagt.:
			
		

> Ich hab es noch nicht ganz angesehen, aber welche plattform nimmst du den zum programmieren her?


Beim Stichwort Plattform fiel mir gleich ein, dass ich das Ganze mit Java 1.6 erzeugt habe. Damit das Beispiel auch noch unter älteren VM läuft, habe ich es jetzt noch mal mit Java 1.4.2 kompiliert und die Jar-Datei im obigen Link ersetzt.

Meinst du mit Plattform nun meine Java-Version? Dann lautet die Antwort: Alle VMs ab Java 1.4.2.
Falls du meinen Editor/IDE gemeint hast: Ich benutze für kleine Sachen, wie für solche Beispiele den Java-Editor, für größe Programme NetBeans.



			
				Darkmaster hat gesagt.:
			
		

> Mit den Jar-File kenn ich mich jetzt aber noch nicht ganz aus. Du hast da zwei mal zwei java-files und zweimal die gleichen klassen. Warum, wieso?


Das Beispiel-Programm besteht aus zwei Klassen. Eine, die von JFrame und eine die von JPanel erbt.
In einem Kleinen Beispiel kann man sicher noch mehrere Funktionen in einer Klasse bündeln, aber wenn das Projekt größer wird, sollte Funktionalität aufgeteilt und abstrahiert werden, um bessere Wiederverwendbarkeit, Wartbarkeit und Übersicht zu gewinnen.

Jar-Dateien kannst du per Doppelklick starten, so wie exe-Dateien unter Windows. Die meisten Editoren und IDEs bieten die Möglichkeit per Mausklick Jar-Dateien vom Projekt zu erzeugen



			
				Darkmaster hat gesagt.:
			
		

> P.S: Das Hintergrundbild ist der Hammer!  :toll:


Dafür gibts einschlägige Wallpaper-Seiten.


----------



## Darkmaster (30. Mai 2008)

Ich komm leider immer noch nicht ganz zurecht. Ich habe jetzt die Struktur verändert, damit ich nicht so viele Probleme hab. Jetzt habe ich nur noch ein Fenster und darauf Buttons habe ich vollkommen dezimiert und dafür eine Menüleiste eingerichtet. Dann hab ich oben zwei Felder in dem man als erstes die namen eingeben muss (für den späteren Highscore) und unten ein Textfeld indem versch. Meldungen ausgegeben werden sollen. z.b. Fehlermeldungen. Jetzt hab ich wieder das Problem, dass ich es nicht hinbekomm das Spielfeld hinzumalen. Ich hab ja die 2 kleinen Bilder und die sollen dann je nach spalte (7 an der Zahl, dort kommen noch Buttons hin) herunterfallen (ohne Animation, die sollen einfach unten auftauchen). So jetzt meine bitte. Wäre es möglich, dass ich dir (L-ectron-X) die bereits geschriebene Fassung schicke und du mir den nötigen Code reinfügen könntest (mit Netbeans) so dass da das spielfeld auftaucht wenn man auf neues spiel drückt, bzw. das Tastenkürzel Strg + N? Mehr bräucht ich nicht, ich will nur die Fläche endlich sehen können, damit ich dort dann weiter arbeiten kann.

MfG

Darkmaster

P.S.: Ich will das Forum nicht nochmal mit wahrscheinlich supoptimal programmieten Code vollstopfen, drum wärs mir recht wenn du mir per Mail antwortest: MC_Darkmaster ät web Punkt de


----------

