Dimensiune fixă ​​a panoului în cadru

Am adaugat cateva componente la JPanel care este setata la layout-ul grilei si adaug acest lucru la JFrame care este setat la aspectul de frontiera. Dar vreau să fixez dimensiunea panoului. Când fereastra mea este maximizată, mărimea tuturor componentelor crește. Vreau panoul din centrul ferestrei, cu dimensiune fixă ​​ , chiar dacă fereastra este maximizată.

0
Dacă oferiți un cod, va fi mai bine. De exemplu, aș arăta în codul dvs. pentru a vedea dacă și unde ați sunat setPreferredSize .
adăugat autor Radu Murzea, sursa
"te rog ajută-mă cu ceva codificare" Vă rugăm să vă ajutați la o întrebare & orice semn de efort. SO nu este o mașină de generare de coduri. BTW - Nu utilizați formatarea codului pentru text și verificați formatele postate așa cum vă așteptați în previzualizare. Votul pentru închidere.
adăugat autor Andrew Thompson, sursa
Dacă panoul conține text lizibil pentru oameni, nu faceți acest lucru ! Metricile de fonturi variază în funcție de platformă.
adăugat autor trashgod, sursa

3 răspunsuri

Plasați panoul cu GridLayout ca o singură componentă într-un GridBagLayout fără nici o constrângere - acesta va fi centrat. Adăugați panoul cu GBL la CENTER al BorderLayout .

Consultați acest exemplu pentru imaginea de mai sus.


Exemplu de layout nesteresc utilizează, de asemenea, GBL pentru a centra imaginea din partea inferioară a panoului de defilare din partea dreaptă.

3
adăugat
+1 pentru o imagine frumoasă și o soluție scurtă.
adăugat autor brimborium, sursa

Ei bine, atunci nu ar trebui să folosiți BorderLayout, deoarece se potrivesc doar componentele copilului. Dacă totuși doriți să utilizați BoderLayout pe JFrame (pentru că aveți nevoie de un panou lateral sau ceva de genul asta), vă puteți împacheta JPanel (cu GridLayout ) într-un alt JPanel cu GridBagLayout sau BoxLayout sau ceva similar și apoi a pus acel alt JPanel în JFrame.

JPanel innerPanel = new JPanel();
innerPanel.setLayout(new GridLayout());
// fill and set your innerPanel

JPanel middlePanel = new JPanel();
middlePanel.setLayout(new GridBagLayout());
middlePanel.add(innerPanel, constraintsThatPlaceItWhereYouWantIt);

JFrame yourFrame = new JFrame();
yourFrame.setLayout(new BorderLayout());
yourFrame.add(middlePanel, BorderLayout.CENTER);
1
adăugat
Ai dreptate, dar încă mai dau constrângeri atunci când adaug, din cauza lizibilității. Și ar putea face ceva mai avansat cu privire la plasare.
adăugat autor brimborium, sursa
Ce zici de ultimul rând: yourFrame.add (middlePanel, BorderLayout.CENTER); ? Ați săriți și codul BorderLayout.CENTER ? Nu aș vrea, deși nu este necesar.
adăugat autor brimborium, sursa
middlePanel.add (innerPanel, constraintsThatPlaceItWhereYouWantIt); Vedeți răspunsul meu pentru motivul pentru care constraintsThatPlaceItWhereYouWantIt este redundant pentru centrarea unei componente în GBL. Se leagă de codul exemplu.
adăugat autor Andrew Thompson, sursa
middlePanel.add (innerPanel/* pus în centru * /); ;)
adăugat autor Andrew Thompson, sursa
    JFrame frame = new JFrame();
    frame.setSize(500, 500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(new BorderLayout());

    JPanel rootPanel = new JPanel();
    frame.getContentPane().add(rootPanel, BorderLayout.CENTER);
    rootPanel.setLayout(new GridBagLayout());

    JPanel contentPanel = new JPanel();

    Dimension dimension = new Dimension(300, 300);
    contentPanel.setMaximumSize(dimension);
    contentPanel.setMinimumSize(dimension);
    contentPanel.setPreferredSize(dimension);
    contentPanel.setBackground(Color.YELLOW);

    GridBagConstraints g = new GridBagConstraints();
    g.gridx = 0;
    g.gridy = 0;
    g.anchor = GridBagConstraints.CENTER;
    rootPanel.add(contentPanel, g);

    frame.setVisible(true);
0
adăugat
Cel puțin nu va ajuta în acest caz.
adăugat autor brimborium, sursa
1) Folosiți formatul codului 2) Acest lucru este rar, dacă vreodată, răspunsul. -1
adăugat autor Andrew Thompson, sursa