2017-10-31 10 views
0

다음은 JavaFX에서의 현재 출력입니다.레이블 테두리가 일렬로 정렬되지 않고 플러시되지 않음

나는 모든 레이블과 테두리를 비 춥니 다.

모든 인 세트가 동일하게 설정되었으므로 왜 모든 것이 정렬되지 않습니까?

국경에 더 어두운 이미지를 만드는 테두리가 두 번 겹쳐서 나타나는 문제가 있습니다. 내 라벨의 스타일을 설정할 때 문제를 해결하는 방법을 잘 모르겠습니다. 이 그림 아래에 관련 코드가 있습니다. 고맙습니다.

public void buildUI() { 
     HBox hbox = new HBox();      // create Hbox 
     hbox.setPadding(new Insets(20,20,40,215)); // centers month name over Grid 
     Label month = new Label ("October");  // create october label 
     //hbox.setVgap(50.0); 
     this.setTop(hbox);       // set hbox to top of borderPane 
     hbox.getChildren().addAll(month);   // add month to hbox 

     this.setCenter(grid);      // add gridPane to center of BorderPane 

     grid.setPadding(new Insets(20,20,20,20)); // add insets to gridPane for aesthetic 


      // below makes S-M-T-W-T-F and green fill 
     for (int i = 0; i <= weekDays.length - 1; i++) { 
      Label daysOfWeek = new Label(weekDays[i]); 
      grid.add(daysOfWeek, i + 1, 1); 

      daysOfWeek.setPadding(new Insets(25,30,25,30)); 
      daysOfWeek.setStyle("-fx-text-fill: white;" + 
         "-fx-background-color: green;" + "-fx-border-color:  black;"); 



     }// end for loop to cycle through days of week 


     //below are the days of the month 
     for (int i = 1; i <= FRAMES; i++) { 
      int yPos = ((i - 1)/7) + 2; 
      int xPos = i - (7 * (yPos -2)); 

      if (i < 32) { 
       Label monthDays = new Label(String.valueOf(i)); 
       grid.add(monthDays, xPos, yPos); 

       monthDays.setPadding(new Insets(25,30,25,30)); 
       monthDays.setStyle("-fx-border-color: black;"); 




      } else if (i > 32) { 
       // below creating november labels days 1 -- 4 
       Label nov1 = new Label("1"); 
       grid.add(nov1, 4, 6); 
       Label nov2 = new Label("2"); 
       grid.add(nov2, 5, 6); 
       Label nov3 = new Label("3"); 
       grid.add(nov3, 6, 6); 
       Label nov4 = new Label("4"); 
       grid.add(nov4, 7, 6); 


       // below padding and making borders for labels 
       nov1.setPadding(new Insets(25,30,25,30)); 
       nov1.setStyle("-fx-text-fill: white;" + "-fx-border-color: black;" + "-fx-background-color: grey;"); 
       nov2.setPadding(new Insets(25,30,25,30)); 
       nov2.setStyle("-fx-text-fill: white;" + "-fx-border-color: black;" + "-fx-background-color: grey;"); 
       nov3.setPadding(new Insets(25,30,25,30)); 
       nov3.setStyle("-fx-text-fill: white;" + "-fx-border-color: black;" + "-fx-background-color: grey;"); 
       nov4.setPadding(new Insets(25,30,25,30)); 
       nov4.setStyle("-fx-text-fill: white;" + "-fx-border-color: black;" + "-fx-background-color: grey;"); 



      } 


     }// end for loop to cycle through days of month 

    } 

답변

2

Label

enter image description here

텍스트 및 패딩에 필요한 크기에 맞는 최대 크기를 가지고있다. GridPaneLabel의 크기를 1 자리 숫자로 채우는 데 필요한 큰 크기로 조정하지 않습니다.

최대 크기를 무한대로 설정하면이 문제를 해결할 수 있습니다.

이중 테두리를 그리지 않으려면 테두리 크기를 위쪽 및 오른쪽으로 1, 아래쪽 및 왼쪽을 0으로 설정할 수 있습니다. GridPane은 아래쪽 및 왼쪽 너비가 1이고 위쪽 및 오른쪽 너비가 0 인 테두리로 묶습니다. 패딩에 대한 StackPane 그리드 : 경계에 대한

private static final Insets LABEL_PADDING = new Insets(25, 30, 25, 30); 

private static Label createLabel(String text) { 
    Label label = new Label(text); 
    label.setMaxSize(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY); 
    label.setPadding(LABEL_PADDING); 
    return label; 
} 
// below makes S-M-T-W-T-F and green fill 
for (int i = 0; i <= weekDays.length - 1; i++) { 
    Label daysOfWeek = createLabel(weekDays[i]); 
    grid.add(daysOfWeek, i, 0); 
    daysOfWeek.setStyle("-fx-text-fill: white;" 
      + "-fx-background-color: green;" + "-fx-border-color: black;" + "-fx-border-width: 1 1 0 0;"); 

}// end for loop to cycle through days of week 

final String otherMonthStyle = "-fx-text-fill: white;-fx-border-color: black;-fx-background-color: grey;-fx-border-width: 1 1 0 0;"; 

//below are the days of the month 
for (int i = 1; i <= FRAMES; i++) { 
    int yPos = ((i - 1)/7) + 1; 
    int xPos = (i - 1) % 7; 

    if (i < 32) { 
     Label monthDays = createLabel(String.valueOf(i)); 
     grid.add(monthDays, xPos, yPos); 

     monthDays.setStyle("-fx-border-color: black;-fx-border-width: 1 1 0 0;"); 

    } else if (i > 32) { 
     // below creating november labels days 1 -- 4 
     Label nov1 = createLabel("1"); 
     grid.add(nov1, 3, 5); 
     Label nov2 = createLabel("2"); 
     grid.add(nov2, 4, 5); 
     Label nov3 = createLabel("3"); 
     grid.add(nov3, 5, 5); 
     Label nov4 = createLabel("4"); 
     grid.add(nov4, 6, 5); 

     // below padding and making borders for labels 
     nov1.setStyle(otherMonthStyle); 
     nov2.setStyle(otherMonthStyle); 
     nov3.setStyle(otherMonthStyle); 
     nov4.setStyle(otherMonthStyle); 
    } 

}// end for loop to cycle through days of month 

grid.setStyle("-fx-border-color: black;" + "-fx-border-width: 0 0 1 1;"); 

StackPane gridWrapper = new StackPane(grid); 
gridWrapper.setPadding(new Insets(20)); 
+1

또 다른 트릭 (I는이 포럼의 게시물에서 배운) 격자 창에 hgap에와 vgap에를 설정하고 그것을 제공하는 것입니다 배경색 (레이블과 다름) 그런 다음 간격의 격자 창의 배경을보고 각 셀에 테두리 효과를줍니다. –

+0

@ fabian 선생님, 정말 고마워요. 나는 잠시 동안이 일을 해왔고 당신의 대답은 철저하고 믿을 수 없을 정도로 분명했습니다. 더 효율적이고 아름답게 만들기 위해 코드를 개선 한 예제를 제공해 주셔서 감사합니다. 당신은 훌륭합니다. James_D 혁신적인 아이디어에 감사드립니다. 나는 그것을 정말로 좋아한다! 언젠가 그것을 시도 할 것입니다. 귀하의 의견을 보내 주셔서 감사합니다. –