单击小程序时更改单词中单词的颜色

时间:2017-01-26 20:31:18

标签: java colors applet geometry

我需要做的是当用户点击" Java"在粉色圆圈的中间,它会将颜色从黑色变为红色。我的问题是我不知道该怎么做,而且我丢失了我的Java书,我正在等待一个人来邮件,所以我试图通过在线论坛工作,但是我没有。找到一个好的例子来使用。任何帮助或链接到其他示例将非常感谢!

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

2 个答案:

答案 0 :(得分:2)

  1. (首先需要确保正确编写所有方法名称并且代码没有任何拼写错误。例如,init方法有错字:inti())。

  2. 然后,您需要确保您的applet类实现Runnable“功能接口”以及MouseListener接口。

  3. 然后你需要为每个或那些接口覆盖或实现抽象方法

  4. 由于您需要在发生鼠标点击事件时更改文字的颜色,因此您应该覆盖mouseClicked以执行所需的操作

  5. 请务必repaint(),以便您的更改生效。此外,请确保run()方法重新绘制具有所需频率的形状

  6. 这是最终的解决方案:

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

    (感谢Alex's solution澄清问题的实际要求!)

答案 1 :(得分:2)

这需要几个步骤。

  1. 使textcolor成为类

    的一个字段
    private Color textcolor = Color.BLACK;
    
  2. 让paint方法绘制值,然后调用它

    g.setColor(textcolor);
    g.setFont(new Font("SansSerif",Font.BOLD, 25));
    g.drawString("Java", 60, 95);
    
  3. 实现Mouselistener接口

    public class Circle extends JApplet implements MouseListener{
    
  4. 使用Mouselistener

    初始化类
    public void inti()
    {
    addMouseListener(this);
    getContentPane().setBackground(Color.white);
    }
    
  5. 添加方法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();
    }
    
  6. 这将是我解决方案的第一个原始草图。