Каким образом возможно рисовать изображение на виртуальном экране и выводить на экран монитора методом repaint()?
Код:
public class Form extends javax.swing.JFrame {
Image img, pic,deadfire;
int x[] = new int[6];
int y[] = new int[6];
int step = 0;
int ko = 8;
int flag=1;
int flagy=0;
/** Creates new form Form */
public Form() {
initComponents();
deadfire = getToolkit().getImage("razor.png");
img = getToolkit().getImage("target.png");
pic = getToolkit().getImage("back.JPG");
array();
repaint();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
formMousePressed(evt);
}
});
addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseMoved(java.awt.event.MouseEvent evt) {
formMouseMoved(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void formMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseMoved
q = evt.getX() * 2;
w = evt.getY() * 2;
repaint();
}//GEN-LAST:event_formMouseMoved
private void formMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMousePressed
if(w>=200 && y[4]>140*2){y[4]=y[4]-w/8;y[5]=y[4];}if(w<200 && y[4]<190*2){y[4]=y[4]+w/8;y[5]=y[4];}
if(q>=300 && x[4]>130*2){x[4]=x[4]-q/8;x[5]=x[5]-q/8;}
if(q<300 && x[4]<200*2){x[4]=x[4]+q/8;x[5]=x[5]+q/8;}
repaint();
}//GEN-LAST:event_formMousePressed
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Form().setVisible(true);
}
});
}
public int q, w;
public void array() {
x[0] = 150;
x[1] = 150;
x[2] = 170;
x[3] = 130;
x[4] = 135;
x[5] = 165;
y[0] = 118;
y[1] = 170;
y[2] = 220;
y[3] = 220;
y[4] = 175;
y[5] = 175;
for (int i = 0; i < 6; i++) {
x[i] = x[i] * 2 + 100;
y[i] = y[i] * 2 + 50;
}
}
public void paint(Graphics g) {
if (step == 0) {
String str;
str = "Автор проги Сашуля";
// Font font = new Font("Verdana", Font.PLAIN, 11);
for (int i = 0; i < 100; i++) {
try {
pic = getToolkit().getImage("back.JPG");
g.drawImage(pic, 10, 10, this);
g.setFont(new Font("Serif", Font.PLAIN, i));
g.setColor(new Color(255 - i, i, 255-i));
g.drawString(str, 300 - i * 2, 100 + i);
repaint();
Thread.sleep(80);
} catch (InterruptedException ex) {
Logger.getLogger(Form.class.getName()).log(Level.SEVERE, null, ex);
}
}
step = 1;
}
if (step == 1) {
g.setColor(Color.WHITE);
g.drawImage(pic, -q / 20, -w / 20, this);
g.drawImage(img, q, w, this);
g.drawImage(deadfire, -q/3, -w/3+600, this);
g.drawLine(x[0] - q / ko, y[0] - w / ko, x[1] - q / ko, y[1] - w / ko);
g.drawLine(x[1] - q / ko, y[1] - w / ko, x[2] - q / ko, y[2] - w / ko);
g.drawLine(x[1] - q / ko, y[1] - w / ko, x[3] - q / ko, y[3] - w / ko);
g.drawLine(x[0] - q / ko, y[0] + 15 - w / ko, x[4] - q / ko, y[4] - w / ko);
g.drawLine(x[0] - q / ko, y[0] + 15 - w / ko, x[5] - q / ko, y[5] - w / ko);
g.fillOval(x[0] - 6 - q / ko, y[0] - 6 - w / ko, 12, 12);
}
}
}