度々質問します。

ブラウザに表示させたイメージ画像(JPEG)を印刷した所、印刷できま
せんでした。
ちょうど他の方も印刷が出来ないと言うことで、ご質問されていまして、
参考になるURLにジャンプして色々見たのですが、正直よくわかりません。
本にもちょうど載っていたのですが、的外れな事が書かれているため、
参考にもなりません。

以下のソースは最初にA1.jpgを表示させ、その後「画像を変更」ボタンを
押すとB2.jpgに画像が変更されるものです。
やりたいのは、ボタンをもう一つ(印刷ボタン)追加して、そのボタンが
押された時に画像が印刷されるようにしたいんです。
基本的に画像のみを印刷したいと言う単純明快な形にしたいんです。

それで出来たらバカにでもわかるくらい簡単に書いていただけると助かります。

お手数ですがよろしくお願いします。


import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.lang.*;

public class Sample extends Applet
{
Button Henko;
Image image;
Color bgcolor;
Font font;

public void init()
{
setLayout(null);
bgcolor = new Color(240,248,255);
setBackground(bgcolor);
setForeground(Color.black);
font = new Font("Serif",Font.PLAIN,18);

image = getImage(getDocumentBase(),"A1.jpg");

Henko = new Button("画像を変更");
Henko.setFont(font);
Henko.setBounds(20,100,140,30);
add(Henko);

Henko.addActionListener(new Gazohenko());
}
public void paint(Graphics g){
g.drawImage(image,150,150,this);
}

public class Gazohenko implements ActionListener{
public void actionPerformed(ActionEvent e){
image = getImage(getDocumentBase(), "B2.jpg");
repaint();
}
}
}

このQ&Aに関連する最新のQ&A

A 回答 (3件)

>実行しても全く無反応です。


>何がいけないんでしょうか?
>印刷のメソッドを記述したのに、印刷が出来ません。
とのことですが、どこまで上手く行って、どこで上手く行っていないのか位は分かりませんか?

デバッガの出力とか、JavaConsoleとか。ついでに環境も教えてください。

この回答への補足

