我在Windows 8.1上使用Netbeans(JDK 1.7)来运行以下应用程序:
Graphics
的{{1}}中使用paintComponent()
对象draw a frog; JPanel
以进行显示; 当然,这应该是一项非常简单的任务,但我无法理解此应用程序中的特定行为。
以下是问题:第一次显示窗口时,面板显示偏移(下图),不应该显示。我试图理解为什么会这样,以及如何解决它:
在键盘上按下其中一个箭头键后,图形向左/右/向上/向下移动5个像素。但是,当发生这种情况时,整个JFrame
似乎被移动到窗口的(0,0)坐标(这是我从一开始就预期的那样),因此移动绘图比它应该的要多得多:
我在面板的边缘画了一个黑色边框,使问题更加明显。
以下是Short, Self Contained, Correct (Compilable), Example:
KAfrog.java :
JPanel
Window.java :
import javax.swing.SwingUtilities;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class KAfrog
{
public static void main( String args[] )
{
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
} // end of anonymous innerclass
); // end of invokeLater
}
private static void createAndShowGUI()
{
System.out.println("Created GUI on EDT? " + SwingUtilities.isEventDispatchThread());
Window janela = new Window("Khan Academy Frog");
janela.addWindowListener( new WindowAdapter() {
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
} // end of anonymous innerclass
); // end of addWindowListener
}
}
有谁知道为什么会发生这种情况以及如何解决这个问题?
答案 0 :(得分:3)
你从javax.wall.JComponent。
覆盖public int getX()
它返回组件原点的当前x坐标。此方法比编写component.getBounds()。x或component.getLocation()。x更可取,因为它不会导致任何堆分配。
重命名您的方法 public int getX()
和 public int getY()
。
这应解决问题。