2014-02-07 5 views
1

Я пытаюсь создать форму на Java с Swing, и у меня возникают трудности с управлением моими макетами.Как можно центрировать выравнивание компонента с SpringLayout

Я хочу иметь несколько текстовых полей с метками в центре диалога и иметь кнопки «сохранить» и «закрыть» в правом нижнем углу.

Добавление кнопок в правом нижнем углу диалога прост, но я не уверен, как выравнивать текстовые поля по центру. Я понял, что если бы не был метод центра компонентов, то я мог бы выровнять поле, вычислив центр диалогового окна, а затем обновив позицию, когда диалог будет изменен. Но я новичок в качелях, и я не уверен, как это сделать (или если это даже хорошая идея).

Как можно центрировать выравнивание моих компонентов с помощью диспетчера макетов Spring?

public class Main { 
    public static void main(String args[]) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       MyFrame myFrame = new MyFrame(); 
       myFrame.setVisible(true); 
      } 
     }); 
    } 
} 

Вот как выглядит кадр:

public class MyFrame extends JFrame { 

    JLabel label1; 
    JTextField field1; 

    JLabel label2; 
    JTextField field2; 

    JButton saveButton; 
    JButton closeButton; 

    public MyFrame() { 
     initLookAndFeel(); 
     initFrameProperties(); 
     initContent(); 
     initLayout(); 
    } 

    private initContent() { 
     label1= new JLabel("Label 1"); 
     field1= new JTextField(); 
     label1.setLabelFor(field1); 

     label2= new JLabel("Label 2"); 
     field2= new JTextField(); 
     label2.setLabelFor(field2); 

     saveButton = new JButton("Save"); 

     closeButton = new JButton("Close"); 
     closeButton.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent event) { 
       System.exit(0); 
      } 
     }); 


     this.add(label1); 
     this.add(field1); 
     this.add(lebel2); 
     this.add(field2); 
     this.add(saveButton); 
     this.add(closeButton); 
    } 

    private void initLayout() { 
     SpringLayout layout = new SpringLayout(); 

     this.setLayout(layout); 
    } 
+0

1) Чтобы лучше помочь, отправьте сообщение [MCTaRE] (http://stackoverflow.com/help/mcve) (минимальный полный тестируемый и читаемый пример). 2) Предоставьте ASCII-искусство (или изображение с простым рисунком) графического интерфейса пользователя, поскольку оно должно отображаться в наименьшем размере и (при изменении размера) с дополнительной шириной/высотой. –

+0

@leigero Обязательно добавьте примечание '@', чтобы * уведомить человека * о новом комментарии. И в ответ на ваш запрос это более короткая версия того, что пытался передать SSCCE, так что да. Кроме того, MCTaRE размещается здесь в Stack Exchange, тогда как домен SSCCE.org, в котором размещен документ SSCCE, будет исчезать навсегда в конце февраля. –

ответ

3
  • SpringLayout.NORTH определяет верхний край прямоугольника компонента при его.
  • SpringLayout.SOUTH указывает нижний край ограничивающего прямоугольника компонента.
  • SpringLayout.EAST указывает правый край ограничивающего прямоугольника компонента.
  • SpringLayout.WEST указывает левый край ограничивающего прямоугольника компонента.
  • SpringLayout.BASELINE указывает базовый уровень компонента.
  • SpringLayout.HORIZONTAL_CENTER указывает горизонтальный центр ограничивающего прямоугольника компонента.
  • SpringLayout.VERTICAL_CENTER указывает вертикальный центр ограничивающего прямоугольника компонента.

(How to Use SpringLayout)

Используйте тот же springLayout.putConstraint() для размещения в центре, как вы делаете в углу.

+0

Я уже прочитал страницу, которую вы связали/скопировали и вставили. Я ищу способ центрировать выравнивание текстового поля и сохранить его по центру после изменения размера с помощью макета Spring. Если я должен был догадаться, я бы сказал, что вы предлагаете использовать «SpringLayout.HORIZONTAL_CENTER» так? 'layout.putConstraint (SpringLayout.HORIZONTAL_CENTER, myfield, 0, SpringLayout.HORIZONTAL_CENTER, это);' –

+0

yes. И в чем проблема? – Gangnus

4

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

SpringLayout layout = new SpringLayout(); 

// For Horizontal Alignment  
layout.putConstraint(SpringLayout.HORIZONTAL_CENTER, component, 0, SpringLayout.HORIZONTAL_CENTER, contentPane); 

// For Vertical Alignment 
layout.putConstraint(SpringLayout.VERTICAL_CENTER, component, 0, SpringLayout.VERTICAL_CENTER, contentPane); 

setLayout(layout); 
Смежные вопросы