У меня проблемы с реализацией переноса слов в java в среде свинга. У меня жесткий предел в пикселях, который я не могу преодолеть. Я чувствую, что я близок, поскольку нашел решение, которое оборачивается, но оно позволяет последнему слову превышать предел перед переходом к следующей строке.
'ni' - это буферизованное изображение, к которому все это рисуется.
Пользовательский класс 'theSettings', содержащий переменные для текста.
'theText' - строка, которую нужно обернуть.
Вот что передается методу:
FontMetrics fm = ni.createGraphics().getFontMetrics(theSettings.getFont());
//Get pixel width of string and divide by # of characters in string to get estimated width of 1 character
int charPixelWidth = fm.stringWidth(theText) / theText.length();
int charWrap = theSettings.getPixelsTillWrap() / charPixelWidth;
List<String> textList = testWordWrap(theText, charWrap);
Я использую этот метод для проверки:
//Custom String Wrapper as StringUtils.wrap keeps cutting words in half
public static List<String> testWordWrap(String wrapMe, int wrapInChar) {
StringBuilder sb = new StringBuilder(wrapMe);
int count = 0;
while((count = sb.indexOf(" ", count + wrapInChar)) != -1) {
sb.replace(count, count + 1, "\n");
}
String toArray = sb.toString();
String[] returnArray = toArray.split("\\n");
ArrayList<String> returnList = new ArrayList<String>();
for(String s : returnArray) {
returnList.add(s);
}
return returnList;
}
Пример использования:
Я также заменяю изображения в середине текста, но размер изображения точно соответствует размеру текста, который он заменяет; так что это не должно быть проблемой. Синие линии - это ограничивающие рамки, которые показывают, где должна заканчиваться упаковка. Это показывает, что текст продолжает рисовать. Мне нужна функция для переноса «успешно» на следующую строку; поскольку упаковка не может перебежать в любой ситуации.
РЕДАКТИРОВАТЬ: массивы изображения запускаются как .toString();
[Разрешение: + | FT | если вам это удалось, и соответствует | EA |]
[Любой: + | MT | когда вы получаете любое число, из | QT |]