卒業制作のため、「Java」を使用して簡単なアプリケーションを2,3個程度つくらなければならないのですが、私がプログラミング初心者ということもあり、制作が全く進んでいません。


しかも最終提出期限は明日正午(24日)であり、制作期間は本日(23日)しかありません。

教授からは私が初心者であることを考慮して頂き「入門書を購入するなどして、付属のサンプルに少し手を加える程度の物でも良いから。」と言われています。
ちなみに現在、高橋麻奈さん著書の「やさしいJava」という本を使用して勉強しています。

どうにか本日中にきちんと形になっている簡単なアプリケーションを2,3個制作して明日に提出したいと思っています。
プログラミング経験者の方に、具体的なアドバイス及びサンプルを提示して頂きたく思います。
無事に提出に至る資料をご提供して頂いた方には1000~3000pt程度をお渡しします。

どうか皆様のお力をお貸し下さいます様、よろしくお願い致します。

※制作に使用するプログラミング言語は「Java」のみとなります。
※提出期限が明日であることから「この本を一冊読めばいい」などという非現実的なアドバイスはご遠慮願います。

回答の条件
  • URL必須
  • 1人3回まで
  • 登録:2007/01/23 02:09:46
  • 終了:2007/01/30 02:10:15

回答(12件)

id:castiron No.1

castiron回答回数418ベストアンサー獲得回数302007/01/23 04:04:37

ポイント15pt

その本を読んだことがありませんがたぶん最初の方に

「HELLO WORLD!」とか表示させるプログラムが載っていると思います。

これの文字の部分を「私はyuki tigersです」などに書き換えてはいかがでしょう。

あとはたぶん数字の列を並び替えるというプログラムもあると思うのでこれを小さい順だったら大きい順に並べるのはどうでしょうか?

私は教育実習の時に作成したプログラムでよければメールアドレスを教えてくれれば送りますよ。(関数のグラフを表示するプログラムです)

特に難しいこともやっていないのでどうでしょう。

でもメールアドレスを公開するのって危険だよな。それで方法としてコメントに書き込みある程度時間がたったら削除する。

もう一つはどこかで捨てアドレスを取得して教えてくれても良いですよ。

一応今日は私も卒業研究で寝ないのでいつでもどうぞ

http://q.hatena.ne.jp/1169485782

id:yuki_tigers

ご回答ありがとうございます。説明不足かもしれませんでしたが、一応、卒業制作という小さくない課題ですので、入門書の勉強を一通り勉強した程度のプログラムをお願いします。さすがに、入門書の中の一番最初に出てくるようなプログラムは提出できません。

2007/01/23 18:14:18
id:ssbi No.2

ssbi回答回数178ベストアンサー獲得回数42007/01/23 04:46:48

ポイント15pt

http://www.vector.co.jp/soft/win95/prog/se109882.html

こんなソフト使っちゃうとか。

id:yuki_tigers

ソフトの使用方法を勉強している時間はありませんので、できればプログラムのソースファイルなどをご提示お願いします。

2007/01/23 18:18:49
id:lovelydustcart No.3

lovelydustcart回答回数21ベストアンサー獲得回数02007/01/23 09:01:53

ポイント14pt

このようなサイトも見つかりましたよ。

Javaソースサンプル

http://www.syns.net/12/index.html

JAVAのススメ > > JAVA サンプルコード集

http://amsoft.minidns.net/modules/chapox/content.php?lid=22

Perl・PHP・Javaによるプログラミングサンプル集

http://iwamode.net/tips/index.html

id:inokuni No.4

いのくに回答回数1343ベストアンサー獲得回数212007/01/23 05:46:17

ポイント14pt

http://www.h5.dion.ne.jp/~tuyano/JavaTutor/JavaTutor2.html

public class Test {

	 public static void main (String args []) {
	 	System.out.println ("Hello.");
	}
	
}

とメモ帳などのエディタに入力して、Test.java というファイル名で保存し、

javac Test.java

というコマンドでコンパイルし、

java Test

としてプログラムを実行すると

Hello.

と表示されるプログラムの完成です。

id:yuki_tigers

ご回答ありがとうございます。説明不足かもしれませんでしたが、一応、卒業制作という小さくない課題ですので、入門書の勉強を一通り勉強した程度のプログラムをお願いします。さすがに、入門書の中の一番最初に出てくるようなプログラムは提出できません。

