H
H4CK3R-01
Gast
Hallo,
ich habe ein Problem mit einer Methode in meinem Programmcode. Ich habe ein Programm geschrieben, dass einen Text anzeigen soll. Der Text soll mithilfe von JLabel angezeigt werden, und zwar so, dass am Ende des Strings keine Punkte angezeigt werden, wenn der String zu lange ist. Ich hatte jetzt die Idee mithilfe von preferredSize zu schauen, ob der String passen würde. Dazu habe ich den Satz der angezeigt werden soll an den Leerzeichen getrennt und in ein Array geschrieben. Dann fange ich vorne im Array an und hänge immer ein Wort dran , um zu überprüfen, ob es dann immer noch passen würde. Die Wörter werden dabei immer an die 0. Stelle im Array geschrieben. Sobald es dann nicht mehr passt, mache ich an der 1. Stelle dasselbe. Leider funktioniert mein Programmcode nicht richtig.
Die Methode testlength() gibt einfach die bevorzugte Breite zurück:
Ich bekomme keine Fehlermeldungen, Es wird aber auch nichts angezeigt. Wenn ich manuell das Array erstelle, dass diese Methode zurückgeben soll, funktioniert das restliche Programm. Die Variable, die die Methode zurückgibt enthält aber komischerweise genau dass, was sie zurückgeben soll.
Beispiel:
Ursprungstext:
Ergebnis der Methode (genau dass, was ich wollte):
Ich nutze IntelliJ unter Ubuntu 18.04.3 falls das wichtig ist. Meine JAVA Version ist "openjdk 11.0.4 2019-07-16"
Ich würde mich über Antworten und möglicherweise auch andere Lösungswege freuen.
ich habe ein Problem mit einer Methode in meinem Programmcode. Ich habe ein Programm geschrieben, dass einen Text anzeigen soll. Der Text soll mithilfe von JLabel angezeigt werden, und zwar so, dass am Ende des Strings keine Punkte angezeigt werden, wenn der String zu lange ist. Ich hatte jetzt die Idee mithilfe von preferredSize zu schauen, ob der String passen würde. Dazu habe ich den Satz der angezeigt werden soll an den Leerzeichen getrennt und in ein Array geschrieben. Dann fange ich vorne im Array an und hänge immer ein Wort dran , um zu überprüfen, ob es dann immer noch passen würde. Die Wörter werden dabei immer an die 0. Stelle im Array geschrieben. Sobald es dann nicht mehr passt, mache ich an der 1. Stelle dasselbe. Leider funktioniert mein Programmcode nicht richtig.
Java:
private String[] splitString(String text) {
String[] ergebnis = text.split("\\s+");
int zaehlerZeile = 0;
while (ergebnis[zaehlerZeile] != null) {
while (ergebnis[zaehlerZeile + 1] != null && testLength(ergebnis[zaehlerZeile] + " " + ergebnis[zaehlerZeile + 1]) < 300) {
ergebnis[zaehlerZeile] = ergebnis[zaehlerZeile] + " " + ergebnis[zaehlerZeile + 1];
for (int i = zaehlerZeile + 1; i < ergebnis.length - 1; i++) {
ergebnis[i] = ergebnis[i + 1];
}
ergebnis[ergebnis.length - zaehlerZeile - 1] = null;
}
zaehlerZeile = zaehlerZeile + 1;
}
System.out.println(Arrays.toString(ergebnis));
return ergebnis;
}
Die Methode testlength() gibt einfach die bevorzugte Breite zurück:
Java:
private double testLength(String text) {
JLabel test = new JLabel(text);
test.setFont(new Font("Ubuntu", Font.ITALIC, 25));
return test.getPreferredSize().getWidth();
}
Beispiel:
Ursprungstext:
Dies ist ein Beispiel für meine Frage!
Ergebnis der Methode (genau dass, was ich wollte):
[Dies ist ein Beispiel für, meine Frage!, null, null, null, null, null]
Ich nutze IntelliJ unter Ubuntu 18.04.3 falls das wichtig ist. Meine JAVA Version ist "openjdk 11.0.4 2019-07-16"
Ich würde mich über Antworten und möglicherweise auch andere Lösungswege freuen.