質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

1702閲覧

JPanelでのエラー

Shoan

総合スコア13

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/05/09 17:57

二つ別々のJPanel、DrawArcs.java(Fan) and StillClock.java(clock)が与えられています。

この二つを使って時計がリアルタイムに動き、fanが動くようにし、GUIを使い、自由にスタート&ストップできるようにするようにします。

与えられたコードは以下になります。

import java.awt.*; import javax.swing.*; import java.util.*; public class StillClock extends JPanel { private int hour; private int minute; private int second; /** Construct a default clock with the current time*/ public StillClock() { setCurrentTime(); } /** Construct a clock with specified hour, minute, and second */ public StillClock(int hour, int minute, int second) { this.hour = hour; this.minute = minute; this.second = second; } /** Return hour */ public int getHour() { return hour; } /** Set a new hour */ public void setHour(int hour) { this.hour = hour; repaint(); } /** Return minute */ public int getMinute() { return minute; } /** Set a new minute */ public void setMinute(int minute) { this.minute = minute; repaint(); } /** Return second */ public int getSecond() { return second; } /** Set a new second */ public void setSecond(int second) { this.second = second; repaint(); } @Override /** Draw the clock */ protected void paintComponent(Graphics g) { super.paintComponent(g); // Initialize clock parameters int clockRadius = (int)(Math.min(getWidth(), getHeight()) * 0.8 * 0.5); int xCenter = getWidth() / 2; int yCenter = getHeight() / 2; // Draw circle g.setColor(Color.black); g.drawOval(xCenter - clockRadius, yCenter - clockRadius, 2 * clockRadius, 2 * clockRadius); g.drawString("12", xCenter - 5, yCenter - clockRadius + 12); g.drawString("9", xCenter - clockRadius + 3, yCenter + 5); g.drawString("3", xCenter + clockRadius - 10, yCenter + 3); g.drawString("6", xCenter - 3, yCenter + clockRadius - 3); // Draw second hand int sLength = (int)(clockRadius * 0.8); int xSecond = (int)(xCenter + sLength * Math.sin(second * (2 * Math.PI / 60))); int ySecond = (int)(yCenter - sLength * Math.cos(second * (2 * Math.PI / 60))); g.setColor(Color.red); g.drawLine(xCenter, yCenter, xSecond, ySecond); // Draw minute hand int mLength = (int)(clockRadius * 0.65); int xMinute = (int)(xCenter + mLength * Math.sin(minute * (2 * Math.PI / 60))); int yMinute = (int)(yCenter - mLength * Math.cos(minute * (2 * Math.PI / 60))); g.setColor(Color.blue); g.drawLine(xCenter, yCenter, xMinute, yMinute); // Draw hour hand int hLength = (int)(clockRadius * 0.5); int xHour = (int)(xCenter + hLength * Math.sin((hour % 12 + minute / 60.0) * (2 * Math.PI / 12))); int yHour = (int)(yCenter - hLength * Math.cos((hour % 12 + minute / 60.0) * (2 * Math.PI / 12))); g.setColor(Color.green); g.drawLine(xCenter, yCenter, xHour, yHour); } public void setCurrentTime() { // Construct a calendar for the current date and time Calendar calendar = new GregorianCalendar(); // Set current hour, minute and second this.hour = calendar.get(Calendar.HOUR_OF_DAY); this.minute = calendar.get(Calendar.MINUTE); this.second = calendar.get(Calendar.SECOND); } @Override public Dimension getPreferredSize() { return new Dimension(200, 200); } }
import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.Graphics; public class DrawArcs extends JFrame { public DrawArcs() { setTitle("DrawArcs"); add(new ArcsPanel()); } /** Main method */ public static void main(String[] args) { DrawArcs frame = new DrawArcs(); frame.setLocationRelativeTo(null); // Center the frame frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(250, 300); frame.setVisible(true); } } // The class for drawing arcs on a panel class ArcsPanel extends JPanel { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); int xCenter = getWidth() / 2; int yCenter = getHeight() / 2; int radius = (int)(Math.min(getWidth(), getHeight()) * 0.4); int x = xCenter - radius; int y = yCenter - radius; g.fillArc(x, y, 2 * radius, 2 * radius, 0, 30); g.fillArc(x, y, 2 * radius, 2 * radius, 90, 30); g.fillArc(x, y, 2 * radius, 2 * radius, 180, 30); g.fillArc(x, y, 2 * radius, 2 * radius, 270, 30); } }

今現在、以下のようになりました。

import java.awt.event.*; import javax.swing.*; import java.awt.*; public class ClockAnimation extends JFrame { //create an instance for StillClock private StillClock clock = new StillClock(); //create buttons JButton startButton; JButton stopButton; //create a timer (1000 milliseconds delay) Timer timer = new Timer(1000, new TimerListener()); public ClockAnimation() { //create a panel to hold the clock JPanel clockPanel = new JPanel(); //add the clock to panel clockPanel.add(clock); //create a panel to hold start and stop buttons JPanel ButtonPanel = new JPanel(); //create a start button startButton = new JButton("Start"); //add action listener to startButton startButton.addActionListener(new startListener()); //create a stop button stopButton = new JButton("Stop"); //add action listener to stopButton stopButton.addActionListener(new stopListener()); //add start button to ButtonPanel ButtonPanel.add(startButton); //add stop button to ButtonPanel ButtonPanel.add(stopButton); //create elapsedPanel to hold elaped time JPanel ElspsedPanel = new JPanel(); //add start time to panel add.(timer.start()); //add stop time to panel add.(timer.stop()); //add the elapsed time to panel ElapsedPanel.add((timer.start())-(timer.stop())); //add the clockPanel and ButtonPanel to the frame add(clockPanel, BorderLayout.NORTH); add(ButtonPanel, BorderLayout.CENTER); add(ElapsedPanel, BorderLayout.SOUTH); } private class startListener implements ActionListener { public void actionPerformed(ActionEvent e) { //start clock time timer.start(); } } private class stopListener implements ActionListener { public void actionPerformed(ActionEvent e) { //stop clock time timer.stop(); } } private class TimerListener implements ActionListener { public void actionPerformed(ActionEvent e) { //set current time and paint clock to display current time clock.setCurrentTime(); clock.repaint(); } } //main method public static void main(String[] args) { //create a JFrame instance JFrame frame = new ClockAnimation(); //set title of the frame frame.setTitle("My Clock"); //set location of the frame to center frame.setLocationRelativeTo(null); //set frame to close on exit frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //set frame to visable frame.setVisible(true); //set components to fit in frame frame.pack(); } } public class ElapsedPanel { int startTime; double currentElapsedTime; double endElapsedTime; void start() { ElapsedPanel timer = null; timer.start(); startTime = (int) System.currentTimeMillis(); } void stop() { ElapsedPanel timer; timer.stop(); Object elapsedTime = getElapsedTime(); } void getElapsedTime() //Could be called apart from the stop() function to //get the elapsed time without stopping the timer { currentElapsedTime = (System.currentTimeMillis() - startTime)/1000; } String toStandardTime(double elapsedTime) { int hours = 0; int minutes = 0; int seconds = 0; String formattedTime; minutes = (int) t/60; seconds = (int) t%60; hours = (int) minutes/60; minutes = (int) minutes%60; formattedTime = hours + ":" + minutes + ":" + seconds; return formattedTime; } }

エラーがコメントの列などに発生しているため大変混乱しています。
どなたか間違った部分を修正していただけますでしょうか。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

エラーがコメントの列などに発生しているため大変混乱しています。

こんな曖昧な言い方では閲覧者にとっても何が何だかわかりません。つまりあなたの質問は提示されているコード以外から何も情報を得られません(あなたがどんなレベルの知識を持っていて、どんな疑問を生じているかが肝心ですがそれ以前の問題です)。せめてどの行で、どんなエラーメッセージが、いつ(コンパイル時もしくは実行時)発生するかと、それに対してあなたがわからない点具体的に記載するのが最低限のマナーです。

例えば「対象のソースコードだけでなく」以下のように「エラーの内容と自分の疑問点」を書くべきです。

$ javac ClockAnimation.java ClockAnimation.java:47: エラー: <identifier>がありません add.(timer.start()); ^

上のエラーメッセージが出るが、ここで識別子がないというエラーの意味がわからない

こう書いてあれば、閲覧者は見た途端「ピリオドが余分ですよ」というコメントをごく少ない手間で付けられます。


ところでここは例えばJavaの文法を知らないかも知れない質問者に対して文法を一から教えるような場ではありません。本サイトは初心者に比較的親切ですが、それでも右も左もわからないレベルの質問は可能な限り遠慮すべきでしょう。

あなたがまずすべきはJavaの基本文法を教科書などのテキストでしっかり学ぶことと思います。

投稿2017/05/09 23:35

KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問