2007/01/23 18:20:00
id:lovelydustcart No.5

lovelydustcart回答回数21ベストアンサー獲得回数02007/01/23 08:59:19

ポイント14pt

下記サイトでは如何でしょうか?

Java実用的サンプル提供

http://www1.linkclub.or.jp/~yukos/java/java.htm

id:lovelydustcart No.6

lovelydustcart回答回数21ベストアンサー獲得回数02007/01/23 09:03:44

ポイント14pt

『超図解 Java 入門 GUI編』という書籍のサンプルソースのようです。

http://www.x-media.co.jp/xbook/computer/JavagTY/sample.shtml

id:kazuyasakai No.7

kazuyasakai回答回数65ベストアンサー獲得回数12007/01/23 09:10:21

ポイント14pt

http://hatena.ne.jp/

ディジタル時計です。

だいぶ前に私が作ったやつです。

ファイル数は二つです。

パッケージ使ってるんでフォルダも作ってください。

ファイル1:Main.java

import gui.CrockWindow;

/**

* ディジタル時計

*

* @version 1.0

* @since jdk 1.4.2

*/

class Main {

public static void main(String[] args) {

CrockWindow w = new CrockWindow();

w.setVisible(true);

while (true) {

w.repaint();

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

ファイル2.CrockWindow.java

package gui;

import java.awt.*;

import java.awt.event.*;

import java.util.Calendar;

import javax.swing.JFrame;

/**

* 時間を表示するためのビジュアルクラス

*

* @version 1.0

* @since jdk 1.4.2

*/

public class CrockWindow extends JFrame {

/**

* コンストラクタ

*

*/

public CrockWindow() {

super("ディジタル時計");

this.setSize(500, 95); // サイズ設定

this.setResizable(false);

// イベントリスナ登録

this.addWindowListener(

new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

}

);

}

/**

* ペイント

*/

public void paint(Graphics g) {

super.paint(g);

Calendar c = Calendar.getInstance(); // カレンダーオブジェクトを取得

Insets is = getInsets();

g.setFont(new Font("時計", Font.BOLD, 30));

g.drawString(c.getTime().toString(), is.left * 3, is.top * 3);

}

}

id:yuki_tigers

試みましたが、

「Main.java:1 パッケージ gui は存在しません。」

等と表示され実行できませんでした。記載されてますパッケージというものの理解が無いためでしょうか?

初心者にも分かるように改めてご説明頂ければ嬉しいです。

また、このプログラムの説明も併せてご回答頂ければと思います。

2007/01/23 18:30:21
id:ttmmrr No.8

ttmmrr回答回数24ベストアンサー獲得回数12007/01/23 09:43:10

ポイント14pt

では、簡単なストップウォッチ。

ソースファイルは一つ。パッケージなし。

http://dummy

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

@SuppressWarnings("serial")

public class MyTimer extends JFrame implements ActionListener {

public static void main(String[] args) {

final MyTimer mt = new MyTimer();

mt.pack();

mt.setLocationRelativeTo(null);

mt.setVisible(true);

}

final Font _font = new Font("Monospaced", Font.BOLD, 64);

final JLabel _label = new JLabel("0:00.0");

final Timer _timer;

long _startAt;

public MyTimer() {

super();

_timer = new Timer(100, this);

setDefaultCloseOperation(EXIT_ON_CLOSE);

final Container cpane = getContentPane();

cpane.setLayout(new BorderLayout());

_label.setFont(_font);

_label.setHorizontalAlignment(SwingConstants.RIGHT);

cpane.add(_label, BorderLayout.CENTER);

final JToggleButton btn = new JToggleButton("START");

btn.addActionListener(new ActionListener() {

public void actionPerformed(final ActionEvent e) {

if (btn.isSelected()) {

btn.setText("STOP");

start();

} else {

btn.setText("START");

stop();

}

}

});

cpane.add(btn, BorderLayout.SOUTH);

}

void start() {

_startAt = System.currentTimeMillis();

_timer.start();

}

void stop() {

_timer.stop();

}

private static String zero(final long v, final int n) {

final String s = String.valueOf(v);

final StringBuilder rtn = new StringBuilder();

final int left = n - s.length();

while (rtn.length() < left) {

rtn.append('0');

}

rtn.append(s);

return rtn.toString();

}

private String format(final long l) {

final long d = (l - _startAt) / 1000;

final long d2 = ((l - _startAt) / 10) % 10;

final long min = d / 60;

final long sec = d % 60;

final String text = min + ":" + zero(sec, 2);

final String x = zero(d2, 1);

return text + "." + x;

}

public void actionPerformed(final ActionEvent e) {

_label.setText(format(System.currentTimeMillis()));

}

}

id:yuki_tigers

ご回答ありがとうございます。実行できましたが、約6秒ごとにカウントされる一番右の数字は一体何でしょうか?

教授にもこのプログラムについて説明しなければなりませんので、その辺もご考慮頂いて改めてご回答して頂ければ嬉しいです。お待ちしております。

2007/01/23 18:24:26
id:inokuni No.9

いのくに回答回数1343ベストアンサー獲得回数212007/01/23 18:31:01

ポイント14pt

アナログ時計

ソース http://marco.s4.xrea.com/java/tokei/tokei2.java

サンプル http://marco.s4.xrea.com/java/tokei/tokei2.html

// -----------------------------------------------------
//   tokei2.java  アナログ時計
//                               2002.09.05   MARCO
//                          edit 2002.09.05   MARCO
//
// -----------------------------------------------------

import java.awt.*;
import java.util.*;

public class tokei2 extends java.applet.Applet implements Runnable {
	Thread kicker = null;     // アニメーションのためのスレッド変数
	int hour,min,sec;

 	public void init() {
 	}

 	public void start() {
 		/* スレッドを実行させる */
 		kicker=new Thread(this);        
 		kicker.start();                 
 	}

 	public void stop() {
 		/* スレッドを止める */
 		kicker = null;
 	}

 	public void run() {
 		/* 実行中のスレッドをチェック */
 		Thread thisThread = Thread.currentThread();

		Calendar calendar = new GregorianCalendar();

 		/* ずっと繰り返し */
 		while( kicker == thisThread) { 

			Date NowTime = new Date();
			calendar.setTime(NowTime);
			hour=calendar.get(Calendar.HOUR_OF_DAY);
			min=calendar.get(Calendar.MINUTE);
			sec=calendar.get(Calendar.SECOND);
			/* 再描画 */
			repaint();

	 		try {
	 			/* スレッドのお休み時間=表示時間の設定 */
	 			thisThread.sleep(200);
 			} catch (InterruptedException e){}

		}
 	}

 	public void paint(Graphics g) {
 		update(g);
 	}

 	public void update(Graphics g) {
		g.setColor(Color.white);
		g.fillRect(0,0,140,140);
		g.setColor(Color.blue);
		g.drawString("[ " + hour + ":" + min + ":" + sec + " ]" , 40, 10);

	    g.setColor(Color.yellow);
		g.fillOval(20,20,100,100);

	    g.setColor(Color.black);
		double hra = 2 * Math.PI * (hour + min/60.0) / 12.0;
		int hx = (int)(70 + 30 * Math.sin(hra));
		int hy = (int)(70 - 30 * Math.cos(hra));
		g.drawLine(70,70,hx,hy);

	    g.setColor(Color.blue);
		double mra = 2 * Math.PI * min / 60.0;
		int mx = (int)(70 + 40 * Math.sin(mra));
		int my = (int)(70 - 40 * Math.cos(mra));
 		g.drawLine(70,70,mx,my);

		g.setColor(Color.red);
 		double sra = 2 * Math.PI * sec / 60.0;
 		int sx = (int)(70 + 45 * Math.sin(sra));
 		int sy = (int)(70 - 45 * Math.cos(sra));
 		g.drawLine(70,70,sx,sy);

 	}

}

電卓

ソース http://marco.s4.xrea.com/java/test/culc2.java

サンプル http://marco.s4.xrea.com/java/test/culc2.html

// culc2.java  電卓プログラム
//                    2002.03.20
//               edit 2002.03.20 MARCO

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class culc2 extends JApplet implements ActionListener{
	JLabel l1;
	JButton b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,ba,bb,bc,bd,bp,bx;
	JPanel p1;
	double s1,s2;
	int fl1,fl2,fl3;

	public void init(){
		s1=0;
		s2=0;
		fl1=0;
		fl3=0;
		l1=new JLabel("0");
		l1.setHorizontalAlignment(SwingConstants.RIGHT);
		b0=new JButton("0");
		b1=new JButton("1");
		b2=new JButton("2");
		b3=new JButton("3");
		b4=new JButton("4");
		b5=new JButton("5");
		b6=new JButton("6");
		b7=new JButton("7");
		b8=new JButton("8");
		b9=new JButton("9");
		ba=new JButton("+");
		bb=new JButton("-");
		bc=new JButton("*");
		bd=new JButton("/");
		bp=new JButton("=");
		bx=new JButton("C");
		b0.addActionListener(this);
		b1.addActionListener(this);
		b2.addActionListener(this);
		b3.addActionListener(this);
		b4.addActionListener(this);
		b5.addActionListener(this);
		b6.addActionListener(this);
		b7.addActionListener(this);
		b8.addActionListener(this);
		b9.addActionListener(this);
		ba.addActionListener(this);
		bb.addActionListener(this);
		bc.addActionListener(this);
		bd.addActionListener(this);
		bp.addActionListener(this);
		bx.addActionListener(this);
		p1=new JPanel();
		p1.setLayout(new GridLayout(4,4));
		p1.add(b7);
		p1.add(b8);
		p1.add(b9);
		p1.add(bd);
		p1.add(b4);
		p1.add(b5);
		p1.add(b6);
		p1.add(bc);
		p1.add(b1);
		p1.add(b2);
		p1.add(b3);
		p1.add(bb);
		p1.add(b0);
		p1.add(bp);
		p1.add(bx);
		p1.add(ba);
		Container c=getContentPane();
		c.setLayout(new BorderLayout());
		c.add("Center",p1);
		c.add("North",l1);
	}

	public void actionPerformed(ActionEvent e){
		fl2=0;
		if(e.getSource()==b0){
			s1=s1*10;
		}
		else if(e.getSource()==b1){
			s1=s1*10+1;
		}
		else if(e.getSource()==b2){
			s1=s1*10+2;
		}
		else if(e.getSource()==b3){
			s1=s1*10+3;
		}
		else if(e.getSource()==b4){
			s1=s1*10+4;
		}
		else if(e.getSource()==b5){
			s1=s1*10+5;
		}
		else if(e.getSource()==b6){
			s1=s1*10+6;
		}
		else if(e.getSource()==b7){
			s1=s1*10+7;
		}
		else if(e.getSource()==b8){
			s1=s1*10+8;
		}
		else if(e.getSource()==b9){
			s1=s1*10+9;
		}
		else if(e.getSource()==bx){
			s2=0;
			s1=0;
			fl1=0;
			fl3=0;
		}
		else if(e.getSource()==ba){
			keisan();
			fl1=1;
			fl2=1;
			fl3=1;
			s1=0;
		}
		else if(e.getSource()==bb){
			keisan();
			fl1=2;
			fl2=1;
			fl3=1;
			s1=0;
		}
		else if(e.getSource()==bc){
			keisan();
			fl1=3;
			fl2=1;
			fl3=1;
			s1=0;
		}
		else if(e.getSource()==bd){
			keisan();
			fl1=4;
			fl2=1;
			fl3=1;
			s1=0;
		}
		else if(e.getSource()==bp){
			keisan();
			s1=0;
			fl2=1;
		}

		if(fl2==0){
			l1.setText(Double.toString(s1));
		}
		else{
			l1.setText(Double.toString(s2));
		}
	}

	public void keisan(){
		if(fl3==0){
			s2=s1;
		}
		else if(fl1==1){
			s2=s2+s1;
		}
		else if(fl1==2){
			s2=s2-s1;
		}
		else if(fl1==3){
			s2=s2*s1;
		}
		else if(fl1==4){
			s2=s2/s1;
		}
	}

}
id:yuki_tigers

試みましたが、

「Exception in thread "main" java.lang.NoSuchMethodError: main」

と表示され共に実行できませんでした。

初心者にも分かるように改めてご説明頂ければ嬉しいです。

また、このプログラムの説明も併せてご回答頂ければと思います。

2007/01/23 21:34:33
id:ttmmrr No.10

ttmmrr回答回数24ベストアンサー獲得回数12007/01/23 18:52:32

ポイント14pt

http://dummy

8: ttmmrrです。

> 約6秒ごとにカウントされる一番右の数字は一体何でしょうか?

たとえば、

0:34.5

の場合の「.5」の事ですね!?

1/10秒のつもりです。

PCの処理能力によっては、とぎれとぎれに見えるのかも知れないです。

id:kazuyasakai No.11

kazuyasakai回答回数65ベストアンサー獲得回数12007/01/23 19:51:41

ポイント14pt

7で投稿したディジタル時計の説明です。

Main.javaがあるフォルダにguiというフォルダを作って、その中にCrockWindow.javaを入れてください。

ですから、ファイル構造は、

ファイル1:Main.java

ファイル2:gui/CrockWindow.java

という具合になります。

まず、CrockWindow.javaファイルから説明します。

コンストラクタの部分ですが、this.setResizable(false);はアプリケーションのウィンドウサイズを変更できないようにしています。

”// イベントリスナ登録”という部分のコードは、ウィンドウの右上にある閉じるボタンが押されれば、アプリケーションを終了するためです。これが無ければアプリケーションは強制終了でもしない限り一生起動したままです。

で、ペイントの部分がウィンドウに時間を表示する部分です。

CalendarクラスはJavaが提供しているクラスで、指導教授には「これを使えば時間が取得できる」と説明すれば十分でしょう。

Insets オブジェクトはコンテナの境界を表現したものです。

要するに、ウィンドウのエッジ(端)に残す空間を指定できるものです。

ウィンドウのどの場所に文字を表示するときに使うだけです。

g.setFont(new Font("時計", Font.BOLD, 30));はフォントを縁こうしているだけです。

g.drawString(c.getTime().toString(), is.left * 3, is.top * 3);が時間を表示させている部分です。

”c.getTime().toString()”で時間を表示させて、”is.left * 3”と” is.top * 3”は文字を表示させる場所です。

次に、Main.javaファイルの説明です。

w.setVisible(true);はウィンドウを表示させるためのメソッドです。

次にWhile文がありますよね。

w.repaint();というメソッドで、ウィンドウを再描写します。このときに現在の時間が書かれた文字も再描写されます。

Thread.sleep(1000);の部分は1秒間待つという意味です。

したがって、While文の中身は一秒間ごとに実行されます。

ウィンドウは一秒間ごとに描写され、現在の時間が表示されます。

http://hatena.ne.jp/

id:castiron No.12

castiron回答回数418ベストアンサー獲得回数302007/01/24 07:17:00

ポイント14pt

//関数の平行移動表示プログラムhttp://q.hatena.ne.jp/1169485782

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.event.*;

import java.math.BigDecimal;

public class CreateGraph {

JLabel accountlab;

JButton drawbutton;

Dimension d;// 画面の大きさ

double moveX,moveY,moveA;//移動させる距離(x,y)

double coe2,coe1,coe0;

GraphDrawPanel gdp;

int drawflag;

int graphX,graphY;//グラフの大きさ

//式入力用テキストフィールド

JTextField transXget,transYget,transAget,coe2get,coe1get,coe0get;

//フォント

Font font;

//式書き換え用フラグ

boolean transflag,coeflag;

//二次関数フラグ

boolean dimension2;

double xx,yy;

int gx,gy;

//頂点の座標を表示するラベル

JLabel cox,coy;

int nx,ny;

CreateGraph(){

//画面のサイズを得る

Toolkit tk = Toolkit.getDefaultToolkit();

d = tk.getScreenSize();

coe2=1;

coe1=coe0=0;

moveA=1;

moveX=moveY=0;

drawflag=0;

graphX=550;//550

graphY=670;//800

//表示する文字のフォントの設定

font = new Font("serif", 100, 20);

transflag=coeflag=false;

dimension2=true;

nx=ny=0;

}

public static void main(String[] args) {

CreateGraph CG = new CreateGraph();

CG.go();

}

public void go(){

//フレームの生成

JFrame jf=new JFrame("グラフ描画");

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//グラフを描画するパネル

JPanel drawpanel=new JPanel();

drawpanel.setPreferredSize(new Dimension(graphX,graphY));

gdp=new GraphDrawPanel();

gdp.setSize(graphX,graphY);

gdp.setBackground(Color.BLACK);//WHITE);

drawpanel.add(gdp);

//操作するためのパネル

JPanel operatepanel=new JPanel();

operatepanel.setLayout(new FlowLayout());

//表示するグラフの式の設定(平方完成)

JLabel formula1=new JLabel("(x-");

formula1.setFont(font);

JLabel formula2=new JLabel(")^2+");

formula2.setFont(font);

transAget = new JTextField(Double.toString(moveA), 3);

transAget.setFont(font);

transAget.setHorizontalAlignment(JTextField.CENTER);

transAget.getDocument().addDocumentListener(new transAListener());

transAget.addFocusListener(new TabFocus());

transXget = new JTextField(Double.toString(moveX), 3);

transXget.setFont(font);

transXget.setHorizontalAlignment(JTextField.CENTER);

transXget.getDocument().addDocumentListener(new transXListener());

transXget.addFocusListener(new TabFocus());

transYget = new JTextField(Double.toString(moveY), 3);

transYget.addFocusListener(new TabFocus());

transYget.setFont(font);

transYget.setHorizontalAlignment(JTextField.CENTER);

transYget.getDocument().addDocumentListener(new transYListener());

operatepanel.add(transAget);

operatepanel.add(formula1);

operatepanel.add(transXget);

operatepanel.add(formula2);

operatepanel.add(transYget);

//描画を開始するためのボタン

drawbutton=new JButton("描画");

drawbutton.setFont(font);

drawbutton.addActionListener(new drawbuttonActionListener());

drawbutton.addKeyListener(new drawbuttonKeyListener());

operatepanel.add(drawbutton);

//表示するグラフの式の設定

JLabel formula3=new JLabel("x^2+");

formula3.setFont(font);

JLabel formula4=new JLabel("x+");

formula4.setFont(font);

coe2get = new JTextField(Double.toString(coe2), 3);

coe2get.setFont(font);

coe2get.setHorizontalAlignment(JTextField.CENTER);

coe2get.addFocusListener(new TabFocus());

coe2get.getDocument().addDocumentListener(new coe2Listener());

coe1get = new JTextField(Double.toString(coe1), 3);

coe1get.setFont(font);

coe1get.setHorizontalAlignment(JTextField.LEADING);

coe1get.addFocusListener(new TabFocus());

coe1get.getDocument().addDocumentListener(new coe1Listener());

coe0get = new JTextField(Double.toString(coe0), 3);

coe0get.setFont(font);

coe0get.setHorizontalAlignment(JTextField.CENTER);

coe0get.addFocusListener(new TabFocus());

coe0get.getDocument().addDocumentListener(new coe0Listener());

operatepanel.add(coe2get);

operatepanel.add(formula3);

operatepanel.add(coe1get);

operatepanel.add(formula4);

operatepanel.add(coe0get);

JLabel l1=new JLabel("(");

cox=new JLabel("0");

JLabel l2=new JLabel(",");

coy=new JLabel("0");

JLabel l3=new JLabel(")");

l1.setFont(font);

cox.setFont(font);

l2.setFont(font);

coy.setFont(font);

l3.setFont(font);

operatepanel.add(l1);

operatepanel.add(cox);

operatepanel.add(l2);

operatepanel.add(coy);

operatepanel.add(l3);

// メインパネルの作成

JPanel mainpanel=new JPanel();

mainpanel.setLayout(new BoxLayout(mainpanel, BoxLayout.Y_AXIS));

mainpanel.add(drawpanel);

mainpanel.add(operatepanel);

jf.getContentPane().add(mainpanel);

jf.getRootPane().setDefaultButton(drawbutton);

jf.setPreferredSize(new Dimension(d.width-5, d.height));

jf.pack();

jf.setVisible(true);

}

class drawbuttonActionListener implements ActionListener, Runnable{

public void actionPerformed(ActionEvent ev) {

new Thread(this).start();

}

public void run(){

xx=yy=gx=gy=nx=ny=0;

moveA=Double.parseDouble(transAget.getText().toString());

moveX=Double.parseDouble(transXget.getText().toString());

moveY=Double.parseDouble(transYget.getText().toString());

gdp.repaint();

for(;gx<Math.abs(moveX)*10;gx++){</p>

gdp.repaint();

if(moveX>0)xx+=0.1;

else xx-=0.1;

nx++;

try{

Thread.sleep(100);

}catch(Exception ex){}

}

if(moveX!=0)gx--;

for(;gy<Math.abs(moveY)*10;gy++){</p>

gdp.repaint();

if(moveY>0)yy+=0.1;

else yy-=0.1;

ny++;

try{

Thread.sleep(100);

}catch(Exception ex){}

}

}

}

class drawbuttonKeyListener extends KeyAdapter{

public void keyPressed(KeyEvent ke) {

if (ke.getKeyCode() == KeyEvent.VK_ENTER) {

drawbutton.doClick();

}

}

}

class TabFocus extends FocusAdapter{

public void focusGained(FocusEvent fe){

((JTextField)fe.getSource()).selectAll();

}

}

class transAListener implements DocumentListener{

public void changedUpdate(DocumentEvent de){

}

public void insertUpdate(DocumentEvent de){

transflag=true;

if(!coeflag){

try{

double numa=Double.parseDouble(transAget.getText().toString());

double numx=Double.parseDouble(transXget.getText().toString());

double numy=Double.parseDouble(transYget.getText().toString());

coe2=numa;

coe1=-numa*2*numx;

coe0=(numa*(numx*numx))+numy;

if(numa==0)dimension2=false;

else dimension2=true;

coe2get.setText(Double.toString(coe2));

coe1get.setText(Double.toString(coe1));

coe0get.setText(Double.toString(coe0));

}catch(NumberFormatException nfe){}

}

transflag=false;

}

public void removeUpdate(DocumentEvent de){

}

}

class transXListener implements DocumentListener{

public void changedUpdate(DocumentEvent de){

}

public void insertUpdate(DocumentEvent de){

transflag=true;

if(!coeflag){

try{//if(!transXget.getText().toString().equals("-")){

double numa=Double.parseDouble(transAget.getText().toString());

double numx=Double.parseDouble(transXget.getText().toString());

double numy=Double.parseDouble(transYget.getText().toString());

coe1=-numa*2*numx;

coe0=(numa*(numx*numx))+numy;

coe1get.setText(Double.toString(coe1));

coe0get.setText(Double.toString(coe0));

}catch(NumberFormatException nfe){}

}

transflag=false;

}

public void removeUpdate(DocumentEvent de){

}

}

class transYListener implements DocumentListener{

public void changedUpdate(DocumentEvent de){

}

public void insertUpdate(DocumentEvent de){

transflag=true;

if(!coeflag){

try{//if(!transYget.getText().toString().equals("-")){

double numa=Double.parseDouble(transAget.getText().toString());

double numx=Double.parseDouble(transXget.getText().toString());

double numy=Double.parseDouble(transYget.getText().toString());

coe0=numy-numx*numx*numa;

coe0get.setText(Double.toString(coe0));

}catch(NumberFormatException nfe){}

}

transflag=false;

}

public void removeUpdate(DocumentEvent de){

}

}

class coe2Listener implements DocumentListener{

public void changedUpdate(DocumentEvent de){

}

public void insertUpdate(DocumentEvent de){

coeflag=true;

if(!transflag){

try{

double a=Double.parseDouble(coe2get.getText().toString());

double b=Double.parseDouble(coe1get.getText().toString());

double c=Double.parseDouble(coe0get.getText().toString());

moveA=a;

moveX=-b/(2*a);

moveY=-(b*b-4*a*c)/(4*a);

if(a==0)dimension2=false;

else dimension2=true;

transAget.setText(Double.toString(moveA));

transXget.setText(Double.toString(moveX));

transYget.setText(Double.toString(moveY));

}catch(NumberFormatException nfe){}

}

coeflag=false;

}

public void removeUpdate(DocumentEvent de){

}

}

class coe1Listener implements DocumentListener{

public void changedUpdate(DocumentEvent de){

}

public void insertUpdate(DocumentEvent de){

coeflag=true;

if(!transflag){

try{//if(!coe1get.getText().toString().equals("-")){

double a=Double.parseDouble(coe2get.getText().toString());

double b=Double.parseDouble(coe1get.getText().toString());

double c=Double.parseDouble(coe0get.getText().toString());

if(dimension2){

moveX=-b/(2*a);

moveY=-(b*b-4*a*c)/(4*a);

transXget.setText(Double.toString(moveX));

transYget.setText(Double.toString(moveY));

}

else{

transXget.setText("0");

transYget.setText("0");

coe1=b;coe0=c;

}

}catch(NumberFormatException nfe){}

}

coeflag=false;

}

public void removeUpdate(DocumentEvent de){

}

}

class coe0Listener implements DocumentListener{

public void changedUpdate(DocumentEvent de){

}

public void insertUpdate(DocumentEvent de){

coeflag=true;

if(!transflag){

try{//if(!coe0get.getText().toString().equals("-")){

double a=Double.parseDouble(coe2get.getText().toString());

double b=Double.parseDouble(coe1get.getText().toString());

double c=Double.parseDouble(coe0get.getText().toString());

if(dimension2){

moveY=-(b*b-4*a*c)/(4*a);

transYget.setText(Double.toString(moveY));

}else{

transYget.setText("0");

coe0=c;

}

}catch(NumberFormatException nfe){}

}

coeflag=false;

}

public void removeUpdate(DocumentEvent de){

}

}

class GraphDrawPanel extends Canvas{

public void paint(Graphics g){

int i;

int x,y;//描画のx、y座標

//キャンバスのサイズを取得

Dimension d=getSize();

//補助線の描画

g.setColor(Color.LIGHT_GRAY);

for(i=0;i<11;i++){

g.drawLine(d.width/22+d.width/22*i*2-1,0,d.width/22+d.width/22*i*2-1,d.height-1);

}

for(i=0;i<16;i++){

g.drawLine(0,(int)(d.height/32+d.height/26.8*i*2+16),d.width-1,(int)(d.height/32+d.height/26.8*i*2+16));

}

g.setColor(Color.WHITE);//BLACK);

//枠の描画

g.drawRect(0,0,d.width-1,d.height-1);

//x軸

for(i=-1;i<2;i++){

g.drawLine(0,d.height/5*4+i,d.width-1,d.height/5*4+i);

}

//Y軸

for(i=-2;i<1;i++){

g.drawLine(d.width/2-i,0,d.width/2-i,d.height-1);

}

//グラフの描画

x=y=0;

if(drawflag!=0){

if(dimension2){

Draw_Parabola(g,xx,yy,d,Color.BLUE,moveA);

Draw_Parabola(g,0,0,d,Color.WHITE,moveA);

if(moveX==0)cox.setText("0.0");

else {BigDecimal bdx = new BigDecimal(String.valueOf(Math.abs(moveX)/10*nx/Math.abs(moveX)));

double a=bdx.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();

if(moveX>0) cox.setText(Double.toString(a));

else cox.setText(Double.toString(a*(-1)));

}

if(moveY==0)coy.setText("0.0");

/* else*///coy.setText(Double.toString(moveY/10*ny));

else{

BigDecimal bdy = new BigDecimal(String.valueOf(Math.abs(moveY)/10*ny/Math.abs(moveY)));

double b=bdy.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();

if(moveY>0)coy.setText(Double.toString(b));

else coy.setText(Double.toString(b*(-1)));

}

if(moveX!=0&&moveY!=0){

if(gx>=Math.abs(moveX)*10-1){

Draw_Parabola(g,moveX,0,d,Color.GREEN,moveA);}

if(gy==Math.abs(moveY)*10-1){

Draw_Parabola(g,moveX,moveY,d,Color.YELLOW,moveA);}

}

else if(moveX!=0){

if(gx>=Math.abs(moveX)*10-1)Draw_Parabola(g,moveX,0,d,Color.GREEN,moveA);

}

else if(moveY!=0){

if(gy==Math.abs(moveY)*10-1)Draw_Parabola(g,0,moveY,d,Color.YELLOW,moveA);

}

}else{

for(i=0;i<graphX;i++){</p>

x++;y=(int)(graphY/5*4+graphX/2*coe1-x*coe1-d.height/26.8*coe0*2);

g.fillOval(x,y,5,5);

try{

Thread.sleep(2);

}catch(Exception ex){}

}

}

}

drawflag++;

}

}

public void Draw_Parabola(Graphics g,double transX,double transY,

Dimension d,Color c,double coe2){

int x,y;//描画のx、y座標

x=y=0;

for(int i=0;i<graphX;i++){</p>

x++;y=graphY/5*4-2-(int)((x-graphX/2)*(x-graphX/2)*0.0197*coe2);

g.setColor(c);

g.fillOval((int)(x+d.width/22*transX*2-1),(int)(y-(d.height/26.8*transY*2)),5,5);

/* try{

Thread.sleep(2);

}catch(Exception ex){}*/

}

}

}

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません