有谁知道近似的文本像素比? (Java字符串定位)
Does anyone know an approximate text to pixel ratio? (Java String positioning)
就像您在几乎所有文本编辑软件中看到的那样,css 等等,我想用 java.awt
定位我的文本。我对此的测试代码是:
public class Test {
public static void main(String[] args) {
// creating the frame
JFrame frame = new JFrame("Test");
frame.setSize(1000, 800);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
// variables
int x1 = 50;
int x2 = 500;
int y1 = 70;
int y2 = 150;
int y3 = 230;
int width = 400;
int height = 60;
int fontsize = 40;
String text = "This is a test";
frame.add(new JPanel() {
public void paint(Graphics g) {
g.setColor(Color.BLACK);
// borders
g.drawRect(x1, y1, width, height); // top
g.drawRect(x1, y2, width, height); // middle
g.drawRect(x1, y3, width, height); // bottom
g.drawRect(x2, y1, width, height); // left
g.drawRect(x2, y2, width, height); // center
g.drawRect(x2, y3, width, height); // right
g.setFont(new Font("arial", Font.PLAIN, fontsize));
// top
g.drawString(text, x1 + 10, y1 + fontsize); // x1 + 10 (10 is a buffer)
// center
g.drawString(text, x1 + 10, y2 + fontsize + (height - fontsize) / 2);
// bottom
g.drawString(text, x1 + 10, y3 + height);
// left
g.drawString(text, x2, y1 + fontsize);
// middle
g.drawString(text, x2 + width / 2 - text.length() * (fontsize/5), y2 + fontsize + (height - fontsize) / 2);
// right
g.drawString(text, x2 + (width - text.length() * (fontsize/5)), y3 + height);
}
});
frame.setVisible(true);
}
}
当然它看起来有点乱,但我正在一个 API 项目中处理它,我正在实现 ux 功能 atm。
您可以使用 Graphics 对象的 FontMetrics
对象获取有关字体规格的信息,以帮助确定文本的大小:
FontMetrics fm = g.getFontMetrics();
请参阅:Measuring Text 教程。
你为什么要做定制绘画?为什么不使用带布局管理器的 Swing 组件来管理 UI?我们无法提供具体建议,因为我们不知道您发布的代码的目标是什么。
就像您在几乎所有文本编辑软件中看到的那样,css 等等,我想用 java.awt
定位我的文本。我对此的测试代码是:
public class Test {
public static void main(String[] args) {
// creating the frame
JFrame frame = new JFrame("Test");
frame.setSize(1000, 800);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
// variables
int x1 = 50;
int x2 = 500;
int y1 = 70;
int y2 = 150;
int y3 = 230;
int width = 400;
int height = 60;
int fontsize = 40;
String text = "This is a test";
frame.add(new JPanel() {
public void paint(Graphics g) {
g.setColor(Color.BLACK);
// borders
g.drawRect(x1, y1, width, height); // top
g.drawRect(x1, y2, width, height); // middle
g.drawRect(x1, y3, width, height); // bottom
g.drawRect(x2, y1, width, height); // left
g.drawRect(x2, y2, width, height); // center
g.drawRect(x2, y3, width, height); // right
g.setFont(new Font("arial", Font.PLAIN, fontsize));
// top
g.drawString(text, x1 + 10, y1 + fontsize); // x1 + 10 (10 is a buffer)
// center
g.drawString(text, x1 + 10, y2 + fontsize + (height - fontsize) / 2);
// bottom
g.drawString(text, x1 + 10, y3 + height);
// left
g.drawString(text, x2, y1 + fontsize);
// middle
g.drawString(text, x2 + width / 2 - text.length() * (fontsize/5), y2 + fontsize + (height - fontsize) / 2);
// right
g.drawString(text, x2 + (width - text.length() * (fontsize/5)), y3 + height);
}
});
frame.setVisible(true);
}
}
当然它看起来有点乱,但我正在一个 API 项目中处理它,我正在实现 ux 功能 atm。
您可以使用 Graphics 对象的 FontMetrics
对象获取有关字体规格的信息,以帮助确定文本的大小:
FontMetrics fm = g.getFontMetrics();
请参阅:Measuring Text 教程。
你为什么要做定制绘画?为什么不使用带布局管理器的 Swing 组件来管理 UI?我们无法提供具体建议,因为我们不知道您发布的代码的目标是什么。