JPanel an JFrame anpassen

mapa

Mitglied
Hallo,

ich habe ein JFrame, dem ich ein JPanel mit add() hinzufüge. Ein Teil des Panel wird von der Titelleiste des JFrames überdeckt, hab versuch das ganze panel mit move() nach unten zu bewegen, klappt aber nich ???:L Kann ich den JPanel auch irgendwie anders ans JFrame anpassen???

Java:
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JOptionPane;


public class Game extends JFrame{

	private static final long serialVersionUID = 291555648421589142L;
	
	Board board;
	
	public Game()
	{
		addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		
		board = new Board();
		add(board);
		board.move(5,20);
		
		this.setSize(board.width, board.height);
		setVisible(true);
	}
	
	public static void showErrorMessage(String err)
	{
		JOptionPane.showMessageDialog(null, err, "Error", JOptionPane.ERROR_MESSAGE);
	}
	
	public void loadImages()
	{
		try
		{
		Bomb.bombImage = ImageIO.read(new File("images/bomb.png"));
		Player.bunkerImage1 = ImageIO.read(new File("images/bunker1.png"));
		Player.bunkerImage2 = ImageIO.read(new File("images/bunker2.png"));
		}
		catch (Exception e)
		{
			Game.showErrorMessage("Couldn't load game images:" + e.getMessage());
			System.exit(1);
		}
	}
	
	public static void main(String args[])
	{
		Game game = new Game();
	}

}
 
Zuletzt bearbeitet:
Hi.

Wenn ich das richtig sehe, arbeitest du ohne LayoutManager.

Wenn ...

1. du mit LayoutManager arbeitest:
Sollte das eigentlich gehen. Mach mal die move()-Methode weg

2. du ohne LayoutManager arbeitest:
Positioniere deinen Panel absolut. Ist Board das Panel? Ich denke mal, oder?
Also:
Java:
board = new Board();
board.setBound(int x-start, int y-start, int breite, int hoehe)

Sprich dein Panel wird mit der oberen linken Kante an der Position x-start (X-Koordinate) und y-start (Y-Koordinate) positioniert.

3. du keine Ahnung hast was ein LayoutManager ist/macht:
A Visual Guide to Layout Managers (The Java™ Tutorials > Creating a GUI With JFC/Swing > Laying Out Components Within a Container)

Grüße und viel Erfolg!

Felix
 
Das mit dem Layoutmanager scheint noch nich ganz zu funktionieren:

Java:
this.getContentPane().setLayout(new BorderLayout());
		
board = new Board();
add(board, BorderLayout.CENTER);
pack();

Das Fenster ändert seine Größe immer noch nicht 🙁

setBounds() auch nicht..
 
Zuletzt bearbeitet:
Hallo , Methode die die komponenten an ihre größe anpasst ist pack().

u kannst bevorzugte größen der komponenten mir c.setPrefferedSize() erreichen.


grüße spin
 
Deine Klasse Game erbt ja von JFrame, sprich es ist ein JFrame.

Ein LayoutManager setzt du für dein JFrame. damit sagst du, wie weitere Elemente in deinem JFrame angeordnet werden sollen.

Also:

Beispiel, anhand eines FlowLayouts
Java:
FlowLayout fl = new FlowLayout();
this.setLayout(fl);

Board b = new Board();
this.add(b); // Füge deinem JFrame "Game" das Panel "Board" b hinzu
this.pack(); // passt die Größe automatisch an.

Wie Spin schon sagte, ist die JFrame-Methode pack() für ein "Auto-Resize" zuständig.

Grüße
Felix
 
Üblicherweise hantiert man bei einem JFrame nur im ContentPane rum. Mit sowas wie

Java:
    public Game()
    {
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });
        
        board = new Board();
        board.setPreferredSize(new Dimension(400,400));
        getContentPane().add(board);
        pack();
        setVisible(true);
    }

Sollte es funktionieren. Die Zeile
board.setPreferredSize(new Dimension(400,400));
ist nur notwendig, falls das Board nicht von sich aus eine "vernünftige" PreferredSize zurückgibt.
 
Am Rande: Statt … [java=3] addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});[/code]
… reicht auch … [java=3]setDefaultCloseOperation(EXIT_ON_CLOSE);[/code]

Ebenius
 

Zurück
Oben