Java 信封上的绘图文本
嗨,伙计们 我需要一点帮助,因为我真的不知道我做错了什么。我在写一个信封的程序。该程序有4个JTextField。 姓名、城市、地址、邮政编码。我在名称JTextField上使用keylistener来识别Enter按钮,并添加一个新名称JTextField。(基本上,它将第二个名称JTextField设置为可见)。所以总共可以有4个名字JTextField,其他(城市、地址、邮政编码)总共7个。还有打印按钮,用于查看等待打印的已写信封等。当我使用g.drawString()时,我使用一个预定义的x,y值,该值根据Font Metrics的StringWidth()方法测量的“名称”字段的文本长度进行动态更改,并使用右侧边距值进行计算。。无论什么我的主要问题是:Java 信封上的绘图文本,java,swing,drawstring,Java,Swing,Drawstring,嗨,伙计们 我需要一点帮助,因为我真的不知道我做错了什么。我在写一个信封的程序。该程序有4个JTextField。 姓名、城市、地址、邮政编码。我在名称JTextField上使用keylistener来识别Enter按钮,并添加一个新名称JTextField。(基本上,它将第二个名称JTextField设置为可见)。所以总共可以有4个名字JTextField,其他(城市、地址、邮政编码)总共7个。还有打印按钮,用于查看等待打印的已写信封等。当我使用g.drawString()时,我使用一个预定义
if (name.length() > address.length()) {
g.drawString(name,
(250 - nameCord_X) + 46, 214); //this is working
g.drawString(city, (250 - nameCord_X) + 46, 226);
g.drawString(address, (250 - nameCord_X) + 46, 238);
g.drawString(postal, (250 - nameCord_X + 46, 250);
} else {
if (address.length() > name.length()
&& name2.isEmpty())
{ // this is working
g.drawString(name, (250 - addressCord_X) + 46, 214);
g.drawString(city, (250 - addressCord_X) + 46, 226);
g.drawString(address, (250 - addressCord_X) + 46, 238);
g.drawString(postal, (250 - addressCord_X + 46, 250);
}
}
if (name2.length() > name.length()
&& name2.length() > address.length()
&& name2.isVisible())
{// this is working
g.drawString(name, (250 - name2Cord_X) + 46, 202);
g.drawString(name2, (250 - name2Cord_X) + 46, 214);
g.drawString(city, (250 - name2Cord_X) + 46, 226);
g.drawString(address, (250 - name2Cord_X) + 46, 238);
g.drawString(postal, (250 - name2Cord_X) + 46, 250);
}
//This is the part that doesnt working. it prints out 5 lines
// but the 2nd line is the same as first line,
// and the real 2nd line value is printed over.
// For example Name: Lion Name2:Lion (altough I typed for
// example horse into name2 field, and the program draw
// the horse string over the 2nd line which contains Lion.)
//Altough it prints out the all 5 row, it messing only with
//the second row :-/
if( (name.length() > name2.length()
&& name.length() > address.length()
&& name2.isVisible()))
{
g.drawString(name, (250 - nameCord_X) + 46, 202);
g.drawString(name2, (250 - nameCord_X) + 46, 214);
g.drawString(city, (250 - nameCord_X) + 46, 226);
g.drawString(address, (250 - nameCord_X) + 46, 238);
g.drawString(postal, (250 - nameCord_X) + 46, 250);
}
这里有一些复杂的
if
块。此外,不清楚变量的类型。它们似乎是String
,但例如,您在name2
上调用isVisible()
我知道您正在使用nameCord\u X
,addressCord\u X
,name2Cord\u X
进行校准。您希望所有字符串左对齐,并在该点开始绘图,以允许最大的字符串正确匹配,使其不超过信封的右侧。对吗
如果是,那么我建议您首先找到上述长度的最大值。只有当每一个都有一个有意义的值时,才应该考虑到它。然后您可以执行以下操作:
int max = ... // maximum of the above values - only not empty values should be taken into account
int dy = 12; // it seems you always leave 12 pixels between the lines
int y = ...; // the value with the topmost y. It seems you use 202 when both names are present 214 when name2 is not given
int x = 250 - max + 46;
String[] labels = new String[] {name, name2, city, address, postal};
for (String label : labels) {
if (label == null || label.length() == 0) {
continue; // ignore null or empty values
}
g.drawString(name, x, y);
y += dy;
}
希望能有所帮助谢谢你的回答。我现在就试试看。是的,你对每件事都看得很对,很抱歉缺少信息。在我尝试了你的想法后,我会在这里发帖:)