0

私は自分の時計プログラムのどこが間違っているのか完全に困惑しています。

私のプログラムは、ユーザー入力を数時間から数分間受け入れることになっています。次に、ユーザーの入力により、時針と分針がポップアップウィンドウに表示された円形の時計の適切な位置に設定されます。

私のプログラムはユーザー入力を取り入れていないようですが、代わりにのpaintメソッドからの入力を取り入れていますClockApplet.java。代わりに、プログラムにユーザーからの入力を取り込む方法がよくわかりません。アドバイス/入力/ヘルプをいただければ幸いです。

私のコードは次のとおりです。

Clock.java

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;

public class Clock
{
public Clock()
{
    this.anHour=12;
    this.aMin=0;
}

public Clock(double hr, double min)
{
    this.anHour=hr;
    this.aMin=min;
}

public void draw(Graphics g)
{
    Graphics2D g2=(Graphics2D)g;

    Ellipse2D.Double clock_face = new Ellipse2D.Double(0, 0, 2 * RADIUS, 
                                    2 * RADIUS);
    ((Graphics2D) g).draw(clock_face);

    Point2D.Double center=new Point2D.Double(RADIUS, RADIUS);
    double angle=Math.PI /2 - 2 * Math.PI * aMin / MINUTES_PER_HOUR;
    Point2D.Double minutePoint=new Point2D.Double(RADIUS + MINUTE_HAND
                                * Math.cos(angle), RADIUS - MINUTE_HAND * Math.sin(angle));
    Line2D.Double minuteHand=new Line2D.Double(center, minutePoint);
    ((Graphics2D) g).draw(minuteHand);

    angle=Math.PI / 2 - 2 * Math.PI * (anHour * MINUTES_PER_HOUR +
            aMin) / (MINUTES_PER_HOUR * HOURS_PER_DAY);
    Point2D.Double hourPoint=new Point2D.Double(RADIUS + HOUR_HAND *
                                Math.cos(angle), RADIUS - HOUR_HAND * Math.sin(angle));
    Line2D.Double hourHand=new Line2D.Double(center, hourPoint);
    ((Graphics2D) g).draw(hourHand);

    Clock clock1=new Clock(anHour, aMin);
}

private double anHour;
private double aMin;

final double RADIUS = 100;
final double MINUTES_PER_HOUR = 60;
final double HOURS_PER_DAY = 12;
final double HOUR_HAND = 75;
final double MINUTE_HAND = 90;
}

ClockApplet.java

import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JApplet;
import javax.swing.JOptionPane;

/**
 * This applet draws the clock shape.
 */

public class ClockApplet extends JApplet
{
    public ClockApplet()
    {
        String input;

    input=JOptionPane.showInputDialog(null, "Please enter the time (hh:mm):","Clock Applet", JOptionPane.QUESTION_MESSAGE);

    if((input==null) || (input.equals("")))
    {
        JOptionPane.showMessageDialog(null, "Invalid input", "Alert", JOptionPane.WARNING_MESSAGE);
        System.exit(0);
    }
    else
    {
        int colon1=input.indexOf(":");
        int colon2=input.lastIndexOf(":");

        double hours=findHour(colon1, input);
        double minutes=findMin(colon2, input);

        if(hours!=0 && minutes!=0)
        {
            Clock clock1=new Clock(hours, minutes);
        }
        else
        {
            JOptionPane.showMessageDialog(null, "Invalid input", "Alert", JOptionPane.WARNING_MESSAGE);
            System.exit(0);
        }
    }
}

public double findHour(int colon1, String input)
{
    String userHour=input.substring(colon1+1);
    double aHour=Double.parseDouble(userHour);
    double temp1=0.0;

    if(aHour>0 && aHour<=12)
    {
        temp1=aHour;
    }
    else
    {
        return 0;
    }

    return temp1;
}

public double findMin(int colon2, String input)
{
    String userMin=input.substring(colon2+1);
    double aMin=Double.parseDouble(userMin);
    double temp1=0.0;

    if(aMin>0 && aMin<=60)
    {
        temp1=aMin;
    }
    else
    {
        return 0;
    }

    return temp1;
}

public void paint(Graphics g)
{
    Graphics2D g2=(Graphics2D)g;

    Clock clock1=new Clock(10,10);

    clock1.draw(g2);

}

}

ClockApplet.html

<applet code="ClockApplet.class" width="50" height="50"> </applet>
4

2 に答える 2

1

ユーザー入力を受け入れるコードをアプレットのメソッドに追加する必要がありますlife cycle。そのappletため、アプレットの init() メソッドにコードを追加しますが、ここでは欠落していると思います。そのため、init() メソッドをオーバーライドしてコードを追加します。

 @Override
    public void init(){
    input=JOptionPane.showInputDialog(null, "Please enter the time (hh:mm):","Clock Applet", JOptionPane.QUESTION_MESSAGE); 

    }
于 2012-06-04T05:02:04.537 に答える