Java 使用JTextField更改简单的横幅动画文本
我正在为一个在JPanel上移动的简单横幅做一个分配,我让它工作了,我想我会添加一个功能,让用户在JTextField中输入一条消息来更改横幅的消息。不过我有点问题 我似乎无法理解如何使用JTextField来更改消息变量。我想我需要一个ActionListener,但我所拥有的只是不起作用(在JTextField中按enter键后,什么也不会发生) 任何朝着正确方向的努力都将不胜感激Java 使用JTextField更改简单的横幅动画文本,java,swing,animation,actionlistener,jtextfield,Java,Swing,Animation,Actionlistener,Jtextfield,我正在为一个在JPanel上移动的简单横幅做一个分配,我让它工作了,我想我会添加一个功能,让用户在JTextField中输入一条消息来更改横幅的消息。不过我有点问题 我似乎无法理解如何使用JTextField来更改消息变量。我想我需要一个ActionListener,但我所拥有的只是不起作用(在JTextField中按enter键后,什么也不会发生) 任何朝着正确方向的努力都将不胜感激 public class Banner extends JPanel implements ActionLis
public class Banner extends JPanel implements ActionListener {
private int x = 0, y = 100;
private static JTextField messageField;
private String message;
public static void main(String[] args) {
JFrame JF = new JFrame();
Banner firstMessage = new Banner("Type a message in the text field to change the banner");
Banner newMessage = new Banner("");
messageField = new JTextField();
JF.add(firstMessage);
JF.add(messageField, BorderLayout.NORTH);
JF.setSize(800, 400);
//Add banner message
firstMessage.start();
//JF.add(newMessage);
JF.setVisible(true);
JF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//Banner constructor
public Banner(String m) {
message = m;
x = getSize().width + 300;
}
//Start timer thread
public void start() {
TimerTest timer = new TimerTest(this);
timer.start();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(getBackground());
//set background color red
g.setColor(Color.RED);
g.fillRect(0, 0, getSize().width, getSize().height);
//Move message until end of message reaches the end of screen
if(x > -300) {
x -= 6;
}
else {
x = getSize().width + 10;
}
g.setColor(Color.black);
g.drawString(message, x, y);
}
public void actionPerformed(ActionEvent event){
if(event.getSource() == messageField) {
message = (messageField.getText());
}
}
}
message.equals(messageField.getText())应该是
message=messageField.getText()
。另外,在执行任何自定义绘制之前,请在paintComponent
方法中调用super.paintComponent
,Swing计时器是不线程安全的,因此Swing计时器会更好。有关更多详细信息,请参阅第一条评论。别忘了将this
注册为ActionListener
,并将其添加到该字段以及MessageField中。addActionListener(this)(另外,对不起,我正在手机上阅读此消息,它不那么直观:P)对不起,它应该是第一条消息,而不是这个:P