AWT Layoutproblem

G

G1astMandy12121

Gast
Guten Tag

Gerne möchte ich ein Layout (siehe unten) erstellen. Leider wird mir oben nur der Text oder ein kleines Quadrat ausgegeben. Leider scheint auch getResource() mit dem FlowLayout nicht zu funktionieren. Könnte mir jmd. helfen?


MEINE CODES
Main.java
Java:
import java.awt.*;
import javax.swing.*;

public class Main
{
	public static void main(String[] args)
	{

                Logo logobild;
                Image logo;

		JFrame cards = new JFrame();
		cards.setTitle("Vordiplomprüfung Programmierung: Memory");
		cards.setSize(600, 300);
		cards.setResizable(false);
		cards.setLayout(new FlowLayout ());
                Color bright = new Color(248,218,254);
		cards.getContentPane().setBackground(bright);
		cards.setVisible(true);

                JLabel title  = new JLabel("Memory");
                JPanel titlepanel = new JPanel();
		titlepanel.setSize(600, 100);
                titlepanel.setBackground(Color.pink);
                cards.add(title);
                cards.add(titlepanel);

                
                JPanel logopanel = new JPanel();
                titlepanel.setBackground(Color.pink);
                logo = getImage(getResource(), "images/webfreelancer.jpg");
                logobild = new Logo(logo, "Ihr Weg zum Erfolg");
                cards.add(logobild);
                cards.add(logopanel);
	}
}

Logo.java
Java:
import java.awt.*;
import javax.swing.*;

public class Logo extends JPanel {

    Image img;
    String txt;

    public Logo(Image ic, String val) {
        img = ic;
        setBackground(Color.WHITE);
        txt = val;
    }

   
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setFont(new Font("Verdana", Font.BOLD, 10));
        g.setColor(Color.GRAY);
        g.drawString(txt, 21, 35);
        g.setColor(Color.MAGENTA);
        g.drawString(txt, 20, 34);
        g.drawImage(img, 11, 1, img.getWidth(this), img.getHeight(this), this);
    }
    
}
 
Zuletzt bearbeitet von einem Moderator:

Marco13

Top Contributor
Hm. Die Aufteilung könnte z.B. sein
Code:
JPanel mit BorderLayout
    NORTH: Die "Titelleiste" mit einem JLabel
    SOUTH: Die "Fußleiste" wieder mit einem JLabel
    CENTER: Ein JPanel mit GridLayout(2,5)
        Darin 2x5 JLabels mit den Bildern
 
T

Tsunamii

Gast
schon mit jframe

Java:
JFrame frame = new JFrame("Titel");
JPanel panel = new JPanel(new BorderLayout());
frame.getContentPane().add(panel);

/*..Erstellen aller weiteren Gui Sachen..*/

panel.add(componente für oben, BorderLayout.NORTH);
panel.add(componente für mitte, BorderLayout.CENTER);
panel.add(componente für unten, BorderLayout.SOUTH);

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.pack(); //setzt größe automatisch
frame.setLocationRelativeTo(null); //zentriert Fenster
frame.setVisible(true);

Hoffe das hilft dir weiter ;)
 
G

G1astMandy12121

Gast
Leider finde ich mich gerade nicht zurecht. Habe einbisschen Mühe mit den Layouts. Hätten Sie eine Art Beispiel?
 
T

Tsunamii

Gast
upps :/

setDefaultCloseOperation muss natürlich so aussehen:
Java:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
sonst würde beim Klick auf den Schließen Button gar nichts passiern

hab meinen Fehler erst jetz gesehen. Kommt davon wenn man einfach Sachen aus seinen eigenen Projekten rauskopiert ohne zu denken^^
 
G

G1astMandy12121

Gast
Nun wird mir ein Fenster in Color.pink angezeigt, sonst jedoch nichts :-(

Aktualisierte Main.java
Java:
import java.awt.*;
import javax.swing.*;

public class Main
{
	public static void main(String[] args)
	{

                Logo logobild;
                Image logo;
 
		JFrame cards = new JFrame("Vordiplomprüfung Programmierung: Memory");
                JPanel game = new JPanel(new BorderLayout());
                cards.getContentPane().add(game);
                Color bright = new Color(248,218,254);
		cards.getContentPane().setBackground(bright);
		cards.setVisible(true);

                JLabel title  = new JLabel("Memory");
                game.add(title, BorderLayout.NORTH);
                JPanel titlepanel = new JPanel();
		titlepanel.setSize(600, 100);
                titlepanel.setBackground(Color.pink);
                cards.add(title);
                cards.add(titlepanel);

                
                JPanel logopanel = new JPanel();
                titlepanel.setBackground(Color.pink);
                logo = getImage(getResource(), "images/webfreelancer.jpg");
                logobild = new Logo(logo, "Ihr Weg zum Erfolg");
                game.add(logobild, BorderLayout.SOUTH);
                cards.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
                cards.pack(); //setzt größe automatisch
                cards.setLocationRelativeTo(null); //zentriert Fenster
                cards.setVisible(true);
                        }
}
 

Marco13

Top Contributor
Ein bißchen aufräumen, sprechende Variablennamen, Kommentare, Schritt für Schritt...
Java:
public class LayoutMain
{
    public static void main(String[] args)
    {
        // Frame basteln
        JFrame frame = new JFrame("Vordiplomprüfung Programmierung: Memory");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Hauptpanel mit BorderLayout in den Frame legen
        JPanel mainPanel = new JPanel(new BorderLayout());
        frame.getContentPane().add(mainPanel);

        // Titel ins NORTH vom Hauptpanel
        JLabel titleLabel  = new JLabel("Memory");
        mainPanel.add(titleLabel, BorderLayout.NORTH);

        // Panel für die Karten ins CENTER vom Hauptpanel
        JPanel cardsPanel = new JPanel();
        cardsPanel.setPreferredSize(new Dimension(600, 100));
        cardsPanel.setBackground(Color.pink);
        cardsPanel.add(new JLabel("Hier die Karten hin"));
        mainPanel.add(cardsPanel, BorderLayout.CENTER);

        // Logo ins SOUTH vom Hauptpanel
        Image logoImage = new BufferedImage(50,50,BufferedImage.TYPE_INT_RGB); //getImage(getResource(), "images/webfreelancer.jpg");
        Logo logoPanel = new Logo(logoImage, "Ihr Weg zum Erfolg");
        mainPanel.add(logoPanel, BorderLayout.SOUTH);

        // NUR einmal GANZ am Ende: Frame sichtbar machen
        frame.pack(); //setzt größe automatisch
        frame.setLocationRelativeTo(null); //zentriert Fenster
        frame.setVisible(true);
    }
}
 
G

G1astMandy12121

Gast
Vielen besten Dank. Funktioniert wunderbar!
Das einzige Problem nun ist, dass mein Logo nicht erscheint. Nur schwarzes Viereck.

Java:
        Image logoImage = new BufferedImage(50,50,BufferedImage.TYPE_INT_RGB); //getImage(getResource(), "images/webfreelancer.jpg");
 

Marco13

Top Contributor
Da wird auch nur ein schwarzes (leeres) Bild erstellt. Das Bild musst du schon irgendwie laden. Mit ImageIO zum Beispiel (wenn's kein Applet werden soll).
 

Ähnliche Java Themen

Neue Themen


Oben