WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 09.11.2003, 15:09   #1
heli2sky
Master
 
Registriert seit: 02.10.2001
Alter: 39
Beiträge: 523


heli2sky eine Nachricht über ICQ schicken
Standard 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
____________________________________
Lang ist der Weg durch Lehren, kurz und wirksam durch Beispiele.
Lucius Annaeus Seneca


...:::www.modellbaulexikon.org:::...

www.acrobat-se.org | www.ams-8c.de.vu
heli2sky ist offline   Mit Zitat antworten
Alt 09.11.2003, 18:51   #2
Potassium
Inventar
 
Registriert seit: 06.03.2003
Alter: 37
Beiträge: 3.954

Mein Computer

Standard

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.
Potassium ist offline   Mit Zitat antworten
Alt 10.11.2003, 01:51   #3
Who-T
Elite
 
Registriert seit: 01.08.2000
Beiträge: 1.395


Who-T eine Nachricht über ICQ schicken
Standard

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
____________________________________
Whoever built humanity left in a major design flaw: it was the tendency to bend at the knees.
Who-T ist offline   Mit Zitat antworten
Alt 10.11.2003, 16:58   #4
heli2sky
Master
 
Registriert seit: 02.10.2001
Alter: 39
Beiträge: 523


heli2sky eine Nachricht über ICQ schicken
Standard

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));
    }        

____________________________________
Lang ist der Weg durch Lehren, kurz und wirksam durch Beispiele.
Lucius Annaeus Seneca


...:::www.modellbaulexikon.org:::...

www.acrobat-se.org | www.ams-8c.de.vu
heli2sky ist offline   Mit Zitat antworten
Alt 10.11.2003, 18:58   #5
moorhahn
Veteran
 
Registriert seit: 26.12.2000
Beiträge: 489


moorhahn eine Nachricht über ICQ schicken
Standard

@ 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 ...... .
____________________________________
Wenn Null ganz besonders gross ist, ist es schon fast so viel wie ein kleines bisschen Eins... - (Kommentar zum Thema Rundungsfehler bei Fliesskommazahlen).
moorhahn ist offline   Mit Zitat antworten
Alt 10.11.2003, 21:25   #6
heli2sky
Master
 
Registriert seit: 02.10.2001
Alter: 39
Beiträge: 523


heli2sky eine Nachricht über ICQ schicken
Standard

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?!?!?!!!!
____________________________________
Lang ist der Weg durch Lehren, kurz und wirksam durch Beispiele.
Lucius Annaeus Seneca


...:::www.modellbaulexikon.org:::...

www.acrobat-se.org | www.ams-8c.de.vu
heli2sky ist offline   Mit Zitat antworten
Alt 11.11.2003, 00:18   #7
Who-T
Elite
 
Registriert seit: 01.08.2000
Beiträge: 1.395


Who-T eine Nachricht über ICQ schicken
Standard

gibts
http://www.javabuch.de/
____________________________________
Whoever built humanity left in a major design flaw: it was the tendency to bend at the knees.
Who-T ist offline   Mit Zitat antworten
Alt 11.11.2003, 08:46   #8
balhug
Newbie
 
Registriert seit: 10.11.2003
Beiträge: 3


Standard

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 ist offline   Mit Zitat antworten
Alt 11.11.2003, 08:49   #9
balhug
Newbie
 
Registriert seit: 10.11.2003
Beiträge: 3


Standard

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.
balhug ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:33 Uhr.


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