Mam JFrame
, którego korzeń JPanel
jest tworzony z GridBagLayout
. W czasie pracy, płyta jest wypełniona składników opartych na niektórych opis, szerokość, wysokość, a x, y koordy podano w opisie do stosowania z gridwidth
, gridheight
, gridx
i gridy
pól GridBagConstraints
. Same komponenty mogą być również JPanel
s z ich własnymi komponentami potomnymi i GridBagConstraints
, GUI jest opisane w drzewie, więc Ramka jest rekursywnie wypełniana.Czy komponenty siatki mogące wyświetlać ramkę rodzica po zmianie rozmiaru?
Problem polega na tym, że podczas zmiany rozmiaru ramki wewnętrzne komponenty nie są rozciągane, aby wypełnić podane szerokości i wysokości. Podałem przykład kodu układu poniżej ze zrzutami ekranu.
import javax.swing.*;
import javax.swing.border.TitledBorder;
import java.awt.*;
import java.util.*;
public class GridBagTest extends JPanel {
private final GridBagConstraints gbc = new GridBagConstraints();
public GridBagTest(){
setLayout(new GridBagLayout());
add(gbcComponent(0,0,1,2), gbc);
add(gbcComponent(1,0,2,1), gbc);
add(gbcComponent(1,1,1,1), gbc);
add(gbcComponent(2,1,1,1), gbc);
}
//Returns a JPanel with some component inside it, and sets the GBC fields
private JPanel gbcComponent(int x, int y, int w, int h){
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = w;
gbc.gridheight = h;
gbc.fill = GridBagConstraints.BOTH;
JPanel panel = new JPanel();
JTextField text = new JTextField("(" + w + ", " + h + ")");
panel.setBorder(new TitledBorder("(" + x + ", " + y + ")"));
panel.add(text);
return panel;
}
public static void main (String args[]){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new GridBagTest());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
muszę ją więc na rysunku 2, wewnętrzne JPanel
s posiadający komponenty są przeskalowane w celu wypełnienia odpowiedniej szerokości i wysokości na GridBagLayout
, idealnie rozciąganie ich komponentów, jak również.
Wygląda na to! Nie mogę uwierzyć, że nigdy wcześniej tego nie próbowałem. Czy jest jakiś sposób, że wewnętrzne panele, które mają tylko jeden komponent, mają ten rozmiar rozciągający się, by go wypełnić? tj. szerokości pól tekstowych są rozciągnięte? –
@ adnan_252: tak, ale musisz podać te wewnętrzne menedżery układów JPanels, które pozwalają na takie opcje, jak GridBagLayout lub BorderLayout, lub ... Obecnie twoje wewnętrzne JPanele używają tylko domyślnego FlowLayout, a ten układ jest dość prosty i nie nie rozciągać komponentów. –
jeszcze raz dziękuję, to było naprawdę przydatne! –