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
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.