Java 如何使用文本字段设置椭圆';s维度?

Java 如何使用文本字段设置椭圆';s维度?,java,swing,user-interface,sprite,ellipse,Java,Swing,User Interface,Sprite,Ellipse,我正在处理的项目需要一个文本字段,以便用户输入椭圆的宽度。当用户单击面板上的某个位置时,它会绘制一个具有指定宽度的椭圆。当我运行它时,宽度从未改变 这在initialize()中: 这就在initialize()之后: 这是在类RoundSprite中: private float mX; private float mY; int mWidth; int mHeight; Color mColor; void DrawSprite(Graphics2D g2) { AffineTran

我正在处理的项目需要一个文本字段,以便用户输入椭圆的宽度。当用户单击面板上的某个位置时,它会绘制一个具有指定宽度的椭圆。当我运行它时,宽度从未改变

这在initialize()中:

这就在initialize()之后:

这是在类RoundSprite中:

private float mX;
private float mY;
int mWidth;
int mHeight;
Color mColor;
void DrawSprite(Graphics2D g2)
{
    AffineTransform tOldTransform = g2.getTransform();

    g2.setColor(mColor);

    g2.translate(mX, mY);

    g2.draw(new Ellipse2D.Double(0, 0, mWidth, mHeight));

    g2.setTransform(tOldTransform);

    g2.translate(mX - (mWidth / 2), mY - (mHeight / 2));
}
public void SetSpriteWidth(int tWidth)
{
    mWidth = tWidth;
}
所以主要有两件事

一。。。
ActionListener
仅当用户按下平台的操作键时才会触发,大多数情况下是Enter键,正如您所知;)

两个。。。 在您的
SetTextToWidth
中,正在创建
RoundSprite
的新实例,该实例与屏幕上显示的内容无关

我想,这意味着所有实例
RoundSprite
都应该更改,这不是您想要的

例如,您首先需要定义您实际尝试更改的精灵,然后将您想要的更改应用到该特定实例(并重新绘制输出)

旁注 您可能希望进行通读,这将使人们更容易阅读您的代码,您也更容易阅读其他人的代码。

1)“需要一个文本字段供用户输入椭圆的宽度…”提供一个带有
SpinnerNumberModel
JSpinner
。2) 为了更快地获得更好的帮助,发布一个(最小、完整、可验证的示例)。
tTextWidth.setBounds(42457、86、20)Swing GUI可能必须在不同的平台上工作,使用不同的PLAF,在不同的屏幕大小和分辨率上使用不同的字体大小默认设置。因此,它们不利于组件的精确放置。相反,使用布局管理器或以及空白。
public void SetTextToWidth(String tWidth)
{
    if(tWidth == null)
    {
        tWidth = "50";
    }
    int tIntWidth = Integer.parseInt(tWidth);
    if(tIntWidth == 0)
    {
        tIntWidth = 50;
    }
    RoundSprite tSpriteWidth = new RoundSprite();
    tSpriteWidth.SetSpriteWidth(tIntWidth);
}
private float mX;
private float mY;
int mWidth;
int mHeight;
Color mColor;
void DrawSprite(Graphics2D g2)
{
    AffineTransform tOldTransform = g2.getTransform();

    g2.setColor(mColor);

    g2.translate(mX, mY);

    g2.draw(new Ellipse2D.Double(0, 0, mWidth, mHeight));

    g2.setTransform(tOldTransform);

    g2.translate(mX - (mWidth / 2), mY - (mHeight / 2));
}
public void SetSpriteWidth(int tWidth)
{
    mWidth = tWidth;
}