2015-09-12 3 views
0

Мне интересно, имеет ли кто-нибудь большой опыт работы с JavaFX 8. Я занимаюсь манерами формы и должен их выровнять (я использую OCD с этим материалом). Я знаю, что в Swing я могу использовать GridBagLayout, но это больше не применимо, где я могу установить весы, а что нет, но я не думаю, что могу сделать это с помощью GridPane, есть ли эквивалент этого в JavaFX?Выравнивание компоновки JavaFX, эквивалентное GridBagLayout

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

https://gyazo.com/c112ab623ffd66e6f723eb9be1fcaea9

код также доступен до

public class ControlsPanel extends GridPane { 
    private TextField[] buttons; 
    private TextField[] miscTextFields; 

    private Label[] labels; 

    private Button startSimBtn; 

    private TabPane tabPane; 
    private Tab cooperatorTab, defectorTab; 
    private final int PADDING = 5; 
    private final String[] v = 
     { 
      "C_A_N", "C_A_PD", 
      "C_A_PN", "C_N_N", 
      "C_N_PD", "C_N_PN", 
      "D_A_N", "D_A_PD", 
      "D_A_PN", "D_N_N", 
      "D_N_PD", "D_N_PN" 
     }; 
    private final String[] miscTfLabelValues = 
    { 
      "Apology cost: ", "Noise level: ", "Punishmment Cost: ", "Punished Cost: " 
    }; 

    public ControlsPanel() 
    { 
     buttons = new TextField[12]; 
     labels = new Label[buttons.length]; 
     miscTextFields = new TextField[miscTfLabelValues.length]; 

     for(int k = 0; k < miscTfLabelValues.length; k++) 
     { 
      miscTextFields[k] = new TextField(); 
     } 

     for(int j = 0; j < buttons.length; j++) 
     { 
      buttons[j] = new TextField(); 
     } 

     for(int i = 0; i < v.length; i++) 
     { 
      labels[i] = new Label(v[i]); 
     } 

     tabPane = new TabPane(); 
     startSimBtn = new Button("Start"); 

     cooperatorTab = new Tab("Cooperator"); 
     defectorTab = new Tab("Defector"); 

     layoutComponents(); 
    } 

    private void layoutComponents() 
    { 
     setAlignment(Pos.TOP_LEFT); 

     cooperatorTab.setContent(layoutCooperatorTab()); 
     cooperatorTab.setClosable(false); 
     defectorTab.setContent(layoutDefectorTab()); 
     defectorTab.setClosable(false); 

     tabPane.getTabs().addAll(cooperatorTab, defectorTab); 

     getColumnConstraints().add(new ColumnConstraints(Values.SCREEN_WIDTH)); 

     add(tabPane, 0, 0); 

     add(layoutMiscPane(), 0, 1); 
    } 

    private GridPane layoutMiscPane() 
    { 
     GridPane pane = new GridPane(); 

     pane.setAlignment(Pos.TOP_LEFT); 
     pane.setHgap(10); 
     pane.setVgap(10); 
     pane.setPadding(new Insets(PADDING,PADDING,PADDING, 15)); 


     pane.setPadding(new Insets(0, 75, 15, 15)); 
     pane.add(new Label(miscTfLabelValues[0]), 0, 1); 

     pane.add(miscTextFields[0], 1, 1); 

     pane.setPadding(new Insets(0, -100, 0, 0)); 
     pane.add(new Label(miscTfLabelValues[1]), 0, 2); 

     pane.add(miscTextFields[1], 1, 2); 

     // 
     pane.add(new Label(miscTfLabelValues[2]), 0, 3); 

     pane.add(miscTextFields[2], 1, 3); 

     // 
     pane.add(new Label(miscTfLabelValues[3]), 0, 4); 

     pane.add(miscTextFields[3], 1, 4); 

     return pane; 

    } 
    private GridPane layoutCooperatorTab() 
    { 

     GridPane pane = new GridPane(); 

     pane.setAlignment(Pos.TOP_LEFT); 
     pane.setHgap(10); 
     pane.setVgap(10); 
     pane.setPadding(new Insets(PADDING,PADDING,PADDING, 15)); 

     pane.add(labels[0], 0, 1); 

     pane.add(buttons[0], 1, 1); 

     pane.add(labels[1], 0, 2); 

     pane.add(buttons[1], 1, 2); 

     // 
     pane.add(labels[2], 0, 3); 

     pane.add(buttons[2], 1, 3); 

     // 
     pane.add(labels[3], 0, 4); 

     pane.add(buttons[3], 1, 4); 


     // 
     pane.add(labels[4], 0, 5); 

     pane.add(buttons[4], 1, 5); 

     // 
     pane.add(labels[5], 0, 6); 

     pane.add(buttons[5], 1, 6); 

     return pane; 
    } 
    private GridPane layoutDefectorTab() 
    { 
     GridPane pane = new GridPane(); 

     pane.setAlignment(Pos.TOP_LEFT); 
     pane.setHgap(10); 
     pane.setVgap(10); 
     pane.setPadding(new Insets(PADDING,PADDING,PADDING,15)); 

     pane.add(labels[6], 0, 1); 

     pane.add(buttons[6], 1, 1); 

     pane.add(labels[7], 0, 2); 

     pane.add(buttons[7], 1, 2); 

     // 
     pane.add(labels[8], 0, 3); 

     pane.add(buttons[8], 1, 3); 

     // 
     pane.add(labels[9], 0, 4); 

     pane.add(buttons[9], 1, 4); 


     // 
     pane.add(labels[10], 0, 5); 

     pane.add(buttons[10], 1, 5); 

     // 
     pane.add(labels[11], 0, 6); 

     pane.add(buttons[11], 1, 6); 

     return pane; 
    } 
} 

ответ

6

GridPane действительно ближайший эквивалент в JavaFX к Свинг GridBagLayout. Вы получаете большой контроль над распределением пространства для столбцов и строк с помощью объектов ColumnConstraints и RowConstraints. Они могут выделять абсолютные значения min/pref/max (ширина для столбцов и высота для строк) или могут выделять процент от общей ширины/высоты. Вы также можете выделять приоритеты для роста, если GridPane растет больше, чем предпочтительный размер, и свойства выравнивания, если ячейка содержит больше места, чем использует ее узел.

Кроме того, существуют статические методы в GridPane, которые могут устанавливать свойства на узлах; это позволяет контролировать выравнивание и увеличивать приоритеты по принципу «один за другим», а также позволяет указывать поля для каждого узла.

Например, в методе layoutMiscPane(), вы могли бы сделать

ColumnConstraints leftCol = new ColumnConstraints(); 
leftCol.setHalignment(HPos.RIGHT); 
ColumnConstraints rightCol = new ColumnConstraints(); 
rightCol.setHgrow(Priority.ALWAYS); 
rightCol.setfillWidth(true); 

pane.getColumnConstraints().addAll(leftCol, rightCol); 

См documentation for GridPane, а также для ColumnConstraints и RowConstraints.

+0

Спасибо, это помогло :) – peteratkinson1

-1

Вы должны быть в состоянии стилизовать все это путем применения правильного CSS к ним.

textfield.getStyleClass().add("mystyle"); 

Таким образом, вы можете добавить выравнивание, шрифт вес и т.д.

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