gpt4 book ai didi

java - 如何使用 JTextField 值控制计时器动画?

转载 作者:行者123 更新时间:2023-12-02 00:22:04 25 4
gpt4 key购买 nike

我希望能够控制使用 JTextField 在屏幕上移动图像的计时器的速度或延迟。我在 CarAnimationPanel 第 61 行(即 timer.start() 行)处收到 NullPointerException

这是我的代码...

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.net.*;

public class Exercise18_17 extends JApplet {
private static JTextField jtfCar1;
private int num1;

public Exercise18_17(){

URL imageURL = this.getClass().getResource("images/TN_buick 1912small.GIF");
Image image = new ImageIcon(imageURL).getImage();

setLayout(new GridLayout(5,4,2,2));
add(new CarAnimationPanel(image));

}//endo of 15_15 constructor

public static class CarAnimationPanel extends JPanel implements ActionListener {
private Image image;
private int delay ;
private int num1 = 0;
private Timer timer;

int x = 0;
int y = 20;

public CarAnimationPanel(Image image) {
add(jtfCar1 = new JTextField(5));

jtfCar1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
num1 = Integer.parseInt(jtfCar1.getText().trim());
if (e.getSource() == jtfCar1){
delay = num1;
timer = new Timer(delay, this);
}
}
});
timer.start();
this.image = image;
}

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

if (x > getWidth()) {
x -= 20;
}
x += 5;
g.drawImage(image, x, y, this);
}

public void actionPerformed(ActionEvent e) {
repaint();
}
}

public static void main(String[] args) {
// Create a frame
JFrame frame = new JFrame("Exercise18_17");

// Create an instance of the applet
JApplet applet = new Exercise18_17();

// Add the applet to the frame
frame.add(applet, BorderLayout.CENTER);

// Invoke applet's init method
applet.init();

// Display the frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
frame.setLocationRelativeTo(null); // Center the frame
frame.setVisible(true);
}
}

最佳答案

各种修复,请参阅代码了解详细信息。我还将 JTextField 替换为 JSpinner

Exercise18_17

package test.t100.t003;

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import java.awt.*;
import java.awt.event.*;
import java.net.*;

public class Exercise18_17 extends JApplet {
private static final long serialVersionUID = 1L;
private static JSpinner jtfCar1;

public Exercise18_17() throws MalformedURLException {

URL imageURL = new URL(
"http://pscode.org/media/starzoom-thumb.gif");
Image image = new ImageIcon(imageURL).getImage();

setLayout(new GridLayout(1, 0, 2, 2));
add(new CarAnimationPanel(image));
}// endo of 15_15 constructor

public static class CarAnimationPanel extends JPanel implements
ActionListener {
private static final long serialVersionUID = 1L;
private Image image;
private int delay;
private int num1 = 0;
private Timer timer;

int x = 0;
int y = 20;

public CarAnimationPanel(Image image) {

add(jtfCar1 = new JSpinner(new SpinnerNumberModel(
150, 40, 200, 1)));

jtfCar1.addChangeListener(new ChangeListener() {

@Override
public void stateChanged(ChangeEvent arg0) {
num1 = ((Integer)jtfCar1.getValue()).intValue();
delay = num1;
timer = new Timer(delay, CarAnimationPanel.this);
timer.start();
}
});
this.image = image;
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
if (x > getWidth()) {
x -= getWidth();
}
x += 5;
g.drawImage(image, x, y, this);
}

public void actionPerformed(ActionEvent e) {
repaint();
}
}

public static void main(String[] args) throws MalformedURLException {
// Create a frame
JFrame frame = new JFrame("Exercise18_17");

// Create an instance of the applet
JApplet applet = new Exercise18_17();

// Add the applet to the frame
frame.add(applet, BorderLayout.CENTER);

// Invoke applet's init method
applet.init();

// Display the frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
frame.setLocationRelativeTo(null); // Center the frame
frame.setVisible(true);
}
}

关于java - 如何使用 JTextField 值控制计时器动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10764386/

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