我正在处理的项目需要一个文本字段供用户输入椭圆的宽度。当用户单击面板上的某个位置时,它将绘制具有指定宽度的椭圆。当我运行它时,宽度从未改变。
这是在initialize()中:
tTextWidth = new JTextField();
tTextWidth.setBounds(42, 457, 86, 20);
frame.getContentPane().add(tTextWidth);
tTextWidth.setColumns(10);JButton tSetWidth = new JButton("Set Width");
tSetWidth.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
SetTextToWidth(tTextWidth.getText());
}
});
这是在initialize()之后:
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);
}
这在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;
}
最佳答案
所以两件事
一...
只有在用户按下平台的操作键(大多数情况下是Enter键)时,才会触发ActionListener
;)
二...
在您的SetTextToWidth
中创建一个RoundSprite
的新实例,该实例与屏幕上显示的内容没有上下文...
我想,这意味着应该更改所有实例RoundSprite
,这不是您想要的。
作为discussed in this simular question,您首先需要定义实际上要更改的Sprite,然后将所需的更改应用于该特定实例(并重新绘制输出)...
旁注
您可能希望通读Code Conventions for the Java TM Programming Language,这将使人们更容易阅读您的代码,而您也更容易阅读其他人