Frage zu "setSize(int x, int y)"

ChangeMeDEV

Grünschnabel
Hallo liebe Leute.
Bin neu hier und habe gleich mal eine Frage.
Ich habe die Antwort schon einmal gefunden, sie aber vergessen und finde sie nicht mehr,

Mit welcher Funktion kann ich bestimmen, dass "setSize()" nicht das Fenster, sondern die Benutzerfläche bestimmt?

fensterd.png

Hier mal der Source Code:

Java:
import javax.swing.*;

public class Tamagotchi{
	public Tamagotchi(){
		JFrame client = new JFrame();
		client.setTitle("Fenster");
		client.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		client.setSize(300,300);
		client.setVisible(true);
		client.setLocationRelativeTo(null);
		client.setResizable(false);
		
	}
	
	public static void main(String[] args){
		new Tamagotchi();
	}
}


Könnte mir da jemand schnell weiterhelfen?
Danke schon einmal für das Lesen! :)

ChangeMeDEV
 
Zuletzt bearbeitet von einem Moderator:
Hallo und willkommen im Forum!
probier mal setBounds() und setMinimumSize. Wenn nötig auch vom JContentPane.

btw: verwende bitte die java-Tags wie in meiner Signatur angegeben, php-Tags sind für Java-Code nicht so sinnvoll…
 
Hey! Danke für die schnelle Antwort. Habe den Code verändert.
Könntest du mir die zwei befehle bitte genauer erklären. Bin noch cniht so lange im Java Boot ;)

ChangeMeDEV
 
Du müsstest dafür einfach noch die Insets in die Berechnung mit einfließen lassen. Die Insets geben die Maße der Ränder an und man bekommt diese über die Methode getInsets().

Das könnte dann so aussehen:
Java:
Insets insets = getInsets();
int width = 500 + insets.left + insets.right;
int height = 500 + insets.top + insets.bottom;
setSize(width, height);
Code ist zwar nicht getestet, aber sollte laufen.
 
Ich habe es nun so gelöst, dass ich esmit .pack() und .setPreferedSize() gemacht habe.

Klappt an sich alles sehr gut!

Jedoch habe ich ein Problem.
Ich habe 2 Klassen:

Java:
import java.awt.*;
import javax.swing.*;
 
public class Board{ 
    public Board(){
        JPanel panel = new JPanel();
        panel.setFocusable(true);
        panel.setPreferredSize(new Dimension(300,300))
        panel.setBackground(Color.BLUE);
        panel.setLayout(null); 
        JButton oben = new JButton();
        oben.setSize(50,100);
        panel.add(oben);
    }
}

Java:
import java.awt.*;
import javax.swing.*;
 
public class Tamagotchi{
    public Tamagotchi(){
        JFrame client = new JFrame();
        client.setTitle("ChangeMeDEV - LMS");
        client.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        client.setLayout(new BorderLayout());
        client.add(<<<<XXXX>>>>, BorderLayout.CENTER);
        client.pack();
        client.setLocationRelativeTo(null);
        client.setResizable(false);
        client.setVisible(true);
        
    }
    
    public static void main(String[] args){
        new Tamagotchi();
    }
}


Die erste ist ein Panel und die 2. Das Frame. Wie bekomme ich nun das Panel in das Frame.
Bekomme das wegen den 2 verschiedenen Klassen nicht hin >_<

ChangeMeDEV
 
Zuletzt bearbeitet:
Du hast da weder nen Panel noch ein Frame. Du erzeugst diese lediglich in den Klassen, es sind aber eben keine.

Richtig müsste das so aussehen:
Java:
import java.awt.*;
import javax.swing.*;
 
public class Board extends JPanel { 
    public Board() {
        setFocusable(true);
        setPreferredSize(new Dimension(300,300))
        setBackground(Color.BLUE);
        setLayout(null); 
        
		JButton oben = new JButton("Oben");
        oben.setSize(50,100);
        add(oben);
    }
}
und
Java:
import java.awt.*;
import javax.swing.*;
 
public class Tamagotchi extends JFrame {
    public Tamagotchi(){
        setTitle("ChangeMeDEV - LMS");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        // setLayout(new BorderLayout()); // <- JFrame verwendet standardmäßig bereits das BorderLayout, daher unnötig
        add(new Board(), BorderLayout.CENTER);
		
        pack();
        setLocationRelativeTo(null);
        setResizable(false);
        setVisible(true);
    }
    
    public static void main(String[] args){
        new Tamagotchi();
    }
}
 
Zurück