Szukasz ogólnej metody tworzenia komponentu GridBagLayout

Projektuję GUI z około 20 komponentami: 10 etykiet, 4 pola tekstowe, 4 przyciski i 2 obszary tekstowe. Korzystanie z GridBagLayout wydawało się świetnym pomysłem. Ale przy wszystkich zmiennych instancji wymaganych do zrobienia tego przez książkę dla każdego komponentu (tj. Nie ponownego użycia), ogólna metoda dodawania komponentów wydawała się koniecznością. Naprawdę myślałem, że to może zadziałać:

(Uwaga: HORIZ to skrót od GridBagConstraints.HORIZONTAL; CENTER to skrót od GridBagConstraints.CENTER.)

public static void addComponent(Container f,      Component c, 
                                  int     x,        int   y, 
                                  int     w,        int   h, 
                                  int     ipadx,    int   ipady, 
                                  float   wtx,      float wty,
                                  int fill, int anchor, Insets insets){


  GridBagConstraints gbc = new GridBagConstraints();

  gbc.gridx = x;    gbc.gridy = y;      
  gbc.gridwidth = w;    gbc.gridheight = h;     
  gbc.fill = fill; 
  gbc.ipadx = ipadx;    gbc.ipady = ipady;  
  gbc.insets = insets;  gbc.anchor = anchor; 
  gbc.weightx = wtx;    gbc.weighty = wty;

  f.add(c,gbc);
}

Nazwałem to tak:

    Insets insets = new Insets(0,0,0,0);
    JFrame frame = new JFrame();
    label = new JLabel("Blablablah");   
    addComponent(frame, label, 0,0, 1,1, 0,0, 0.5f,0, HORIZ, CENTER, insets);

Ale dostałem wiadomość „nie można dodać do layoutu: ograniczenie musi być łańcuchem (lub null)”f.add(c.gbc).

Myślę, że rozumiem błąd:frame nie maGridBagConstraints przed wezwaniem doaddComponent igbc w pierwszej linii metody nie należy do parametruf (albo coś innego?).

Zmodyfikowałem więc nieco podpis metody, pomijającContainer:

public static void addComponent(                  Component c, 
                                  int     x,        int   y, 
... (rest unchanged)

I zmodyfikowałem linię problemu w ten sposób:

frame.add(c, gbc);

Używam więc zmiennej globalnejframe, kiedy wolę przekazać to jako argument.

Dwa pytania:

(1) Czy istnieje sposób na minimalną modyfikację mojego kodu, aby umożliwić przekazywanieframe doaddComponent?

(2) Czy jest jakiś powód, aby to zrobić? Myślę, że to sprowadza się do pytania, co byś zrobił?

P.S. Oto wywołania zmodyfikowanegoaddComponent, pospiesznie rzucone razem, aby uzyskać pozory pierwszych kilku linijek tego, co chcę. Odstępy w tym momencie się zmieniają - muszę małpować z wypustkami, ipadami, wypełnieniami - ale jest to właściwie użyteczne. (Nowa nazwa dlaframe jestGUI.)

private static void createAndShowGUI() {
  GUI = new JFrame();
  GUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  gbl = new GridBagLayout();
  GUI.setLayout(gbl);

  addComponent(lblRootNode, 0,0, 1,1, 0,0, 0.5f,0, HORIZONTAL, CENTER, new Insets(0,0,0,0));    
  addComponent(txtRootNode, 1,0, 5,1, 60,0, 0.5f,0, HORIZONTAL, CENTER, new Insets(0,0,0,0));    
  addComponent(btnBrowse,   6,0, 1,1, 0,0, 0.5f,0, HORIZONTAL, CENTER, new Insets(0,0,0,0));    
  addComponent(lblFilenamePat, 0,1, 2,1, 0,0, 0.5f,0, HORIZONTAL, EAST, new Insets(0,0,0,0));    
  addComponent(txtFilenamePat, 2,1, 4,1, 0,0, 0.5f,0, HORIZONTAL, LINE_END, new Insets(0,0,0,0));    
  addComponent(lblDates, 0,2, 2,1, 0,0, 0.5f,0, HORIZONTAL, CENTER, new Insets(0,0,0,0));    
  addComponent(lblSizes, 2,2, 2,1,   0,0, 0.5f,0, HORIZONTAL, CENTER, new Insets(0,0,0,0));    

...

questionAnswers(4)

yourAnswerToTheQuestion