我的Jbuttons有问题。
在我的应用程序中,您可以轻松更改ui语言,并可以轻松覆盖我的按钮的默认翻译。
在这种情况下,很难不清楚文本在按钮中的长度,但我的按钮有一个固定的大小(因为图形和谐等等)。
现在我的问题是,我还没有找到一个解决方案来包装带有内部按钮边距的文本。
示例:
BUTTON 1: "你好" - >您好短,无需换行即可打印。
BUTTON 2: "大家好" - >由于html标签,Hello Hello将自动包装成两行。
BUTTON 3: "你好g。" - >你好克。完全填充按钮的宽度。 HTML没有自动换行!。
现在,按钮3本身看起来非常蹩脚和过载。
因此,我需要一个解决方案来自动换行比按钮宽大或等于-4px的文本。
此外,如果文本不包含空格,则应该包含空格。
答案 0 :(得分:0)
这个问题的一个非常简单的解决方案是实用方法,我写道。
在调用super.paint(c,g)之前,只需在* ButtonUI #paint方法中调用它;
e.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;
}