2015-12-29 2 views
0

Я пробовал несколько решений, но мне ничто не подходит! Я хочу выровнять все по вертикали в центре кадра.Как выровнять компоненты в JFrame по вертикали?

window=new JFrame(); 
    window.setSize(520, 380); 

    window.setTitle("Menu"); 
    window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    window.setLayout(new FlowLayout()); 
    label=new JLabel("Settings",JLabel.CENTER); 
    controlPanel= new JPanel(); 
    controlPanel.setLayout(new GridLayout(10,1)); 

    controlPanel.add(button1);//these are example components 
    controlPanel.add(button2); 
    controlPanel.add(button3); 

    window.add(label); 
    window.add(controlPanel); 
    window.setVisible(true); 

Я хочу иметь в качестве названия слово «Настройки» и точно под ним мои компоненты. Я смог сделать это с помощью gridLayout вместо FlowLayout, но заголовок занимает половину экрана (и я этого не хочу). извините за основной вопрос, как это, но я новичок в Java :)

+2

Почему бы не [BoxLayout] (http://docs.oracle.com/javase/tutorial/uiswing/layout/box.html)? Я удивлен, что ваш поиск макетов не превратил это. Пересмотрите их, начиная с этого места: [Учебное пособие по макету] (http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html). –

+0

Ну, я попытался использовать его, но я не смог дать ему форму, которую хочу ... Я думаю, что я не использовал ее правильно. Спасибо за помощь! – John

+1

Затем покажите нам, как вы использовали макет коробки (код), какой результат вы получили и какой результат вы хотите получить. – user1803551

ответ

1

Вы можете использовать GridBagLayout, например ...

GridBagLayout

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.border.EmptyBorder; 

public class TestLayout { 

    public static void main(String[] args) { 
     new TestLayout(); 
    } 

    public TestLayout() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      setBorder(new EmptyBorder(50, 50, 50, 50)); 
      setLayout(new GridBagLayout()); 
      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridwidth = GridBagConstraints.REMAINDER; 
      gbc.fill = GridBagConstraints.HORIZONTAL; 

      add(new JButton("Apples"), gbc); 
      add(new JButton("Pears"), gbc); 
      add(new JButton("Organges"), gbc); 
      add(new JButton("Grapes"), gbc); 
     } 

    } 

} 

Помните, что с его гибкостью, приходит сложность , Посмотрите на How to Use GridBagLayout для получения более подробной информации

+0

Хорошо. Спасибо! Я попытаюсь использовать его и увижу, что произойдет. – John

Смежные вопросы