import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

/**
 * @author MIK
 *
 */
public class D3DWoes extends JPanel implements ActionListener
{
/**
*
*/
private static final long serialVersionUID = 5906379118516119809L;

/**
* @param args
*/
public static void main(final String[] args)
{
// set to TRUE in order to use D3D and exploit the bug
// set to FALSE to run with software loops
System.getProperties().put("sun.java2d.d3d","TRUE");

SwingUtilities.invokeLater(() ->
{
final D3DWoes panel = new D3DWoes();
final JFrame f = new JFrame();
f.add(panel);
f.setSize(800, 800);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// auto-repaint timer
Timer t = new Timer(1,panel);
t.setRepeats(true);
t.start();
});
}

/**
* default constructor
*/
public D3DWoes()
{
super();
setToolTipText("");
}

/*
* (non-Javadoc)
*
* @see javax.swing.JComponent#paint(java.awt.Graphics)
*/
@Override
public void paint(final Graphics g)
{
super.paint(g);

g.setColor(Color.GRAY);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.RED);
g.drawString("Click me, wait tooltip and check GPU load " + System.currentTimeMillis(), 300, 400);
}

/*
* @see javax.swing.JComponent#createToolTip()
*/
@Override
public JToolTip createToolTip()
{
setToolTipText(System.currentTimeMillis() + "");
return super.createToolTip();
}

/*
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
@Override
public void actionPerformed(ActionEvent e)
{
repaint();
}
} 