WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   java button -> repaint() (http://www.wcm.at/forum/showthread.php?t=114930)

heli2sky 09.11.2003 16:09

java button -> repaint()
 
hallo!

kann mir jemand mal schnell ein kleines java-applet schreiben, das sich irgendwie verändert, wenn man auf einen button klickt? ich hab schon viele tuts gesucht aber nix gscheites gefunden! bei mir funktioniert alles irgendwie nicht, egal wie ich es probiert habe!

dann hätt ich noch ein paar verständnisprobleme mit den mouseevents... wo liegt der unterschied zw. mousedown(event e) und mouseclicked(mouseevent e)... mousedown und mousemove haben bei mir funktioniert, aber nicht mousemoved und mousereleased usw.. :(

bitte um eine deppensichere antwort ;)

Potassium 09.11.2003 19:51

ich weiß nicht wie es bei java ist aber bei VB gibt es einen unterscheid zwischen keydown und keypress. ich weiß das das ned das gleiche is aber. bei vb besteht der unterschied im wert der rückgabe. also bei keypress sind es andere werte als bei keydown.
ich hoffe hilft wenigstens ein bisschen.

Who-T 10.11.2003 02:51

mousedown: mouse button wird gedrückt
mouseclicked: mouse button gedrückt und losgelassen

Code:


public class TestApplet extends Applet implements MouseListener
{

Button b;

public void init ()
{
 b = new Button ("click me");
 b.addMouseListener (this);
 add (b);
}

public void mouseDown (MouseEvent e)
{
 b.setText ("ouch");
}

// other stuff
}

ungetestet, die implementierungen der anderen methoden fehlen, ich hab net in die javadoch geschaut ob die methoden alle passen aber theoretisch sollts funktionieren ;)

heli2sky 10.11.2003 17:58

hallo!

folgende fehlermeldungen:

1) wenn ich dem applet nur "implements MouseListener" dazuschreibe:
Test002 is not abstract and does not override abstract method mouseReleased(java.awt.event.MouseEvent) in java.awt.event.MouseListener
public class Test002 extends java.applet.Applet implements MouseListener {

2) wenn ich applet + implements MouseListener + button.addMouseListener(this) direct unter der public class test002:
identifier expected bei der klammer vom (this)

3) applet + implements... + button.addMouseListener(this) in der init():
gleicher fehler wie bei (1)


noch eine frage: wie kann ich eine double auf 2 dezimalstellen runden??? mit Math.round(double*100)/100 kommt bei mir immer xxx.0

hier der code.. vielleicht hilfts was
PHP-Code:

