ダイアログボックスの出し方でお聞きした者です。
今回InputBoxも作ろうと思っているのですが、
これがなかなか思うようにいきません!

やりたい事
1.「入力してください」のメッセーが一番上に出る。
2.テキストボックスがでる。
3.OKボタンとCancelボタンがでる。
4.Okを押すとテキストに入力した値が
他のテキストに貼り付けられる。

3までは出来ているみたいなのですが、
4が出来ません!

そこで、お願いです。
何方か分かる方おられましたら宜しくお願いいたします。

うぅ~~800文字以上???

↓↓↓ユーザークラス↓↓↓
myDialog d;
d=new myDialog(new Frame());
d.init("入力してください!");
↑↑↑ユーザークラス↑↑↑

↓↓↓ソース↓↓↓
public class myDialog extends Dialog{
Label msg;
public myDialog(Frame parent){
super(parent,"My Dialog",true);
//add("Center",msg=new Label(""));
Panel p=new Panel(); //パネル設定
p.setLayout(new GridLayout(1,2)); //パネルの作成
TextField tf; //テキストフィールドの設定
add(tf=new TextField("",20)); //テキストフィールドの作成
tf.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
TextField t=(TextField) e.getSource();
//msg.setText(t.getText());
}
});
ーーーここで、ボタンOK Cancelの設定ーーー
public void init(String s){
msg.setText(s);
setSize(300,150);
setVisible(true);
}
}
↑↑↑ソース↑↑↑

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

A 回答 (2件)

Poseidonさん、こんにちわ。



