2014-02-17 4 views
-2

Я только начал учиться основам Java JFrame и JSwing. Это все забава и игры.GridBagLayout и места размещения

Я слышал, что GridBagLayout - это макет, который нужно освоить, если вы хотите сделать GUI с Java, и я это сделаю, поэтому я привязываюсь.

Недавно, сегодня, я попытался сделать графический интерфейс для себя, с некоторыми хорошими результатами. Однако я столкнулся с проблемой.

Мой код выглядит следующим образом:

String inputText; 

public welcomeFrame(String title) { 
    super(title); 

    Container c = getContentPane(); 
    GridBagConstraints gc = new GridBagConstraints(); 

    launchGUI.setMyDefaults(this, 800, 300); 

    setLayout(new GridBagLayout()); 

    gc.weighty = 1; 

    gc.anchor = GridBagConstraints.NORTH; 

    gc.gridx = 0; 
    gc.gridy = 0; 

    c.add(intro1, gc); 

    gc.gridx = 0; 
    gc.gridy = 1; 

    c.add(intro2, gc); 

    gc.gridx = 0; 
    gc.gridy = 2; 

    c.add(intro3, gc); 

    gc.gridx = 0; 
    gc.gridy = 3; 

    c.add(intro4, gc); 

    gc.gridx = 0; 
    gc.gridy = 4;  

    c.add(intro5, gc); 

    gc.anchor = GridBagConstraints.SOUTH; 

    gc.gridx = 0; 
    gc.gridy = 5;  

    c.add(tweets, gc); 

    gc.gridx = 1; 
    gc.gridy = 5; 

    c.add(textFrame, gc); 

    textFrame.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 

      inputText = textFrame.getText(); 
      dispose(); 

     } 
    }); 

} 

Что это дает мне это удивительно: enter image description here

Bet вы можете определить мою проблему?

Почему все-таки мое текстовое поле?

Как я могу заставить его придерживаться метки «Enter words:»? Вы знаете, как прямо справа от него?

Спасибо всем, и, пожалуйста, будьте нежны, я просто уставился на изучение этого материала.

+2

Дать [Minimal полный пример] (http://stackoverflow.com/help/mcve) для лучшей помощи раньше – Reimeus

+0

@Reimeus Там мы идем, мой метод целиком. – ViRALiC

+0

Это все еще не пример (минимальный), хотя – Reimeus

ответ

1

Если я правильно понимаю ваш вопрос, самым простым решением является добавление JLabel и JTextField в новый JPanel и добавление его в общий макет.

, например:

gc.gridx = 0; 
gc.gridy = 5; 

JPanel panel = new JPanel(); 
panel.add(tweets); 
panel.add(textFrame); 

c.add(panel, gc); 

Вы также можете попробовать регулировки gridwidth в течение первых нескольких строк:

gc.gridwidth = 2;//before adding the intros 
... 
gc.gridwidth = 1;//right after the last intro 
Смежные вопросы