gpt4 book ai didi

java - draw.String() 和 fillRect() 使用相同的传递坐标写入 JFrame 上的不同位置

转载 作者:太空宇宙 更新时间:2023-11-04 11:06:35 24 4
gpt4 key购买 nike

我对 Java 还很陌生,我正在尝试创建一个条形图,它从文本字段中获取 5 个值,并使用这 5 个值创建一个条形图。我的大部分工作正常,也许不是以最有效的方式,但我在使用drawString()时遇到了麻烦。我试图在每个条形的顶部输出每个条形的高度以进行调试,因为最终我需要以 10 为步长来标记整个 y 轴。但是,每次我将相同的精确 y 值“高度”传递给 draw.String() 时,它都会输出到与矩形左上角部分不同的位置。我不知道为什么会发生这种情况。传递相同的 y 值难道不应该意味着输出将处于相同的高度吗?任何帮助,将不胜感激。我附上了我得到的输出的图片。虽然我没有将其包含在此处,但我确实有两行代码来绘制 x 轴和 y 轴。

 public void paint(Graphics g)
{
super.paint(g);


double v1 = Double.parseDouble(jTextField1.getText());
double v2 = Double.parseDouble(jTextField2.getText());
double v3 = Double.parseDouble(jTextField3.getText());
double v4 = Double.parseDouble(jTextField4.getText());
double v5 = Double.parseDouble(jTextField5.getText());

Graphics pg = jPanel2.getGraphics();

int[] values = {(int)v1,(int)v2,(int)v3,(int)v4,(int)v5};
double space = (jPanel2.getHeight()*.09);
//Space for the bottom
int spaceY = (int)space;
int bar;
double heightPortion;
int height;
double heightCalc;
double numHeight;
int numHeight2;

//5% of the top of the frame is open
double gap = getHeight()*.05;
int gapTrunc = (int)gap;

//Display each value
for (int i= 0; i < 5; i++){


bar = values[i];

//Calculate what portion of the max height of a bar each value is
heightPortion = 100-bar;
heightPortion = heightPortion/100;

//Use 86% of the graph for the bars
heightCalc = heightPortion *(.86)*jPanel2.getHeight() + gapTrunc;



height = (int)heightCalc;



//Debugging
System.out.println(height);

//Use different colors for different letters
if(0<= bar && bar < 20)
pg.setColor(Color.orange);
if(20 <= bar && bar < 40)
pg.setColor(Color.gray);
if(40 <= bar && bar < 60)
pg.setColor(Color.yellow);
if(60 <= bar && bar < 80)
pg.setColor(Color.blue);
if(80 <= bar && bar <= 100)
pg.setColor(Color.red);


String s = Integer.toString(bar);

//Draw bar
pg.fillRect(jPanel2.getWidth()-(jPanel2.getWidth()*(16-
3*i)/20),height,20,jPanel2.getHeight()-height-spaceY);
//Label bar with value, passing it the same height
g.drawString(s,jPanel2.getWidth()-(jPanel2.getWidth()*(16-
3*i)/20),height);


}


}

enter image description here

最佳答案

documentation for drawString内容如下(强调我的):

Draws the text given by the specified string, using this graphics context's current font and color. The baseline of the leftmost character is at position (x, y) in this graphics context's coordinate system.

documentation for fillRect内容如下(强调我的):

Fills the specified rectangle. The left and right edges of the rectangle are at x and x + width - 1. The top and bottom edges are at y and y + height - 1. The resulting rectangle covers an area width pixels wide by height pixels tall. The rectangle is filled using the graphics context's current color.

关于java - draw.String() 和 fillRect() 使用相同的传递坐标写入 JFrame 上的不同位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46418280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com