java - 我编写了以下程序,用于在线程的帮助下用java创建动画。但它给o/p作为透明窗口

标签 java multithreading swing animation

根据事件委托(delegate)模型,我采用了一个处理程序类。

package simple;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ButtonHandler implements ActionListener {

    MainFrame frame;

    public ButtonHandler(MainFrame frame) {
        this.frame = frame;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        MyThread thread = new MyThread(frame);
        Thread mthread = new Thread(thread);            
        mthread.start();
    }    
}

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,

用于框架创建的一个 MainFrame 类

package simple;

import java.awt.Graphics;    
import javax.swing.JButton;
import javax.swing.JFrame;

@SuppressWarnings("serial")
public class MainFrame extends JFrame {
    JButton btnStart = new JButton("Start");
    int xPos1,xPos2;    
    public MainFrame()
    {           
        setSize(700, 600);
        setLayout(null);
        setVisible(true);           
        xPos1=10;
        xPos2=600;
        btnStart.setBounds(590, 30, 100, 30);
        add(btnStart);
        btnStart.addActionListener(new ButtonHandler(this));            
        paint(null);            
        setDefaultCloseOperation(EXIT_ON_CLOSE);            
    }

    @Override
    public void paint(Graphics g) {
        g.drawString("Seed", xPos1, 50);
        g.drawString("Infotech", xPos2, 550);
    }
}

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

一个实现可运行接口(interface)的线程类

package simple;

public class MyThread implements Runnable {

    MainFrame frame;        

    public MyThread(MainFrame frame) {
        super();
        this.frame = frame;
    }

    @Override
    public void run() {

        while(true)
        {
            frame.repaint();
            try {
                frame.xPos1++;
                frame.xPos2--;
                Thread.sleep(10);
            } catch (InterruptedException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }               
        }
    }    
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 一个类仅用于主方法

package simple;

public class Test {

    public static void main(String[] args) {
        new MainFrame();
    }
}

谁能告诉我问题是什么,因为我对 java 编程概念很陌生。

最佳答案

  1. 重写顶级容器 (JFrame) 的 paint
  2. 不调用super.paint(g);
  3. 调用paint(null)
  4. setLayout(null)

查看 Performing Custom Painting 即可加星和 Laying out components in a container

您可能会发现 javax.swing.Timer 比使用Thread 更有用。看看Concurrency in Swing了解更多详情

关于java - 我编写了以下程序,用于在线程的帮助下用java创建动画。但它给o/p作为透明窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19412144/

相关文章:

安卓: "Class loader may fail for processes that host multiple applications"

multithreading - 我强大的本地计算机与另一台远程计算机上的MATLAB Quadprog极其慢

java - JFrame 在 Ubuntu 中的错误位置(Unity?)

java - 运行 import javax.swing.JOptionpane 时出错

swing - JPA 桌面应用程序

java - Vava 查询 MongoDB : find event in a specific date range

java - 在 CrafterCMS 中,我在 Safari 中看到 mp4 视频时遇到问题

c - 线程安全队列的问题表现为 IDE 控制台中没有输出

java - 多个 ssl 连接时的 SSLHandshakeException

java - Maven 构建期间的 NoClassDefFoundError