2017-01-26 4 views
-1

Was ich muss passiert ist, dass, wenn der Benutzer das Wort "Java" in der Mitte des rosa Kreises klickt, wird die Farbe der Wörter von schwarz zu ändern rot. Mein Problem ist, dass ich nicht weiß, wie ich es machen soll, und ich habe mein Java-Buch verloren und warte darauf, dass einer mit der Post kommt, also versuche ich Online-Foren zu bearbeiten, aber ich fand einfach kein gutes Beispiel dafür benutzen. Jede Hilfe oder Links zu anderen Beispielen würden sehr geschätzt werden!Ändern Sie die Farbe eines Wortes in einem Applet, wenn es angeklickt wird

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
public class Circle extends JApplet{ 


public void inti() 
{ 
    getContentPane().setBackground(Color.white); 
} 

public void paint(Graphics g) 
{ 
    super.paint(g); 

    g.setColor(Color.black); 
    g.drawOval(20, 20, 140, 140); 
    g.setColor(Color.pink); 
    g.fillOval(20,20,140,140); 
    g.setColor(Color.BLACK); 
    g.setFont(new Font("SansSerif",Font.BOLD, 25)); 
    g.drawString("Java", 60, 95); 
} 
} 

Antwort

2
  1. (Sie müssen zuerst sicherstellen, dass Ihre Schreib alle Methodennamen korrekt und Ihr Code keine Fehler haben zum Beispiel Sie Init-Methode einen Tippfehler. inti()).

  2. Dann müssen Sie sicherstellen, dass Ihre Applet-Klasse die Runnable "Funktionale Schnittstelle" sowie die MouseListener Schnittstelle implementiert.

  3. Dann müßten Sie außer Kraft zu setzen oder die abstrakten Methoden für jeden oder jene Schnittstellen

  4. zu implementieren Da Sie die Farbe Ihres Textes ändern müssen, wenn ein Mausklick Ereignis eintritt, dann sollten Sie mouseClicked außer Kraft auszuführen Ihre gewünschte Aktion

  5. Achten Sie auf repaint(), damit Ihre Änderungen entsprechend wirksam werden. Außerdem sicher, dass die run() Methode, um die Form mit der gewünschten Frequenz neu zeichnet

Hier ist die endgültige Lösung: (! Dank Alex's solution für die Klärung, was die Frage tatsächlich bittet um)

public class Main extends JApplet implements Runnable, MouseListener { 

//this member field will specify what color should be the text 
//in every painting cycle 
private Color textColor = Color.BLACK; 


@Override 
public void paint(Graphics g) { 

    g.setColor(Color.black); 
    g.drawOval(20, 20, 140, 140); 
    g.setColor(Color.pink); 
    g.fillOval(20, 20, 140, 140); 
    g.setColor(Color.BLACK); 

    g.setColor(textColor); 
    g.setFont(new Font("SansSerif", Font.BOLD, 25)); 
    g.drawString("Java", 60, 95); 
} 

@Override 
public void init() { 
    //screen size --modify it as desired 
    this.setSize(200, 200); 
    getContentPane().setBackground(Color.white); 
    addMouseListener(this); 
} 

public void run() { 
    while (true) { 
     repaint(); 

     try { 
      Thread.sleep(17); //specifies repaint frequency 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

@Override 
public void mouseClicked(MouseEvent e) { 
    int x = e.getX(), y = e.getY(); 

    if (x >= 60 && x <= 120 && y >= 80 && y <= 95) 
     textColor = Color.RED; 
    else 
     textColor = Color.black; 

    repaint(); 


    //you can use this to change the condition of the if statement as you desire 
    System.out.println("mouse clicked: x="+x+ " --- y="+y); 
} 

@Override 
public void mousePressed(MouseEvent e) {} 

@Override 
public void mouseReleased(MouseEvent e) {} 

@Override 
public void mouseEntered(MouseEvent e) {} 

@Override 
public void mouseExited(MouseEvent e) {} 
} 

+1

umfasst das, wenn die Maus über das Wort Java geklickt wird? – ChunkierLizard

+0

Sie können 'myText.setForeground (Color.RED); 'in Ihrer überschriebenen' mouseClicked' Methode, so dass beim Anklicken der Maus und Aufruf der Methode diese Anweisung ausgeführt wird und somit die Farbe des Textes in rot geändert wird. –

+0

Können Sie mir eine Probe geben, wie der Mausklick funktionieren würde, ist das größte Problem, das ich habe – ChunkierLizard

2

Dies erfordert mehrere Schritte.

  1. die Textfarbe ein Feld der Klasse machen

    private Color textcolor = Color.BLACK; 
    
  2. der paint-Methode Farbe nehmen den Wert lassen, dann seine

    g.setColor(textcolor); 
    g.setFont(new Font("SansSerif",Font.BOLD, 25)); 
    g.drawString("Java", 60, 95); 
    
  3. implementieren die Mouselistener Schnittstelle

    genannt
    public class Circle extends JApplet implements MouseListener{ 
    
  4. initilize die Klasse mit einem mouselistener

    public void inti() 
    { 
    addMouseListener(this); 
    getContentPane().setBackground(Color.white); 
    } 
    
  5. der Methode hinzufügen mouseClicked

    mouseClicked(MouseEvent e){ 
    e.GetX(); 
    e.GetY(); // Get the Clickcoordinates and check if its inside the circle 
    if(//Inside the cirle){ 
    textcolor = Color.RED; 
    } 
    else{ 
    textcolor = Color.BLACK; 
    } 
    // Make the class refrech its content 
    repaint(); 
    } 
    

, dass meine erste rohe Skizze der Lösung wäre.

+0

für die if-Anweisung, würden Sie die X- und Y-Koordinaten setzen? – ChunkierLizard

+0

Das ist Vektorgeometrie'if (((e.GetX() - 20)^2 + (e.GetY() - 20)^2)^0.5) <(2 * 140^2)^0.5) ' – Alex

+0

Muss ich auch die anderen geerbten Methoden wie mouseEntered implementieren? – ChunkierLizard

Verwandte Themen