# Button verschieben



## kol789 (22. Jan 2012)

HEy ich und ein paar Freunde wollen Risiko und java programmieren und haben Probleme dabei die Buttons Tauschen und Start im Borderlayout Bereich south zu verschieben 

danke für jede Hilfe 


```
import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class Gui extends JFrame implements ActionListener  {

Dimension screensize = java.awt.Toolkit.getDefaultToolkit().getScreenSize ();    
Image Spielfeld = new ImageIcon(this.getClass().getResource("risk_pic.png")).getImage();
JButton BMenu;
JButton BStart;
JButton BTauschen;
JList Cardlist;
JList LandA;
JList LandDef;
JLabel Karten;
Image WürfelList;
JFrame Game;
Gui(){


}





public void Display () {


BMenu=new JButton("Menu");
BTauschen=new JButton("Tauschen");
BStart=new JButton("Start");
String[]Karten= {"\n", "     North Europe", "               - \n" ,"        Cavalier","--------------------------", "\n","     North Europe", "               - \n" ,"        Cavalier","--------------------------", "\n","     North Europe", "               - \n" ,"        Cavalier","--------------------------", "\n","     North Europe", "               - \n" ,"        Cavalier","--------------------------", "\n","     North Europe", "               - \n" ,"        Cavalier","--------------------------",  };
Cardlist = new JList(Karten);
JMenuBar menubar = new JMenuBar();
JMenuItem fileRes = new JMenuItem("Menu");
menubar.add(fileRes);



JPanel Unten = new JPanel();           // Panel Unten
    
Unten.add(BTauschen);
Unten.add(BStart);
Unten.add(new JLabel(" Einheiten zu Setzen: "+"6"+"     Einheiten Gesamt: "+"10"));




JPanel Oben = new JPanel();    // Panel Oben

Oben.setLayout(new BoxLayout(Oben,BoxLayout.Y_AXIS));     

JLabel la = new JLabel("Spieler 1");      
la.setAlignmentX(CENTER_ALIGNMENT);

Oben.add(menubar);
Oben.add(la);
Oben.setBackground(Color.RED);


JPanel Links = new JPanel();            // Panel Links

Links.setLayout(new BoxLayout(Links,BoxLayout.Y_AXIS));
Links.add(Cardlist);
BTauschen.setAlignmentY(BOTTOM_ALIGNMENT);


JPanel Map = new JPanel(){


    public void paint(Graphics g2d) {               // Alles was gezeichnet wird ---> hier rein
            
        
               g2d.drawImage(Spielfeld, 0, 0, getWidth(), getHeight(), this);     
      
    }};              
             

           

JFrame frame = new JFrame();


frame.add(BorderLayout.NORTH,Oben);
frame.add(BorderLayout.WEST,Links);
frame.add(BorderLayout.SOUTH,Unten);
frame.add(BorderLayout.CENTER,Map);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize((int)screensize.getWidth(),(int)screensize.getHeight()-30);
frame.setVisible(true);


}



public void setUnits(){}

public void attack(){}

public void dice (){}

public void changeUnits(){}


public void actionPerformed(ActionEvent arg0) {        // kommt man wohl nicht drumrum , zumindest für testläufe
        
      
    repaint();  
               
                
     }
          
}
```


----------



## Camino (22. Jan 2012)

kol789 hat gesagt.:


> HEy ich und ein paar Freunde wollen Risiko und java programmieren und haben Probleme dabei die Buttons Tauschen und Start im Borderlayout Bereich south zu verschieben
> 
> danke für jede Hilfe
> 
> ...



Hmm, einfach die Reihenfolge ändern, wie die Buttons hinzugefügt werden, also zuerst BStart und dann BTauschen? Und das Objekt klein schreiben, also nicht Unten sondern unten...


----------



## Camino (22. Jan 2012)

Uups, vielleicht hab ich's auch falsch gelesen und verstanden. Sollen die Buttons vertauscht oder verschoben werden? Und wenn ja, wohin? Meinst du die Ausrichtung im Panel?


----------



## kol789 (22. Jan 2012)

also die Buttons sollen auf dem Bildschirm unten Links sein also auf dem Panel nach links verschoben werden


----------



## GUI-Programmer (22. Jan 2012)

Könntes du mal 2 Bilder erstellen, also Zustand vor Verschiebung und Zustand nach der Verschieben.

Allgemein kann ich dir aber trozdem schon was dazu sagen:
Das Panel, in welchem sich der Button befindet sollte bei der Verwendung eines LayoutManagers (was du hofftentlich tust) bereits beim Erstellen des Layouts einen vorgerfertigen Platz zur Verfügung gestellt bekommen. So musst du dann nur noch den Button vom Panel entfernen (
	
	
	
	





```
panel.remove(button);
```
) und an den bestimmten Platz wieder hinzufügen (
	
	
	
	





```
panel.add(button);
```
). Wobei das Hinzufügen ja nach Layout halt unterschiedlich ausfällt.

Hier mal ein KSKB mit FormLayout von JGoodies:

```
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Dimension;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.layout.RowSpec;


@SuppressWarnings("serial")
public class ButtonVerschieben extends JPanel {
	protected JPanel pnlCenter;
	protected JPanel pnlSouth;
	protected JButton btnVerschiebe;
	protected JButton btnTestButton;

	public ButtonVerschieben() {
		setPreferredSize(new Dimension(300, 200));
		setLayout(new BorderLayout(0, 0));
		
		pnlCenter = new JPanel();
		pnlCenter.setBackground(Color.WHITE);
		pnlCenter.setLayout(new GridBagLayout());
		
		btnVerschiebe = new JButton("Verschiebe den Button");
		btnVerschiebe.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				pnlSouth.remove(btnTestButton);
				pnlSouth.add(btnTestButton, "1, 1, 1, 1, center, center");
				pnlSouth.repaint();
				pnlSouth.validate();
			}
		});
		pnlCenter.add(btnVerschiebe);
		
		add(pnlCenter, BorderLayout.CENTER);
		
		pnlSouth = new JPanel();
		pnlSouth.setPreferredSize(new Dimension(300, 40));
		pnlSouth.setLayout(new FormLayout(
			new ColumnSpec[] {
				ColumnSpec.decode("80px:grow"),
				ColumnSpec.decode("220px:grow")
			},
			new RowSpec[] {
				RowSpec.decode("40px:grow"),
			}
		));
		
		btnTestButton = new JButton("Test");
		pnlSouth.add(btnTestButton, "2, 1, 1, 1, center, center");
		
		add(pnlSouth, BorderLayout.SOUTH);
	}
	
	private static void createFrame() {
		JFrame f = new JFrame("Button Verschieber");
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setContentPane(new ButtonVerschieben());
		f.pack();
		f.setLocationRelativeTo(null);
		f.setVisible(true);
	}
	
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				createFrame();
			}
		});
	}
}
```


----------

