Я предлагаю вам использовать TableView
.Если вы не хотите использовать TableView
, то это вопрос простой математики и убедитесь, что вы используете шрифт Monospace
.В этом примере приложения я нахожу самое длинное слово для каждого столбца.Затем я определяю, сколько пробелов нужно добавить к словам, которые короче самого длинного слова.Затем я добавляю еще четыре пробела для создания полного столбца.
Используется для установки шрифта TextArea
на моноширинный шрифт
textArea.setStyle("-fx-font-family: monospace");
Используется длянайдите самое длинное String
в каждом столбце.
List<Integer> longestDataLengths = new ArrayList();//This variable is global
void findLongestDataLengthsForColumns(List<List<String>> fakeData)
{
for (int i = 0; i < fakeData.size(); i++) {
for (int ii = 0; ii < fakeData.get(i).size(); ii++) {
if (i == 0) {
longestDataLengths.add(fakeData.get(i).get(ii).length());
//System.out.println("added: " + fakeData.get(i).get(ii));
}
else {
//System.out.println("adding: " + i);;//+ fakeData.get(i).get(ii));
if (fakeData.get(i).get(ii).length() > longestDataLengths.get(ii)) {
longestDataLengths.set(ii, fakeData.get(i).get(ii).length());
}
}
}
}
}
Используется для определения количества пробелов, необходимых для заполнения длины столбца
int numberOfSpacesNeeded(int longestLength, String entry)
{
int numberOfSpaceAfterLongestLength = 4;
System.out.println("space needed: " + (longestLength - entry.length() + numberOfSpaceAfterLongestLength));
return longestLength - entry.length() + numberOfSpaceAfterLongestLength;
}
Используется для создания необходимых дополнительных пробелов / пробелов
String createSpace(int numberOfSpaces)
{
StringBuilder spaces = new StringBuilder();
for (int i = 0; i < numberOfSpaces; i++) {
spaces.append(" ");
}
return spaces.toString();
}
Полный пример
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
/**
*
* @author blj0011
*/
public class JavaFXApplication261 extends Application
{
List<Integer> longestDataLengths = new ArrayList();
@Override
public void start(Stage primaryStage)
{
// for (List<String> line : getFakeDBData()) {
// System.out.println(line);
// }
List<List<String>> fakeData = getFakeDBData();
findLongestDataLengthsForColumns(fakeData);
// for (Integer entry : longestDataLengths) {
// System.out.println(entry);
// }
TextArea textArea = new TextArea();
textArea.setStyle("-fx-font-family: monospace");
for (List<String> line : fakeData) {
for (int i = 0; i < line.size(); i++) {
textArea.appendText(line.get(i) + createSpace(numberOfSpacesNeeded(longestDataLengths.get(i), line.get(i))));
}
textArea.appendText("\n");
}
StackPane root = new StackPane(textArea);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
launch(args);
}
List<List<String>> getFakeDBData()
{
List<List<String>> fakeData = new ArrayList();
String data = "deptName chairID collegeID deptID\n"
+ "Biology 111221118 SC BIOL\n"
+ "Chemistry 111221119 SC CHEM\n"
+ "Computer_Science 111221115 SC CS\n"
+ "Mathematics 111221116 SC MATH";
for (String line : Arrays.asList(data.split("\n"))) {
fakeData.add(Arrays.asList(line.split(" ")));
}
return fakeData;
}
//
void findLongestDataLengthsForColumns(List<List<String>> fakeData)
{
for (int i = 0; i < fakeData.size(); i++) {
for (int ii = 0; ii < fakeData.get(i).size(); ii++) {
if (i == 0) {
longestDataLengths.add(fakeData.get(i).get(ii).length());
//System.out.println("added: " + fakeData.get(i).get(ii));
}
else {
//System.out.println("adding: " + i);;//+ fakeData.get(i).get(ii));
if (fakeData.get(i).get(ii).length() > longestDataLengths.get(ii)) {
longestDataLengths.set(ii, fakeData.get(i).get(ii).length());
}
}
}
}
}
String createSpace(int numberOfSpaces)
{
StringBuilder spaces = new StringBuilder();
for (int i = 0; i < numberOfSpaces; i++) {
spaces.append(" ");
}
return spaces.toString();
}
int numberOfSpacesNeeded(int longestLength, String entry)
{
int numberOfSpaceAfterLongestLength = 4;
System.out.println("space needed: " + (longestLength - entry.length() + numberOfSpaceAfterLongestLength));
return longestLength - entry.length() + numberOfSpaceAfterLongestLength;
}
}
Результаты