2017-10-31 6 views
0

ここにJavaFXでの私の現在の出力があります。ラベル枠が一列に並んでいない、フラッシュされていない

私はすべてのラベルと境界線が一杯であることを希望します。

私はすべてのインセットが同じに設定されているので、なぜすべてが整列していないのですか?

もう1つの問題は、境界線の濃いイメージを作成する境界線の重なりが2重になることです。私のラベルのスタイルを設定する際の修正方法はわかりません。この写真の下に関連するコードがあります。ありがとうございました。

enter image description here

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 sがテキストとパディングのために必要なサイズと一致する最大サイズを持っています。 GridPaneは、Labelのサイズを、1桁の数字が列を埋めるために必要なより大きいサイズに変更しません。

最大サイズを無限に設定するだけでこの問題が解決されます。

ダブルボーダーを描画しない場合は、境界線のサイズを右上に1、右下を0、左下を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

ボーダーのためのもう一つのトリックは、(私はこのフォーラムのポストから学んだこと)、グリッドペインにhgapとVGAPを設定し、それを与えることです背景色(ラベルとは異なる)。次に、ギャップ内のグリッドペインの背景が表示され、各セルにボーダーの効果が与えられます。 –

+0

@fabian おはよう、ありがとう、そんなに。私はしばらくこのことを続けてきましたが、あなたの答えは徹底的で信じられないほど明確でした。私のコードを改善して、より効率的で美しいものにするための例をありがとう。あなたは素敵だ。 James_D 革新的なアイデアをありがとう。私は本当にそれが好きです!いつか試してみる。あなたのご意見ありがとうございます。 –

関連する問題