2015-07-03 5 views
1

Мне было интересно, как сосредоточиться на моих компонентах, я нашел gridBagLayout, но я не мог найти способ сделать это больше, чем это: мои кнопки слишком маленькие.Компоненты центра JFrame

Часть моего кода:

private void addMainButtons() { 
     JPanel container = new JPanel() { 
      private static final long serialVersionUID = -424395301619105440L; 

      @Override 
      protected void paintComponent(Graphics g) { 
       super.paintComponent(g); 
       Dimension dim = this.getSize(); 
       DateFormat format = new SimpleDateFormat("dd/MM/yyyy"); 
       Date date = new Date(); 
       g.setFont(new Font("TimesRoman", Font.PLAIN, 20)); 
       g.setColor(Color.BLACK); 
       String s = format.format(date); 
       g.drawString(s, (int) ((dim.getWidth() - s.length() - 80)/2), 20); 
      } 
     }; 
     container.setBackground(new Color(109, 69, 60)); 

     JButton productsButton = new JButton("Produits"); 
     productsButton.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       cl.show(frame, pages[1]); 
      } 
     }); 
     productsButton.setAlignmentY(Component.CENTER_ALIGNMENT); 
     productsButton.setAlignmentX(Component.CENTER_ALIGNMENT); 

     // Creating grid 
     container.setPreferredSize(new Dimension(400, 600)); 
     container.setLayout(new GridBagLayout()); 

     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.fill = GridBagConstraints.BOTH; 
     gbc.gridx = 0; 
     gbc.gridy = 0; 
     gbc.gridwidth = 2; 
     container.add(productsButton, gbc); 

     gbc.gridy = 1; 
     gbc.gridwidth = 1; 
     container.add(new JButton("Entrée"), gbc); 

     gbc.gridx = 1; 
     container.add(new JButton("Sortie"), gbc); 

     mainPage.setLayout(new BorderLayout()); 
     mainPage.add(container, BorderLayout.CENTER); 
     // End of main page 
    } 

GridBagLayout действительно сложно использовать, есть еще один способ центрирования компонентов? Я мог бы использовать NestedLayouts, но я не знаю, как это сделать.

+0

Вы можете влиять на размер компонентов в 'GridBagLayout', используя' ipadx' и 'ipady'. Вам также может потребоваться использовать «fill», чтобы компоненты заполнили доступное пространство их ячейки. – MadProgrammer

+0

. Рассмотрите возможность предоставления [runnable example] (https://stackoverflow.com/help/mcve), который демонстрирует вашу проблему. Это не дамп кода, а пример того, что вы делаете, что подчеркивает проблему, с которой вы сталкиваетесь. Это приведет к меньшему путанице и лучшим ответам. Вы также можете лучше объяснить свои ожидания, заявив, что ваши кнопки «маленькие» действительно не помогают – MadProgrammer

ответ

1

Вы можете использовать weightx и/или weighty осуществить объем пространства компоненты будут занимать, например, если я

GridBagConstraints gbc = new GridBagConstraints(); 
gbc.fill = GridBagConstraints.BOTH; 
gbc.gridx = 0; 
gbc.gridy = 0; 
gbc.gridwidth = 2; 

gbc.weightx = 1; 
gbc.weighty = 1; 

container.add(productsButton, gbc); 

gbc.gridy = 1; 
gbc.gridwidth = 1; 
container.add(new JButton("Entrée"), gbc); 

gbc.gridx = 1; 
container.add(new JButton("Sortie"), gbc); 

я могу генерировать это ...

Big Buttons

Вы можете использовать два контейнера, один из которых содержит JLabel, который показывает дату и ту, которая содержит кнопки, но я сомневаюсь, что это действительно так.

Вы можете использовать ipadx и ipady который добавляет объем к компонентам предпочтительного размера

GridBagConstraints gbc = new GridBagConstraints(); 
gbc.fill = GridBagConstraints.BOTH; 
gbc.gridx = 0; 
gbc.gridy = 0; 
gbc.gridwidth = 2; 

gbc.ipadx = 40; 
gbc.ipady = 40; 

container.add(productsButton, gbc); 

gbc.gridy = 1; 
gbc.gridwidth = 1; 
container.add(new JButton("Entrée"), gbc); 

gbc.gridx = 1; 
container.add(new JButton("Sortie"), gbc); 

Not so big buttons

, который, когда включен с существующими ограничениями, позволяет «расти» кнопки немного ,

0

Попробуйте ввести код для увеличения размера кнопки при добавлении каждого компонента в gridbagconstraints. Измените значение weightx/weighty, как вы хотите.

gbc.weightx = 1.0; 
gbc.weighty = 1.0; 

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

gbc.insets = new Insets(2, 2, 2, 2); 

По моим сведениям, вы использовали правильный способ центровки компонентов. Это также можно сделать с помощью другого макета, но это может быть немного сложно.

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

  • Нет связанных вопросов^_^