import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class 
Test002 extends java.applet.Applet {
    
    
int fensterx 10;
    
int fenstery 10;
    
int fensterw 300;
    
int fensterh 300;

    
int downxdowny;
    
int d 10;
    
int i,object;
    
boolean hit;

    
Label text;
    
    
int[][] coords = new int[3][3];
    
int[] v1 = new int[2];
    
int[] v2 = new int[2];
    
    public 
void init() {
        
setLayout(null);
        
setBackground(Color.white);
        
        
Button test = new Button("test!");
        
test.setBounds(fensterx+fensterw+20,10,50,20);
        
add(test);
        
        
text = new Label();
        
text.setBounds(fensterx+fensterw+20,35,98,20);
        
add(text);
                
        
coords[0][0] = 210;
        
coords[0][1] = 130;
        
coords[0][2] = 100;
        
coords[1][0] = 80;
        
coords[1][1] = 110;
        
coords[1][2] = 50;
        
coords[2][0] = 180;
        
coords[2][1] = 270;
        
coords[2][2] = -100;
    }
    
    public 
boolean mouseDown(Event eint xint y) {
        
downx x;
        
downy y;
        
hit false;
        for(
i=0;i<coords.length;i++) {
            
int mx coords[i][0];
            
int my coords[i][1];
            if(
downx mx+d/&& downx mx-d/&& downy my+d/&& downy my-d/2) {
                
object i;
                
hit true;
            }
        }            
        return 
true;
    }
    
    public 
boolean mouseDrag(Event e,int x ,int y) {
        
        if(
<= fensterx)
            
fensterx;
        if(
>= fensterx+fensterw)
            
fensterx+fensterw;
        if(
<= fenstery)
            
fenstery;
        if(
>= fenstery+fensterh)
            
fenstery+fensterh;
        
        if(
hit == true) {
            
coords[object][0] = x;
            
coords[object][1] = y;
        }
        
downx x;
        
downy y;
        
repaint(fensterx,fenstery,fensterw,fensterh);
        return 
true;
    }

    
    public 
void paint(Graphics g) {
        
g.setColor(Color.blue);        
        
        
int vx coords[0][0];
        
int vy coords[0][1];
        
        
vektor(0,1,g);
        
vektor(0,2,g);
        
int newx v1[0]+v2[0]-vx// ausgangspunkt v1 + vektor vx_v2 (spitze minus schaft)
        
int newy v1[1]+v2[1]-vy// ausgangspunkt v1 + vektor vx_v2 (spitze minus schaft)
        
g.setColor(Color.green);
        
g.drawLine(vx,vy,newx,newy);
        
        
// Feldstärke der Resultierenden
        
double feld;
        
feld Math.sqrt((vx-newx)*(vx-newx)+(vy-newy)*(vy-newy));
        
text.setText("Feldstärke: " Double.toString(feld));
        
        for(
i=0;i<coords.length;i++) {
            
int x coords[i][0];
            
int y coords[i][1];
            
int z coords[i][2];
            
ladung(x,y,z,i,g);
        }
        
        
g.setColor(Color.black);
        
g.drawRect(fensterx,fenstery,fensterw,fensterh); // zeichenfenster
    
}
    
    public 
void ladung(int mxint myint zint ladGraphics g) {
        
        if(
== 0)
            
g.setColor(Color.black);
        else if(
0)
            
g.setColor(Color.red);
        else if(
0)
            
g.setColor(Color.blue);
        
        
g.drawOval(mx-(d/2),my-(d/2),d,d);
        
g.drawLine(mx-(d/2),my,mx+(d/2),my);
        
g.drawLine(mx,my-(d/2),mx,my+(d/2));
    }
    
    public 
void vektor(int lad1int lad2Graphics g) {
        
        
int x1 coords[lad1][0];
        
int y1 coords[lad1][1];
        
int q1 coords[lad1][2];
        
        
int x2 coords[lad2][0];
        
int y2 coords[lad2][1];
        
int q2 coords[lad2][2];
        
        
double r,betrag,epsilon_null;
        
        
int faktor 18000;
        
epsilon_null 8.854// original: 8.854*Math.pow(10,-12);
        
        
Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
        
betrag = ((q1*q2)/(r*r))*(1/(4*Math.PI*epsilon_null))*faktor;
        
        
// vektor wird erstellt (vx|vy) - spitze minus schaft
        
int vx x1 x2;
        
int vy y1 y2;
        
        
// einheitsvektor a' = a * (1 / |a|)
        
double evx vx*(1/r);
        
double evy vy*(1/r);        
        
        
// vektorcoords für erzeugende werden gespeichert
        
if(lad2==1) {
            
v1[0]=(int)(x1+evx*betrag);
            
v1[1]=(int)(y1+evy*betrag);
        }
        if(
lad2==2) {
            
v2[0]=(int)(x1+evx*betrag);
            
v2[1]=(int)(y1+evy*betrag);
        }
        
        
Color color = new Color(220,220,220);
        
g.setColor(color);
        
g.drawLine(x1,y1,(int)(x1+evx*betrag),(int)(y1+evy*betrag));
    }        



moorhahn 10.11.2003 19:58

@ 1) wennst das interface mouselistener implementierst, musst alle methoden des interfaces ind der klasse auch implementieren -> in der java-api-doc nachschauen welche methoden für mouselistener "vorgeschrieben" sind, und diese dann implementieren, auch wenn sie leer sind. du könntest es auch noch mit der MouseAdapter-klasse machen, aber das ist einer andere geschichte ...... :) .

heli2sky 10.11.2003 22:25

aha das sagt mir eigentlich nicht wirklich viel... egal, werd mal nachschauen...

wieso gibts für java nicht so ein gutes manual wie zb für php?!?!?!!!!

Who-T 11.11.2003 01:18

gibts
http://www.javabuch.de/

balhug 11.11.2003 09:46

eine Methode zum runden einer double Zahl auf 2 Dezimalstellen

PHP-Code:

private double formatDouble(double d))
   {
NumberFormatException 
      DecimalFormatSymbols symbol 
= new DecimalFormatSymbols();
      
symbol.setDecimalSeparator('.');
      
angelegten 
      DecimalFormat df 
= new DecimalFormat("0.00",symbol);
       
      return 
Double.parseDouble(df.format(d));
   } 

damit das funktioniert müssen folgende imports noch hinzugefügt werden
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;

in der Zeile
DecimalFormat df = new DecimalFormat("0.00",symbol);
gibt der erste Parameter die Ausprägung der double Zahl an d.h.
"0.00" -> 457.54 oder "0.0000" -> 457.5432

balhug 11.11.2003 09:49

mir ist ein kleiner Fehler unterlaufen

PHP-Code:

private double formatDouble(double d)) 

   
DecimalFormatSymbols symbol = new DecimalFormatSymbols(); 
   
symbol.setDecimalSeparator('.'); 
   
DecimalFormat df = new DecimalFormat("0.00",symbol); 
        
   return 
Double.parseDouble(df.format(d)); 


so sollte es mit den imports auch laufen.


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag