[Swing] Ustalanie wysokości JPanelu

0

mam pytanie: jak zrobić, aby ustalić wysokość panelu nazwanego jako top np. na 100? Próbowałem już setSize, setPreferredSize a nic się nie zmienia. Jestem początkujący w Javie więc proszę o wyrozumiałość ;-)

public class Sieci implements ActionListener {
    JFrame frame;
    JPanel schemat, top;
    JTextField nazwaPliku, testWyjscie;
    JLabel informacja;
    JButton ok;
    
    public Sieci() {
        JFrame frame = new JFrame("Sieci");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setAlwaysOnTop(true);
        frame.setMinimumSize(new java.awt.Dimension(800, 600));
        frame.setResizable(true); 
        frame.setLayout(new GridLayout(2,0));
        
        schemat = new JPanel();
        schemat.setBackground(new java.awt.Color(255, 255, 255));
        top = new JPanel();
        
        //ustawienie domyslnego przycisku
        frame.getRootPane().setDefaultButton(ok);

        //dodanie paneli do okna
        top.setPreferredSize(new Dimension(100, 300));
        frame.getContentPane().add(top, BorderLayout.NORTH);        //, BorderLayout.NORTH
        frame.getContentPane().add(schemat, BorderLayout.SOUTH);
        //top.setSize(800,100);
        //top.setPreferredSize(new Dimension(800, 100));
        //schemat.setPreferredSize(new Dimension(800, 400));
        
        addWidgets();
                
        frame.pack();
        frame.setVisible(true);
    }

z góry bardzo dziękuję za pomoc!

0

Rozmieszczenie jakie tu umieściłeś - BorderLayout jest szczególnym przykladem na to że nie da się ustalić rozmiaru komponentów, które chcesz wrzucic do ramki. Element dodany do ramki w tym przypadku 2 obiekty typu JPanel są automatycznie rozszerzalne do max wielkości w ramce. Ustalenie wielkosci dla jednego komponentu ustala automatycznie wielkość innego elementu.
Jeżeli chcesz kombinowac z wielkościami mozesz poszukac sobie informacji na temat innych rozkladow np. SpringLayout badź BoxLayout - ale nie wiem dokladnie czy bedzie to dla Ciebie uzyteczne.
Innym sposobem jest rezygnacja ze standarsdowych rozkładów

setLayout(null) //wyłączasz rozkład domyślny czyli BorderLayout

i ustawienie wielkosci i polozenia recznie

setBounds(x,y,width,height) //x,y odleglosci od lewego gornego rogu

pzdr

0

działa, dziękuję Ci bardzo!

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