Rozmieszczenie elementów w oknie.

0

Witam
Nie mogę sobie poradzić z rozmieszczeniem elementów w oknie. Chodzi mi o to żeby stworzyć rozmieszczenie jak na załączonym rysunku. U góry jest panel, na którym jest coś rysowane. Na dole są przyciski. Stworzyłem klasę główną dziedzicząca po JFrame i swoją klasę dziedziczącą po JPanel na której sobie rysuje (nadpisałem metodę paintComponent()). Problem jest taki, że w konstruktorze panelu ustawiam wielkość, potem go dodaje do JFrame (próbowałem umieścić panel w panelu i efekt taki sam) i dodaje 3 przyciski no i robi mi się to co na drugim załączonym rysunku. Jeśli zmienie layout to albo przyciski są rozciągnięte, albo ten panel do rysowania zakrywa wszystko. Chodzi mi koniecznie o IDENTYCZNE rozłożenie jak na 1 załączniku. Pomoże ktoś?

0

Może tak:

import java.awt.*;
import javax.swing.*;
public class Panele extends JFrame
{
    public static void main(String[] args)
    {
        new Panele();
    }
    public Panele()
    {
        setLayout(new BorderLayout(0,50));
        add(new Panelik(),BorderLayout.CENTER);

        JPanel panel=new JPanel();
        panel.setBorder(BorderFactory.createLineBorder(Color.black));
        panel.add(new JButton("zatrzymaj"));
        panel.add(new JButton("stop"));
        panel.add(new JButton("wznów"));
        add(panel,BorderLayout.SOUTH);

        pack();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
    class Panelik extends JPanel
    {
        public Panelik()
        {
            setPreferredSize(new Dimension(400,300));
        }
        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            g.setColor(new Color(158,63,0));
            g.fillRect(5,5,390,290);
        }
    }
}
0

Nie wiedziałem że setSize i setPreferredSize zrobią taką różnicę, ale już przynajmniej nie mam panelu jako małego kwadracika. Ale i tak nie o to chodzi, bo teraz wypełnia całą górę panelem i nie ma przerw pomiędzy krawędzią panelu a krawędzią okna. Chciałbym tylko pomniejszyć ten panel. Jak mu dam mniejszy size to i tak go rozciąga ;/ A jak go zmniejszyć i wyśrodkować?

Edit:
Teraz usunąłem całkiem setPreferredSize a i tak wyświetla się na całości więc nie rozumiem tego o co kaman:P

0

Wstaw sobie puste panele z lewej, z prawej i u góry.

0

musisz ostro popracować LayoutManager'ami :)

Jak chcesz na szybko to zrobić to użyj kreatora...

0

E tam, ostro (jeden LayoutManager i trochę pustych paneli)

import java.awt.*;
import javax.swing.*;
public class Panele extends JFrame
{
    public static void main(String[] args)
    {
        new Panele();
    }
    public Panele()
    {
        setLayout(new BorderLayout(20,20));
        add(new Panelik(),BorderLayout.CENTER);

        JPanel bottom=new JPanel();
        bottom.setLayout(new BorderLayout(20,20));

        JPanel buttons=new JPanel();
        buttons.setBorder(BorderFactory.createLineBorder(Color.black));
        buttons.add(new JButton("zatrzymaj"));
        buttons.add(new JButton("stop"));
        buttons.add(new JButton("wznów"));

        bottom.add(new JPanel(),BorderLayout.NORTH);
        bottom.add(buttons,BorderLayout.CENTER);
        bottom.add(new JPanel(),BorderLayout.SOUTH);
        bottom.add(new JPanel(),BorderLayout.EAST);
        bottom.add(new JPanel(),BorderLayout.WEST);
        add(new JPanel(),BorderLayout.EAST);
        add(new JPanel(),BorderLayout.WEST);
        add(bottom,BorderLayout.SOUTH);

        pack();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
    class Panelik extends JPanel
    {
        public Panelik()
        {
            setPreferredSize(new Dimension(400,300));
        }
        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            g.setColor(new Color(158,63,0));
            g.fillRect(0,0,400,300);
        }
    }
}

Jak zrobić margines u góry, wymyśl sam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1