Java 使用JTextField更改简单的横幅动画文本

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

我正在为一个在JPanel上移动的简单横幅做一个分配,我让它工作了,我想我会添加一个功能,让用户在JTextField中输入一条消息来更改横幅的消息。不过我有点问题

我似乎无法理解如何使用JTextField来更改消息变量。我想我需要一个ActionListener,但我所拥有的只是不起作用(在JTextField中按enter键后,什么也不会发生)

任何朝着正确方向的努力都将不胜感激

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