2013-07-31 19 views
5

Próbuję zrobić GUI dla aplikacji bankowej w JAVA. Użycie absolutnego układu dla mojej ramki jest tak łatwe do stworzenia czegokolwiek, jeśli korzystam z WindowBuilder w czasie zaćmienia, ale problem z tym jest kiedy zmieniam rozmiar ramki. Dlatego zdecydowałem się użyć gridBagLayout, gdzie mogę użyć weightx/y, aby ułatwić mi pracę. W pewnym sensie zapomniałem poprawnie korzystać z tego układu, więc utknąłem przy pierwszej próbie dodania JPanela do mojego głównego panelu gridBagLayout.gridBagLayout vs absoluteLayout

To jest to, co chcę osiągnąć (made in absolutnego układu):

enter image description here

A to co mam (made in gridBagLayout):

enter image description here

jeśli ktoś może wskazać mi, co muszę zmienić/dodać, kiedy po raz pierwszy dodaję panel flowLayout, byłbym wdzięczny. Zasadniczo biała przestrzeń pierwszej komórki - chcę się jej pozbyć i kontrolować!

Oto kod:

setBackground(new Color(255, 255, 255)); 
    GridBagLayout gridBagLayout = new GridBagLayout(); 
    gridBagLayout.columnWidths = new int[]{0, 0}; 
    gridBagLayout.rowHeights = new int[]{0, 0}; 
    gridBagLayout.columnWeights = new double[]{1.0, Double.MIN_VALUE}; 
    gridBagLayout.rowWeights = new double[]{1.0, Double.MIN_VALUE}; 
    setLayout(gridBagLayout); 

    JPanel panel = new JPanel(); 
    FlowLayout flowLayout = (FlowLayout) panel.getLayout(); 
    flowLayout.setVgap(15); 
    flowLayout.setHgap(15); 
    flowLayout.setAlignment(FlowLayout.LEFT); 
    panel.setBackground(new Color(51, 102, 204)); 
    GridBagConstraints gbc_panel = new GridBagConstraints(); 
    gbc_panel.anchor = GridBagConstraints.NORTH; 
    gbc_panel.fill = GridBagConstraints.HORIZONTAL; 
    gbc_panel.gridx = 0; 
    gbc_panel.gridy = 0; 
    add(panel, gbc_panel); 

    JLabel label = new JLabel("European Bank"); 
    label.setForeground(Color.WHITE); 
    label.setFont(new Font("Tahoma", Font.PLAIN, 25)); 
    panel.add(label); 

    JLabel lblYourBankAccounts = new JLabel("Your Bank Accounts"); 
    lblYourBankAccounts.setForeground(new Color(153, 153, 153)); 
    lblYourBankAccounts.setFont(new Font("Tahoma", Font.PLAIN, 19)); 
    GridBagConstraints gbc_label = new GridBagConstraints(); 
    gbc_label.insets = new Insets(0, 60, 0, 0); 
    gbc_label.anchor = GridBagConstraints.LINE_START; 
    gbc_label.gridx = 0; 
    gbc_label.gridy = 1; 
    add(lblYourBankAccounts, gbc_label); 

    JScrollPane scrollPane = new JScrollPane(); 
    GridBagConstraints gbc_scrollPane = new GridBagConstraints(); 
    gbc_scrollPane.insets = new Insets(10, 60, 10, 10); 
    gbc_scrollPane.weightx = 1.0; 
    gbc_scrollPane.weighty = 1.0; 
    gbc_scrollPane.gridx = 0; 
    gbc_scrollPane.gridy = 2; 
    gbc_scrollPane.fill = GridBagConstraints.BOTH; 
    add(scrollPane, gbc_scrollPane); 
+3

Polecam użyciu wizualnych Designer, jest o wiele łatwiej i szybciej niż robi to ręcznie. eclipse, jformdesigner, netbeans, jest wiele opcji. – Robadob

+0

Rozwiązałem mój problem. Skomentowałem /*gridBagLayout.columnWidths = new int [] {0, 0}; \t \t gridBagLayout.rowHeights = new int [] {0, 0}; \t gridBagLayout.columnWeights = new double [] {1,0, Double.MIN_VALUE}; \t \t gridBagLayout.rowWeights = nowe podwójne [] {1,0, Double.MIN_VALUE}; */ Używam dodatku WindowBuilder w czasie zaćmienia. Rzeczywiście generowane jest 50% tego kodu. Może dlatego nie zrozumiałem, dlaczego mam tę białą przestrzeń. – Chris

+2

@Chris: Możesz uczynić swój kod nieco bardziej czytelnym poprzez wykonanie prostej funkcji, która dodaje komponent do określonego kontenera, posiadając 'GridBagLayout' jako" Menedżer Układu ", jak pokazano w tym [przykładzie] (http://stackoverflow.com/a/17919032/1057230) –

Odpowiedz

1

Polecam wbudowanego układu Customizer w Netbeans. Łatwo się z tego nauczyć. Mam nadzieję, że to pomoże.

W przypadku rodzaju problemu należy spróbować dopasować ciężary komponentu, który chcesz rozciągnąć.

Oto zrzut ekranu, jak to zrobić: http://goo.gl/TBPY9i