基本的に処理事態はうまく流れています。どこかで止まってはないみたいです。
メインのプログラムにはボタンが二つあります。「データ表示」と「印刷」です。
二つのボタンは押された後の処理はほぼ同じです。「データ表示」は取得した
データと画像をフレームに表示する。「印刷」はデータ表示ボタンと同じく、
取得したデータと画像をフレームに表示させ、印刷し、その後フレームを閉じ
ると言う流れです。
今まででもプログラム中にどこかいけない所があると、そこを基点にプログラ
ムが一切動かないのですが、このプログラムはきちんと処理が流れます。
ただ印刷がされません。
つまり印刷ボタンを押し、フレームが一瞬表示され、その後フレームが閉じます。
その間の印刷と言うイベントが発生しません。
「if(printjob != null){」というIf文をコメントにして必ず印刷メソッドが
流れるようにしてもだめでした。


それでデバッグをやってみたのですが、今までやった事ないので、本を見な
がらやっていたのですが、全く意味がわからず、何が動いているのかが見え
ないです。
その為、どこがいけないのか?などの調査が出来ません。
とりあえず使い方をこれから色々探してみたいと思います。

それで以下のものはJAVAコンソールです。
一通り実行してみました。正直よく意味がわかりません。
これで何かわかるのでしょうか?
==============================================
? ヘルプ
c クリア
f ファイナライザの実行
g ガーベジ収集
m メモリ使用状況
q 終了
t スレッド一覧 list
==============================================
f実行
終了しています... 完了

g実行
ガーベジを収集しています... 完了

t実行
重要性 5 AWT-EventQueue-0
重要性 5 AWT-Windows
重要性 5 main
重要性 6 thread applet-fuji.class
重要性 6 TaskManager notify thread
重要性 6 Global Task Manager Thread #0
重要性 6 Global Task Manager Thread #1
※補足に書いたソースではSampleでしたが、実際記述している
 プログラム名はfujiです。


環境ですが、的外れかもしれませんがとりあえず一通り書きます。
OS Win95
IE Ver5.5
JDK Ver1.3
開発ソフト 特に使用していません。エディターでプログラムを記述

お手数ですがよろしくお願いします。

補足日時:2001/03/15 09:55
    • good
    • 0
この回答へのお礼

色々やりましが、結局出来ませんでした。

やり方を変えて、ブラウザから印刷できるようJavaScriptでやることに
しました。
色々ご迷惑をおかけしました。そしてありがとうございました。

お礼日時:2001/03/15 14:14

ちょっと調べてみたら不可能ではないらしいです。


参考URLから「印刷 - print」を探してください。

http://java-house.etl.go.jp/ml/archive/j-h-b/019 …

が直接的かな。。。

参考URL:http://java-house.etl.go.jp/ml/topics/

この回答への補足

教えていただいたURLにジャンプして、それと同じような感じで、
フレームの中にソースを記述しました。
それで無事コンパイルも出来ましたが、実行しても全く無反応です。
何がいけないんでしょうか?
印刷のメソッドを記述したのに、印刷が出来ません。

class Frame extends Frame{
public Frame(){
super("Print");

PrintJob printjob = getToolkit().getPrintJob(this,"Print", null);
if(printjob != null){
Graphics g = printjob.getGraphics();
this.printAll(g);
g.dispose();
printjob.end();
System.exit(0);
}
}
public void paint(Graphics g){
g.drawImage(image,50,250,this);
}
}

補足日時:2001/03/14 15:29
    • good
    • 0

そもそも、アプレットから(画像に限らず)印刷ってできるのでしょうかね?



アプレットってセキュリティ面で「危険かもしれないものは禁止する」という方針をとっていたと思います。ローカルファイルにアクセスできないのもそのためです。アプレットがプリンタにアクセスできると、ひたすらデータを送り続けてマシンをアップアップさせるアプレットを作ることも可能になりそうなので、先の方針からすると禁止されていても不思議じゃないように思います。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qimport java.applet.Applet;について

ソースの先頭にimport java.applet.Applet;と書かれたソースをコンパイルすると、ローカルのjava.applet.Appletを読み込んで*.classを作るのだと思うのですが、java.applet.Appletが見つかりません。
普通はどのあたりにあるのでしょうか?

Aベストアンサー

java.applet.AppletクラスはJavaの実行環境(JRE)、またはJavaの開発環境(J2SE)のライブラリとして標準でインストールされています。

具体的には、下記のディレクトリの"rt.jar"に含まれています。(Windowsの場合)

■JRE
 C:\Program Files\Java\<Javaのバージョン>\lib

■J2SE (C:\j2sdk1.4.2にインストールした場合)
 C:\j2sdk1.4.2\jre\lib

通常は、コンパイル時には上記のJ2SE側の rt.jar を使ってコンパイルされるので java.applet.Appletクラスの存在を意識しなくても良いです。
また、実行時には上記のJRE側の rt.jar が使用されます。

ですから、コンパイル時、あるいは実行時にそれぞれのディレクトリに rt.jar がないとエラーが発生します。

ちなみに rt.jar の中身を確認したいのであれば、下記のコマンドをコマンドプロンプトから実行し、出力先のファイルをテキストエディタで開くと確認できます。

 cd C:\j2sdk\jre\lib   ← ディレクトリ移動

 jar tvf rt.jar > C:\Temp\result.txt ← rt.jarの中身をテキストファイルに出力

 notepad C:\Temp\result.txt   ← メモ帳で出力結果を表示


 出力結果のファイルには、java.applet.Appletであれば "java/applet/Applet" のように "." が "/" に置き換わって出力されています。

java.applet.AppletクラスはJavaの実行環境(JRE)、またはJavaの開発環境(J2SE)のライブラリとして標準でインストールされています。

具体的には、下記のディレクトリの"rt.jar"に含まれています。(Windowsの場合)

■JRE
 C:\Program Files\Java\<Javaのバージョン>\lib

■J2SE (C:\j2sdk1.4.2にインストールした場合)
 C:\j2sdk1.4.2\jre\lib

通常は、コンパイル時には上記のJ2SE側の rt.jar を使ってコンパイルされるので java.applet.Appletクラスの存在を意識しなくても良いです。
また、実行時...続きを読む

QAppletのpublic void paint(Graphics g)

は抽象クラスのGraphicsのオブジェクトを引数に持ちますが抽象クラスはオブジェクトを発生できないのに何故オブジェクトを渡せるのでしょうか?

Aベストアンサー

実際にパラメータとして渡されるのは、Graphicsのサブクラスのインスタンスだからです。

Graphics クラスは抽象クラスですが、そのサブクラスは抽象クラスとは限りません。

QInteger.parseInt()について public static void main(String[] args) { int a =

初歩的な質問だと思うのですが、、、

public class TestTree {

public static void main(String[] args) {

int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);

GreatTree myTree = new GreatTree(a, b);
myTree.makeTree();
myTree.makeGround();
}

}

というプログラムについて、Integer.parseInt()はどういう意味を持つのかがわかりません。ただ適当につけた名前だとは思えないです。教えてもらえたら幸いです。お願いします。

Aベストアンサー

> argsで入力されたものは例え数字でも文字列として扱われているから、それをintにしている。ということですよね?

引数として (String[] args) と設定されていますので、
おっしゃるとおり 引数 args[]配列に入っているものは、文字列です。

ポイントは、 「String[]」でしょうか。。

Qclass Test_A {  main(){}}の実行順序は?

public class Test_A {
public static void main(){

int a = 0;
int b = 1;

}
}
例えば上のようなサンプルで何故 main()がクラスTest_A の中に挟まっているのでしょうか?実行順序としては main()が終了したら、クラスTest_A の方はどうなるのでしょうか? main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。よろしくお願いします。 

Aベストアンサー

>main()がクラスTest_A の中に挟まっているのでしょうか

Javaは、全てのプロパティ、メソッドはどこかのクラスに属していないといけないからです。
mainメソッドであっても例外ではありません。

>main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。

これを考える上で最も重要なのはmainメソッドがstaticであることです。
staticなメソッドは、そのクラスのインスタンスを作らなくても、
つまり、new Test_A();としなくても実行することが可能です。
プログラム実行時には、Test_Aクラスのインスタンスは生成されません。
質問のコードでは変数a,bに値が代入され、それで終わりです。

Javaでは、(正確にはJavaVMは)実行するclassファイルにある、
String[]引数を持ったvoid mainメソッドを実行する仕様になっています。
しかし、mainメソッドを実行するときには何のインスタンスも生成されていないので、
何かのインスタンスのメソッドを実行することはできません。
なので、staticなメソッドでないとJavaVMが実行できないのです。
さらに、JavaVMからアクセス可能なスコープを与える必要があるので、
publicである必要もあるのです。

あとは、そのmainメソッドに指定されたコードを実行し、mainメソッドの最後まで処理が進んだら
そこでJavaVMが終了し、プログラムも終了します。

※細かい話ですが、main()からプログラムは始まりません。
正確に言うと、引数なしのmain()メソッドは他のメソッドと何ら代わりがありません。
プログラムを始めるには、
アクセススコープがpublicで、staticな戻り値のなく、引数にString配列を取るmainメソッド
であることが必要です。つまり、
public static void main(String[] args)
とするのが通常です。
試しに質問のコードをjavaコマンドで実行すると、NoClassDefFoundErrorが出るはずです。

>main()がクラスTest_A の中に挟まっているのでしょうか

Javaは、全てのプロパティ、メソッドはどこかのクラスに属していないといけないからです。
mainメソッドであっても例外ではありません。

>main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。

これを考える上で最も重要なのはmainメソッドがstaticであることです。
staticなメソッドは、そのクラスのインスタンスを作らなくても、
つまり、new Test_A();としなくても実行することが可能です。
プログラム実行時...続きを読む

Q"try{}catch(){}"文で"close()"はどのように書けばよいのでしょうか。

こんにちは、片岡と言います。

プログラム1は、Java言語で学ぶデザインパターン入門(結城浩さん著)の
433ページを参考にして書きました。

私は、プログラム1のclose()の書き方よりもプログラム2のようなclose()の書き方が、
良いと思っています。
なぜならば、プログラム1では、out.writeObject(memento)行の例外によって、
close()が実行されないからです。

私のこの考え方は正しいのでしょうか。
もっと良いclose()の書き方はあるのでしょうか。
ご存知の方はいらっしゃいませんか。

●プログラム1
public class Main {
public static void saveMemento(Memento memento) {
try {
ObjectOutput out = new ObjectOutputStream(new FileOutputStream("game.dat"));
out.writeObject(memento);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
… //以下略
}

public class Memento implements Serializable {
… //以下略
}


●プログラム2
public class Main {
public static void saveMemento(Memento memento) {
try {
ObjectOutput out = new ObjectOutputStream(new FileOutputStream("game.dat"));
out.writeObject(memento);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
… //以下略
}

public class Memento implements Serializable {
… //以下略
}


なお、私の環境は以下の通りです。
OS: Microsoft Windows XP Professional SP2
開発環境:Eclipse 3.2.2
java: java version "1.4.2_13"

こんにちは、片岡と言います。

プログラム1は、Java言語で学ぶデザインパターン入門(結城浩さん著)の
433ページを参考にして書きました。

私は、プログラム1のclose()の書き方よりもプログラム2のようなclose()の書き方が、
良いと思っています。
なぜならば、プログラム1では、out.writeObject(memento)行の例外によって、
close()が実行されないからです。

私のこの考え方は正しいのでしょうか。
もっと良いclose()の書き方はあるのでしょうか。
ご存知の方はいらっしゃいませんか。

●プロ...続きを読む

Aベストアンサー

>私のこの考え方は正しいのでしょうか。
正しいです。質問者さんが書かれているやり方が一般的です。
念のため書いておきますが、outをtryの外で宣言しないとコンパイルが通りません。

まぁ、あくまでデザインパターンを学ぶための本ですから、細かなコーディングについて気にする必要はないでしょう(疑問を持つことは良いことですが)。


人気Q&Aランキング

おすすめ情報