如何解决如何将文本放置在Java applet的圆圈内,以使文本中间居中
我正在尝试编写代码以将文本放置在圆的中间,以使字符串的中心在圆的中心。但是,如果字符串的字体大小和圆的直径较大,则文本似乎从中心开始。 这是我的代码,
let queue = [];
function updateStorage() {
if (!queue.length || updateStorage.running) {
return;
}
updateStorage.running = true;
chrome.storage.local.get('impresses',data => {
data.impresses = [].concat(data.impresses || [],queue);
queue = [];
chrome.storage.local.set(data,() => {
updateStorage.running = false;
if (queue.length) updateStorage();
});
});
}
chrome.webRequest.onCompleted.addListener((wr) => {
let wurl = wr.url;
if (wurl.includes('impress')) {
console.log(wr.url);
queue.push(wr.url);
updateStorage();
}
},{
urls: ["<all_urls>"] },[]);
这是我得到的输出:
但是我希望文本位于中间。
解决方法
但是文字似乎从中心开始
String变量的长度仅返回String中的字符数,而不返回String的宽度(以像素为单位)。
您需要知道文本的宽度(以像素为单位),以便使其可以在圆中居中。为此,您可以使用FontMetrics
类。
FontMetrics fm = g.getFontMetrics();
int width = fm.stringWidth(s);
int offset = (diameter - width ) / 2;
g.drawString(s,xpos + offset,ypos + (diameter / 2));
//g.drawString(s,xpos+(diameter/2)-(s.length()/2),ypos+(diameter/2));
请注意,以上内容将仅基于宽度居中。您还应该基于高度居中。为此,您可以使用getStringBounds(...)
方法。这也将使您更好地近似垂直居中。这将返回一个Rectangle,因此您可以将Rectangle的宽度和高度用于水平和垂直居中。
您将字符串输出从圆心向左移动,但移动值太小
-(s.length()/2
使用字符长度的字符串。您可以根据字体大小将这个值乘以系数(在您的情况下为24),但是不同的字符具有不同的宽度(“ Arial”不是固定宽度的字体)。
如果需要更精确的定位,请考虑以像素为单位计算字符串宽度。也许getFontMetrics + stringWidth
。 Arbitrary found example
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。