2016-04-06 8 views
1

Ich wollte mit einem Problem um Hilfe bitten. Ich möchte zwei Radiobuttons in einer Spalte verschieben, so dass beide nur so viel Speicherplatz wie Textbox über ihnen nehmen. Wie kann ich das machen? Hier ist der Code und Screenshot der aktuellen unsachgemäßen Version:2 Radiobuttons in eine Spalte ohne überlappende JavaFX setzen

Bitte kennzeichnen Sie meine Frage nicht als doppelt, wenn Sie nicht 100% sicher sind, ok? Es ist nicht nett, Ihre Frageflagge als Duplikat anderer Frage zu haben, zu dieser anderen Frage zu gehen und herauszufinden, dass nur die allgemeine Sache ist, dass sie beide über das Programmieren sind.

enter image description here

GridPane formGrid = new GridPane(); 
    formGrid.setPadding(new Insets(5,5,5,5)); 
    formGrid.setVgap(6); 
    formGrid.setHgap(4); 

    //first row 
    Label nameLabel = new Label("Name"); 
    GridPane.setConstraints(nameLabel, 0, 0); 

    TextField nameInput = new TextField(); 
    GridPane.setConstraints(nameInput, 1, 0); 

    Label ageLabel = new Label("Age"); 
    GridPane.setConstraints(ageLabel, 2, 0); 

    TextField ageInput = new TextField(); 
    GridPane.setConstraints(ageInput, 3, 0); 

    //secondRow 
    Label colourLabel = new Label("Colour"); 
    GridPane.setConstraints(colourLabel, 0, 1); 

    TextField colourInput = new TextField(); 
    GridPane.setConstraints(colourInput, 1, 1); 

    Label genderLabel = new Label("Gender"); 
    GridPane.setConstraints(genderLabel, 2, 1); 

    ToggleGroup pickGender = new ToggleGroup(); 

    RadioButton pickMale = new RadioButton("Male"); 
    pickMale.setToggleGroup(pickGender); 
    pickMale.setSelected(true); 
    GridPane.setConstraints(pickMale, 3, 1, 1, 1); 

    RadioButton pickFemale = new RadioButton("Female"); 
    pickFemale.setToggleGroup(pickGender); 
    GridPane.setConstraints(pickFemale, 4, 1, 1, 1); 


    //third row 
    Label typeLabel = new Label("Type"); 
    GridPane.setConstraints(typeLabel, 0, 2); 
    //combobox 
    ComboBox<String> typeBox = new ComboBox<>(); 
    GridPane.setConstraints(typeBox, 1, 2); 

    Label breedLabel = new Label("Breed"); 
    GridPane.setConstraints(breedLabel, 2, 2); 

    TextField breedInput = new TextField(); 
    GridPane.setConstraints(breedInput, 3, 2); 

    //fourth row 
    Label categoryLabel = new Label("Category: "); 
    GridPane.setConstraints(categoryLabel, 0, 3); 

    ToggleGroup pickCategory = new ToggleGroup(); 

    RadioButton pickLost = new RadioButton("Lost"); 
    pickLost.setToggleGroup(pickCategory); 
    pickLost.setSelected(true); 
    GridPane.setConstraints(pickLost, 1, 3); 

    RadioButton pickFound = new RadioButton("Found"); 
    pickLost.setToggleGroup(pickCategory); 
    GridPane.setConstraints(pickFound, 2, 3); 

    RadioButton pickAdoption = new RadioButton("Adoption"); 
    pickLost.setToggleGroup(pickCategory); 
    GridPane.setConstraints(pickAdoption, 3, 3); 

    //fifth row 
    Label descriptionLabel = new Label("Description"); 
    GridPane.setConstraints(descriptionLabel, 0, 4); 

    TextArea descriptionInput = new TextArea(); 
    GridPane.setConstraints(descriptionInput, 1, 4, 2, 1); 



    formGrid.getChildren().addAll(nameLabel, nameInput, ageLabel, ageInput); 
    formGrid.getChildren().addAll(colourLabel, colourInput, genderLabel, pickMale, pickFemale); 
    formGrid.getChildren().addAll(typeLabel, typeBox, breedLabel, breedInput, categoryLabel); 
    formGrid.getChildren().addAll(pickLost, pickFound, pickAdoption, descriptionLabel, descriptionInput); 

Antwort

2

Denken Sie daran, um die andere Art und Weise. Das Optionsfeld "Female" befindet sich in Spalte 4 und befindet sich rechts von allem in Spalte 3. Spalte 3 wird gezwungen, breit genug zu sein, um die beiden Textfelder zu enthalten, was den Radioknopf bisher erzwingt auf der rechten Seite. Wenn Sie wollen, dass die Textfelder die gleichen horizontalen Raum wie die beiden Radiobuttons zu überbrücken, lassen Sie sie die Spalten verwenden sowohl die Optionsfelder besetzen: also lassen Sie die Textfelder Spalten erstrecken 3 und 4.

TextField ageInput = new TextField(); 
GridPane.setConstraints(ageInput, 3, 0, 2, 1); 

TextField breedInput = new TextField(); 
GridPane.setConstraints(breedInput, 3, 2, 2, 1); 

Jetzt Spalten 3 und 4 enthalten diese beiden Textfelder, Spalte 3 enthält das Optionsfeld "Male" und Spalte 4 enthält das Optionsfeld "Female".

Ich bin mir nicht sicher, ob alles, was Sie ist geschrieben die ganze Form, aber Sie möchten vielleicht auch die Spaltenspanne des Textbereichs erhöhen, um es schön funktioniert:

GridPane.setConstraints(descriptionInput, 1, 4, 4, 1); 

I Mit diesen Änderungen erhalten

enter image description here

(Wenn es Ihnen wichtig ist, können Sie das „Female“ das Kontrollkästchen von vermeiden, indem sie auch nach rechts gedrückt wird, um die Spalte Spannweite des „Adoption“ Kontrollkästchen 2. Einstellung)

Eine weitere Option ist (mit Ihrem ursprünglichen Startcode), um die zwei Radio-Buttons in einem HBox, wickeln und die HBox im Raster Scheibe anstelle der Optionsfelder platzieren:

RadioButton pickMale = new RadioButton("Male"); 
pickMale.setToggleGroup(pickGender); 
pickMale.setSelected(true); 

RadioButton pickFemale = new RadioButton("Female"); 
pickFemale.setToggleGroup(pickGender); 

HBox genderButtons = new HBox(4, pickMale, pickFemale); 
GridPane.setConstraints(genderButtons, 3, 1); 

// ... 

formGrid.getChildren().addAll(colourLabel, colourInput, genderLabel, genderButtons); 

Allerdings ziehe ich die vorherige Ansatz. (Ihre Laufleistung kann variieren.)

Verwandte Themen