gpt4 book ai didi

java - 在 Java swing window 中控制形状移动的问题

转载 作者:行者123 更新时间:2023-11-29 05:35:09 28 4
gpt4 key购买 nike

我正在尝试制作一个程序,您可以在其中使用箭头键在 java swing 窗口中移动一个圆圈。键绑定(bind)工作正常,但显示圆圈总是有问题。这是代码:

public class ShapesMove extends JFrame{

public static int x = 40;
public static int y = 40;

public static void main(String[] args){

final JFrame frame = new JFrame("Movement of 2d Shapes");
frame.setSize(400,400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel content = (JPanel) frame.getContentPane();
frame.setLocationRelativeTo(null);
frame.setVisible(true);

Action actionRight = new AbstractAction(){
public void actionPerformed(ActionEvent actionRightEvent){
x++;
}
};

Action actionLeft = new AbstractAction(){
public void actionPerformed(ActionEvent actionLeftEvent){
x--;
}
};

Action actionUp = new AbstractAction(){
public void actionPerformed(ActionEvent actionUpEvent){
y++;
}
};

Action actionDown = new AbstractAction(){
public void actionPerformed(ActionEvent actionDownEvent){
y--;
}
};

KeyStroke right = KeyStroke.getKeyStroke("RIGHT");
KeyStroke left = KeyStroke.getKeyStroke("LEFT");
KeyStroke up = KeyStroke.getKeyStroke("UP");
KeyStroke down = KeyStroke.getKeyStroke("DOWN");

InputMap inputMap = content.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(right, "RIGHT");
inputMap.put(left, "LEFT");
inputMap.put(up, "UP");
inputMap.put(down, "DOWN");
content.getActionMap().put("RIGHT", actionRight);
content.getActionMap().put("LEFT", actionLeft);
content.getActionMap().put("UP", actionUp);
content.getActionMap().put("DOWN", actionDown);

}
public void draw(Graphics g){
g.drawOval(x, y, 60, 60);
}
}

我没有包含导入行,因为我知道我拥有所有正确的模块。编译总是很顺利,但是当我运行它时圆圈不显示。我在它自己的独立文件中尝试了相同的显示代码,当我运行它时出现了圆圈,那么我在这里做错了什么?

最佳答案

您需要重写 paintComponent 来绘制。在添加到 JFrame 的组件上执行此操作,而不是在框架本身上执行此操作,因为 JFrame 是一个具有 contentPane 的容器,这会使事情变得更复杂且更不灵活进一步修改。

关于java - 在 Java swing window 中控制形状移动的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19774343/

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