在 Jbutton 中自动换行动态文本
Wrap dynamic text automatically in Jbutton
我的 Jbutton 有问题。
在我的应用程序中,您可以轻松更改 ui 语言,并且可以轻松覆盖我的按钮的默认翻译。
在这种情况下,非常不清楚按钮中的文本可以有多长,但我的按钮具有固定大小(因为图形和谐等等)。
现在我的问题是,我还没有找到用内部按钮边距包装文本的解决方案。
示例:
按钮 1:
"Hello"
-> Hello 足够短,无需换行即可打印。
按钮 2:
"Hello guys"
-> 由于 html 标签,Hello guys 将自动换行。
按钮 3:
"Hello g."
-> 你好克。正好填满按钮的宽度。 HTML!.
没有自动换行
现在,按钮 3 本身看起来很糟糕而且过载。
因此我需要一个解决方案来自动换行比按钮宽或等于 -4px 的文本。
此外,不包含空格的文本如果太长也应换行。
这个问题的一个非常简单的解决方案是实用方法,我写道。
只需在您的 *ButtonUI #paint 方法中调用它,然后再调用 super.paint(c,g);
例如:
if (c instanceof AbstractButton) {
String txt = button.getText();
button.setText(getWrappedText(g, button, txt));
}
这是我的格式化程序,可以免费使用(也可以进行优化;))
private static final String STR_NEWLINE = "<br />";
private FontRenderContext fontRenderContext = new FontRenderContext(new AffineTransform(), true, true);
private String getWrappedText(Graphics graphics, AbstractButton button, String str) {
if( str != null ) {
String text = str.replaceAll("<html><center>", "").replaceAll("</center></html>", "");
int width = button.getWidth();
Rectangle2D stringBounds = button.getFont().getStringBounds(text, fontRenderContext);
if ( !str.contains(STR_NEWLINE) && (width-5) < ((Double)stringBounds.getWidth()).intValue()) {
String newStr;
if( str.contains(" ") ) {
int lastIndex = str.lastIndexOf(" ");
newStr = str.substring(0, lastIndex)+STR_NEWLINE+str.substring(lastIndex);
} else {
int strLength = ((str.length()/3)*2);
newStr = str.substring(0, strLength)+STR_NEWLINE+str.substring(strLength);
}
return newStr;
}
}
return str;
}
我的 Jbutton 有问题。
在我的应用程序中,您可以轻松更改 ui 语言,并且可以轻松覆盖我的按钮的默认翻译。
在这种情况下,非常不清楚按钮中的文本可以有多长,但我的按钮具有固定大小(因为图形和谐等等)。
现在我的问题是,我还没有找到用内部按钮边距包装文本的解决方案。
示例:
按钮 1: "Hello" -> Hello 足够短,无需换行即可打印。
按钮 2: "Hello guys" -> 由于 html 标签,Hello guys 将自动换行。
按钮 3: "Hello g." -> 你好克。正好填满按钮的宽度。 HTML!.
没有自动换行现在,按钮 3 本身看起来很糟糕而且过载。
因此我需要一个解决方案来自动换行比按钮宽或等于 -4px 的文本。
此外,不包含空格的文本如果太长也应换行。
这个问题的一个非常简单的解决方案是实用方法,我写道。
只需在您的 *ButtonUI #paint 方法中调用它,然后再调用 super.paint(c,g);
例如:
if (c instanceof AbstractButton) {
String txt = button.getText();
button.setText(getWrappedText(g, button, txt));
}
这是我的格式化程序,可以免费使用(也可以进行优化;))
private static final String STR_NEWLINE = "<br />";
private FontRenderContext fontRenderContext = new FontRenderContext(new AffineTransform(), true, true);
private String getWrappedText(Graphics graphics, AbstractButton button, String str) {
if( str != null ) {
String text = str.replaceAll("<html><center>", "").replaceAll("</center></html>", "");
int width = button.getWidth();
Rectangle2D stringBounds = button.getFont().getStringBounds(text, fontRenderContext);
if ( !str.contains(STR_NEWLINE) && (width-5) < ((Double)stringBounds.getWidth()).intValue()) {
String newStr;
if( str.contains(" ") ) {
int lastIndex = str.lastIndexOf(" ");
newStr = str.substring(0, lastIndex)+STR_NEWLINE+str.substring(lastIndex);
} else {
int strLength = ((str.length()/3)*2);
newStr = str.substring(0, strLength)+STR_NEWLINE+str.substring(strLength);
}
return newStr;
}
}
return str;
}