20. februar 2001 - 12:54
#2
Problemet er, at jeg skal have en screensaver til at køre, og at den skal lytte til en MouseMotionListener.... min saver bruger en løkke til at tegne nogle prikker, men jeg kan ikke få den til at svare på fx en luk handling før løkken er kørt til ende... prøv evt. at se koden. Min MotionListener skulle gerne bevirke, at programmet lukkes ned...
*
* screenSaver.java
*
* Created on 18. februar 2001, 17:23
*/
/**
*
* @author Edwin Stanton Spence
* @version
*/
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.geom.*;
public class screenSaver extends javax.swing.JFrame implements MouseMotionListener, ActionListener {
int Var, Dar, x; //global dekleration af variable
/** Creates new form screenSaver */
public screenSaver() {
initComponents ();
pack ();
double width = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
double height = Toolkit.getDefaultToolkit().getScreenSize().getHeight();
Var=(int)width; //convert double to int
Dar=(int)height; //convert double to int
setSize(Var,Dar);
setVisible(true);
setBackground (Color.yellow);
setDefaultCloseOperation (WindowConstants.DISPOSE_ON_CLOSE);
addMouseMotionListener (this);
setVisible (true);
//addMouseListner(this); ///KAN IKKE IMPLEMENTERE MOUSELISTER
//addMouseMotionListner (this);
//System.out.println (Var);
//System.out.println (Dar);
}
/** Exit the Application */
private void exitForm(java.awt.event.WindowEvent evt) {
//System.exit (0);
dispose ();
}
public void paint (Graphics g) {
Graphics2D g2d = (Graphics2D) g;
//rotate around origin and draw starts in random colors
for (int j = 1; j <= 1100; j++){
//g2d.rotate(x*5);
g2d.setColor(
new Color ((int)(Math.random()*256),
(int) (Math.random() * 256),
(int) (Math.random() *256)));
double sideDouble = Math.random();
double laengdeDouble = Math.random();
int sideInteger =(int)(sideDouble*100);
int laengdeInteger=(int)(laengdeDouble*100);
sideInteger = sideInteger*Var/100;
laengdeInteger = laengdeInteger*Dar/100;
g2d.fillArc (sideInteger, laengdeInteger, 80, 40, 0, 360);
for (int i = 1; i <= 1009000; i++){}//delay counter
}
//System.exit(0);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the FormEditor.
*/
private void initComponents () {
addWindowListener (new java.awt.event.WindowAdapter () {
public void windowClosing (java.awt.event.WindowEvent evt) {
exitForm (evt);
}
}
);
}
/** Exit the Application *//*
private void exitForm(java.awt.event.WindowEvent evt) {
//System.exit (0);
dispose ();
}
*/
/**
* @param args the command line arguments
**/
public static void main (String args[]) {
screenSaver app = new screenSaver();
}
public void mouseDragged(java.awt.event.MouseEvent p1) {
}
public void mouseMoved(java.awt.event.MouseEvent p1) {
//System.exit(0);
//MouseVariable = 0;
//dispose ();
}
// Variables declaration - do not modify
// End of variables declaration
public void actionPerformed(final java.awt.event.ActionEvent p1) {
dispose ();
}
}
***************************
håber, det hjælper ;))
20. februar 2001 - 13:19
#3
Problemet er, at de messages, der er kommet ind - blandt andet musebevægelser - først bliver undersøgt, når paint() er færdig. Jeg er ikke klar over, hvordan du får Java til at undersøge messagequeue\'n inde i løkken, men måske kan det give dig et hint, at det i Delphi klares med Application.ProcessMessages. Det kan være du kan finde noget tilsvarende. Ellers må du dele din paint op i mindre bidder og lade den køre i en separat Thread.