#1の方が書いているように、「OKボタンのクラス」が見当たらないので、
Button okBtn = new Button();
とさせてもらいます。
それと、やはり#1の方が書いているように、
tf.addActionListener(new ~
はテキストフィールド上でマウスのクリック(だったかな?)
のようなアクションを起こしたときに呼ばれる部分ですので、
ボタンに対して同じような処理を施す必要がありますね。

Button okBtn = new Button(); // OKボタン
TextField inField = new TextField("", 20); // 入力域
TextField outField = new TextFIeld("", 20); // 出力域
 .
 .
okBtn.addActionListener(new ActionListener() {
 public void actionPerformed(ActionEvent ae) {
  outField.setText(inField.getText());
 }
});

Javaの本見ながらではないんで動くかどうかは分かりませんが、
こんな感じで良いと思います。

頑張ってください!
    • good
    • 0
この回答へのお礼

sueoka & ct27様

お返事ありがとうございます。
インプトダイアログボックスの方できました。
ご迷惑をおかけしました。

OK & Cancelボタンのところは800文字と言われたので
省略いたしました

もしかして一番重要だったのですか?

また何かありましたら宜しくお願いいたします。

お礼日時:2001/08/30 14:14

記載のソースにOKボタンとCancelボタンの記述がないような気がするのは


気のせいなのでしょうか・・・記載漏れでしょうか?
ちなみにtf.addActionListener(new ActionListener~の部分は
テキストフィールドのイベントですが、もしかしてこれとOKボタンのアクション
を間違えているとかではないですよね?
どぉでしょぉ?
    • good
    • 0

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

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

このQ&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の外で宣言しないとコンパイルが通りません。

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

Qpanel.add(new Button("1"));という書き方について。

javaを学習している者です。

インスタンスを作成するには

クラス名 変数名 = new クラス名();

というのが基本だと思うのですが、タイトルのような書き方(panel.add(new Button("1"))だと頭の中ではどのように考えればいいのでしょうか?変数名を持たないインスタンスを生成してパネルにのっけている、ということでしょうか?しかもこれがfor文で繰り返されていると
for(int i = 0; i < 10; i++){
panel.add(new Button(Integer.toString(i)));
}
余計にややこしくて分からなくなってしまいます。一応10個違うインスタンスをそれぞれ作っているのでしょうか?

本に載っていた書き方だし、エラーも出ないのでまず間違っていないのは分かるのですが、いまいちピンと来ないです・・・。

よろしくお願いします。

Aベストアンサー

>一応10個違うインスタンスをそれぞれ作っているのでしょうか?
そうですね。
変数はインスタンスを参照するビット列のアドレスを格納したのもといえます。
ボタンの場合などで
以後インスタンスを参照する必要がなければ変数はいらないといえます。リソースに問題なければよい訳です。
ループでは new の繰り返しはリソース消費が大きくなるので参照変数を利用するわけです。

QA a = new A(){}; の構文の意味が分からない。

下記サイトのコードを読んでいて、

ResponseListener listener = new ResponseListener() {
//略
};

という書き方があったのですが、どういう意味になるのでしょうか?
インスタンスの作り方は単に

A a = new A();

だと思うのですが…。

http://www.snmp4j.org/doc/org/snmp4j/Snmp.html

Aベストアンサー

無名クラスと呼ばれるものよ。
私も良くやるわ。

ちなみに
A a = new A();
はできないわよ。
Aはインターフェースだからね。


上記の場合、正式に実装するなら、
ResponseListenerをimplementsした
MyResponseListener(仮名)を別途作成し、
それを
ResponseListener listener = new MyResponseListener();
とする必要があるわ。
でも、このMyResponseListenerは
今ここでしか使わない、他からまったく参照する必要のない
超ローカルなクラスなのよ。
このメソッドが終了すればGCにかけてもいいわけ。
そんな場合、わざわざクラスを1つ作る必要なくて
その場でちょちょいとやってしまうことができるのよ。
それが無名クラスっていう実装方法よ。

http://www.javaroad.jp/java_class15.htm

FileFilterやCompare、Runnableなんかで
他のクラスで再利用しないときは良くやるわ。

無名クラスと呼ばれるものよ。
私も良くやるわ。

ちなみに
A a = new A();
はできないわよ。
Aはインターフェースだからね。


上記の場合、正式に実装するなら、
ResponseListenerをimplementsした
MyResponseListener(仮名)を別途作成し、
それを
ResponseListener listener = new MyResponseListener();
とする必要があるわ。
でも、このMyResponseListenerは
今ここでしか使わない、他からまったく参照する必要のない
超ローカルなクラスなのよ。
このメソッドが終了すればGCにかけても...続きを読む

QAppletのpublic void paint(Graphics g)

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

Aベストアンサー

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

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

QString a = "a"; と String b = new String ("b"); の違い

String a = "a";
String b = new String ("b");

お伺いしたいのですが、
b は String のインスタンスを作ってると思いますが、
a はどんなことをしてるのでしょうか?

Aベストアンサー

お二人の回答を具体的に言うと、こういうことです。
String a1 = "a";
String a2 = "a";
String b1 = new String ("b");
String b2 = new String ("b");

a1のために、aという文字列のインスタンスが作られますが、
a2に代入されるのは、a1に使われたインスタンスが再利用されます。
これは、
if(a1 == a2) System.out.print("a1と同じインスタンス");
の結果でもわかります。

一方、b1とb2は、bという文字列オブジェクトを引数に、新しいインスタンスを生成する指示がありますので、b1とb2と、その初期化に使った無名のStringインスタンスの3つがメモリ上に存在することになります。
if(b1 != b2) System.out.print("b1とは違うインスタンス");
の結果でもわかると思います。

したがって、
String b = new String ("b"); というのは、Integerに例えると
Integer i = new Integer(new Integer(1)); という処理を
していることになり、ひとつ無駄なインスタンス生成となります。

お二人の回答を具体的に言うと、こういうことです。
String a1 = "a";
String a2 = "a";
String b1 = new String ("b");
String b2 = new String ("b");

a1のために、aという文字列のインスタンスが作られますが、
a2に代入されるのは、a1に使われたインスタンスが再利用されます。
これは、
if(a1 == a2) System.out.print("a1と同じインスタンス");
の結果でもわかります。

一方、b1とb2は、bという文字列オブジェクトを引数に、新しいインスタンスを生成する指示がありますので、b1とb2と、その...続きを読む


人気Q&Aランキング

おすすめ情報