Button verschieben

kol789

Mitglied
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

Java:
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();  
               
                
     }
          
}
 
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

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

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...
 
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?
 
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 (
Code:
panel.remove(button);
) und an den bestimmten Platz wieder hinzufügen (
Code:
panel.add(button);
). Wobei das Hinzufügen ja nach Layout halt unterschiedlich ausfällt.

Hier mal ein KSKB mit FormLayout von JGoodies:
Java:
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();
			}
		});
	}
}
 

Neue Themen


Zurück
Oben