トップページ⇒tech
1001コメント357KB

【初心者】Java質問・相談スレッド115【歓迎】

■ このスレッドは過去ログ倉庫に格納されています
0001Javaが初心者2008/05/12(月) 03:05:27
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    http://pc11.2ch.net/hp/
Webプログラミング http://pc11.2ch.net/php/
をご利用下さい。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 http://www.wikiroom.com/java/?path,classpath
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」

前スレッド
【初心者】Java質問・相談スレッド114【大歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1207385614/
次スレは>>990あたりで。

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/
0153デフォルトの名無しさん2008/05/16(金) 10:43:36
>>147
使い方としては、
Color color = Color.getColor("red");
だけど、ドキュメントを見るとシステムプロパティがどうとか書いてあっ
てよくわからんね。
0154デフォルトの名無しさん2008/05/16(金) 10:49:05
>>152
自前でやるんなら、自分でCSV書き出すプログラム書くだけだよ。
0155デフォルトの名無しさん2008/05/16(金) 11:40:26
>>152
for(data[] row : array){
for(data cell :row){
data.toString()と","をファイル出力
}}
0156デフォルトの名無しさん2008/05/16(金) 12:41:17
>153
それはダメ。
その実体は new Color(int, int, int, int) の引数を結合した数値の文字列表現。
> 指定されたプロパティが見つからない場合、
> ***または整数値として解析できなかった場合***、null が返されます。

>145 の言う「名前から色」というのは、どこかで対応表を持つ必要があるから、
公開ライブラリには向かない、と私は思う。
要は、Map<String, Color> か何かで専門クラスを作りましょう、と。
0157デフォルトの名無しさん2008/05/16(金) 12:45:53
>>145
javax.swing.txt.html.StyleSheet#stringToColor(String) とか?
0158デフォルトの名無しさん2008/05/16(金) 12:47:53
>>155
改行してない。
0159デフォルトの名無しさん2008/05/16(金) 18:00:57
アプレット初めて半年の初心者なんですが、
JToggleButton();で押下時のボタン色を変えるシンプルな方法はありますか?

メソッドをネットで検索しても見つかりませんでしたので、
JToggleButton();を継承して、オーバーライドしたクラスを作ったんですが、
ボタンのイベントの"actionPerformed()"が、使用されるアプリのほうが
自分より早く呼ばれてしまう為、旨くいきませんでした・・・
0160デフォルトの名無しさん2008/05/16(金) 18:05:23
こんな感じで作りました。

public class IToggleButton extends JButton implements ActionListener
{
private boolean isSelected = false;

IToggleButton(String str){
super(str);
addActionListener(this);
if (this.isSelected) setBackground(Color.pink);
else setBackground(null);
}

public void actionPerformed ( ActionEvent e ) {
isSelected = isSelected?false:true;
if (isSelected) setBackground(Color.pink);
else setBackground(null);
}

public void setSelected(boolean selected){
this.isSelected = selected;
if (this.isSelected) setBackground(Color.pink);
else setBackground(null);
}

public boolean isSelected() {
    return(this.isSelected);
}
}
0161デフォルトの名無しさん2008/05/16(金) 19:55:47
プログラミング初心者が最初に行き着く
プログラム言語のスレはココですか?
0162デフォルトの名無しさん2008/05/16(金) 20:40:20
いえいえ、アッセンブラ〜やCを長年経験した上での質問です・・・
0163デフォルトの名無しさん2008/05/16(金) 22:35:26
若い女のプロ意識に脱帽編…

若い女の営業スマイル。よく出せるなと思っていました。
コンビニやスーパーでも俺みたいなきもいおっさんによくこうも
にこやかな営業スマイルだせるなと感心しておりました。

こないだ、パチンコ屋に行きました。そこは町の中心部にあり自宅から
4,50分のところです。そこは、衣装もエロチックでミニスカートにスリットなる
切れ目が入っていて、店員さんもなかなかの魅力的な娘が多いです。
それも楽しみにときどきそこの店に行きます。

あまりでないので、自動販売機のところで一服してるとかわいい娘が
コーヒーを配っています。あまりこの店までこれないので、ついミニスカートのスリットから見える
太ももを凝視して興奮してしまいました。かなり長い間エロい目つきで見てたはずです。

相手に気づかれました。さすがに、とってもいやな顔されるだろうとおもっていました。
最初はたしかにちょっといやな顔をしましたが、すぐにあのにこやかな営業スマイルにもどりました。

これはびっくりしました。いくら店員とはいえ、俺みたいなもてないブサ男に
この場面で営業スマイルとは・・・

恐れ入りました。パチンコ屋のあの店員。
01641632008/05/16(金) 22:36:08
すまん。誤爆った。リロードされたら、プログラム板だった。すまそ。
0165デフォルトの名無しさん2008/05/16(金) 22:39:49
クライアントの変更要求や追加要求に嫌な顔をして見せる奴は、パチ屋の
女性店員よりプロ意識が低いと言いたいわけですね?わかりますw
0166デフォルトの名無しさん2008/05/16(金) 22:54:26
基礎からのJava
http://www.7andy.jp/books/detail?accd=31942656

やさしく学ぶ Sun認定Javaプログラマ
http://www.7andy.jp/books/detail?accd=32020519

この2つでどっちを買うか迷ってるんだけどどっちがオススメ?
もしくは他にオススメある?
一応研修でざっと習って「やさしいJAVA」ってのも貰った
基本をきっちり押さえつつも実践的な練習もできる本が欲しい
他のSUN認定の分厚いのや外人が書いた翻訳された本は見にく過ぎて無理だった
とりあえず逆引きの本は1冊買った
誰か助けて
0167デフォルトの名無しさん2008/05/16(金) 23:12:15
>>166
「実践的な練習」がどのレベルを指してるのか分かんない。
1.実用的なプログラムを、とりあえず動くレベルで書けるようになりたい。
2.動けばいいレベルなら既に書けるから、より良いコーディングを学びたい。

1なら言語本(Javaそのものを説明してる類の本)はやさしいJava1冊で十分。
それよりも実際に何か書いてみる方に注力して、書きながらその都度必要
な情報を検索する、それでもみつからないなら本を探して買うってやり方の
方が経済的だし効率いい。
言語本を何冊も買うのは意味ないし、言語本を2冊読む時間があるなら1
冊だけ読んでもう1冊読む分の時間で実際にコード書く方が効率いい。
あと、1のレベルに達してない人が2を求めるのは非効率。先ずは1から。

もし2ならJavaの鉄則とJavaの格言は良い本だよ。読みやすいしね。
0168デフォルトの名無しさん2008/05/16(金) 23:27:34
>>167
こんな時間にどうもありがとう!
明日その2冊を立ち読みしてみる
0169デフォルトの名無しさん2008/05/17(土) 00:21:32
初歩的な質問ですみません
javaプログラミングをするのに優れたフリーのテキストエディターを教えて下さい。
できれば文字の色を変えてくれて、Tabで列を揃えてくれるやつがいいです。
OSはWindows XPです。
よろしくお願いします。
0170デフォルトの名無しさん2008/05/17(土) 00:36:59
java.util.Collections#synchronizedList() の使い道(使い方)がわかりません。

java.util.List は同期化されませんが、以下のようにすれば、list はスレッドセーフになって帰ってくるのですよね。

List unsyncList = new ArrayList();
List list = Collections.synchronizedList(unsyncList);

○質問1:
マルチスレッド環境において、
Collections#synchronizedList() が返した list に対しては、
synchronized ブロックでくくらずに add() や get() しても、スレッドセーフが保たれるという理解でよいですか?

○質問2:
javadoc の Collections#synchronizedList() のところに、
以下のように書いてあるのが気になります。

>返されたリストの繰り返し処理を行う場合、ユーザは、次に示すように手動で同期をとる必要があります。
>
>List list = Collections.synchronizedList(new ArrayList());
>  ...
>synchronized(list) {
>  Iterator i = list.iterator(); // Must be in synchronized block
>  while (i.hasNext())
>    foo(i.next());
>}
>これを行わない場合、動作は保証されません。

これは、list の add() や get() は質問1:で同期化されるようになったが、
list.iterator() が返すイテレータへのアクセスは同期化されていないので、
イテレータでグルグルまわすときは、synchronized 文で自分で同期化してね、という理解でよいでしょうか?
0171デフォルトの名無しさん2008/05/17(土) 00:42:19
>>169
いくつもあるし相性があるって人もいるので、
ぐぐって出てきたのを使ってみれば?

あるいはEclipse、NetBeans等の統合開発環境とか
文法ミスを指摘してくれたり、デバッグ用の機能がそろってたりと何かと便利
大規模な開発にも耐えうるし、ひとつ持っておくのをお勧めする
0172デフォルトの名無しさん2008/05/17(土) 00:48:44
>>171
なるほど、ありがとうございます。
早速ぐぐってみます。
0173デフォルトの名無しさん2008/05/17(土) 01:17:27
>>168
Effective Javaがいいよ!
0174デフォルトの名無しさん2008/05/17(土) 01:31:30
>>170
sync-List は、単にsynchronizedメソッドでラップされたインスタンスを提供してるだけ。
必要とされる同期化の手続きが、著しく改善されるわけではない。

iterator で返されるインスタンスは、ラップされたものとは違うので、
生成前に必要な手続きを行う必要がある。
0175デフォルトの名無しさん2008/05/17(土) 01:42:45
>>170
>質問1
はい。

ただし、例えば以下のようなことをしたい場合は、containsやaddがそれぞれ単体で同期されてても
間に割り込まれる可能性があるので、全体をsynchronizedで囲まないと望む結果にはならない。

if ( list.contains(x) == false ) list.add(x);

>質問2
はい。

どのみち、iterator、hasNext、nextをそれぞれ単体で同期したところで、
間にaddが割り込まれたらConcurrentModificationExceptionが起きるから、使い物にならないと思う。

ところで、CopyOnWriteArrayListという便利なものもあるよ。
状況によってはおすすめ。
0176デフォルトの名無しさん2008/05/17(土) 02:24:22
>>145
Color c = (Color)Color.class.getField(colorname).get(null);

要try-catch
0177デフォルトの名無しさん2008/05/17(土) 07:49:46
JSPの質問なのですが、ここでしてもいいものでしょうか?
スレ違いなら誘導をお願いします。

DBから読み込んだ内容をテーブルとして表示し、レコードごとにボタンを置いて押すとそのレコードの詳細を表示するものを作っています。
レコードをテーブル表示するのはwhile(ResultSet.next())で<tr>〜</tr>を繰り返して実現できそうなのですが、詳細を表示するボタンに迷っています。

というのも渡すパラメータが10個あり、しかもそのうち9つがレコードの内容に依存しない共通の項目です。
ボタン一つ一つにformを作ってhiddenで10個のパラメータを付加してwhileで回すのも考えたのですが、例えば20個のレコードに対して200のhiddenが生成されるのはいかがなものかと他の手段を探しています。
buttonを押したときにonclickで遷移することも考えましたが、buttonに直接パラメータを付加できる属性はないものでしょうか?
0178デフォルトの名無しさん2008/05/17(土) 08:27:13
HTML(リンク)からJAVAサーブレットに情報を与えるにはどうすればいいのでしょうか。
リンク"A href=恐らくdoPostの値></A"で
データをJAVAサーブレットに送信したいのですが方法がわかりません。
リンクにdoPostの情報を与えるのもわかりませんがリンクからの情報をサーブレットに値を与えデータを返す方法もわかりません。

本にも載ってないのでどうすればいいかわかりません、教えて君になってしまいますがよろしくお願いします。
01791782008/05/17(土) 08:52:14
すみませんdoPostのところはdoGetです。
0180デフォルトの名無しさん2008/05/17(土) 09:55:43
質問です。
現場のソースで、
List list = new ArrayList();と記述し、ArrayListのメソッドを
使っているソースを見かけたのですが、
ArrayList list = new ArrayList()とのメリット上での差異が分りません。
良い点があるから、List list = new ArrayList();と記述するのでしょうが、
その良い点が分りません。よろしくお願いします。
一応、sjc-p1.4の資格は持っていて、SJCPに合格するだけのインターフェースの知識は
あります。
0181デフォルトの名無しさん2008/05/17(土) 10:01:33
どっちかというとHTMLの話になるわな。
そもそも、一覧から詳細にいくのに10個もパラメータいらんだろ?
なんかおかしな設計ではないのか?

POSTで送信する(Formを使用する)場合、
>9つがレコードの内容に依存しない共通の項目
レコード(繰り返し処理)の外側に配置すればいい
各列のハイパーリンクをクリックしたならば、JavaScriptで各行のキーをhidden項目に設定。
その後、隠しボタンにした「詳細」ボタンをJavaScriptでクリック
ってのが1つの方法。
詳細がボタンであっても同様。

GETでいいならば、URLのパラメータに10個のパラメータを付ければいい。

POST/GETとFORMあたりがよく解っていないならば、まずはHTTPの勉強を汁。
0182デフォルトの名無しさん2008/05/17(土) 10:07:06
>>180
ぶっちゃけて言えば、半端な知識のマが書いた中途半端なコードなだけ。
意図としてはListで定義されているメソッドしかlist変数では使えないって効果しかない。
これがメリットとなるか?というならば、ほとんどの場合は否。

これがメリットとなるケースは、一般的にいって定義されたクラス外からlistの参照を持つ場合。
つまり、あるクラスのフィールドとして、
private final ArrayList list = new ArrayList();
と書いてあっても、
public List getList() {
  return list;
}
とアクセサを定義しておけば、
private final List list = new ArrayList();
とする必要は(ほとんど)ない。

クラス内でArrayListをLinkedListに変更したり、配列に変更しても、List getList()さえ仕様通りの動きをすればいいわけだ。
ローカル変数でやるならばもっと意味はない。
0183デフォルトの名無しさん2008/05/17(土) 10:12:13
あと、当然な話だけど、List list = new ArrayList();と書くよりもArrayList list = new ArrayList()と書くほうが、実装上の選択(メソッド)は増える。
極端な話、LinkedListなんて専用メソッドを活用しなきゃいらない子。
0184デフォルトの名無しさん2008/05/17(土) 10:25:11
質問です。
swingでゲームを作ろうとして勉強しているものです

ゲーム中(ループ中)にJPanelを実装したクラスのコンストラクタでボタンを配置
別スレッドでループ処理する。このときアクティブレンダリングして描画命令
してるのですが、なぜかボタン隠れた状態で更新されてしまいます。
下にコードを書きますので、どなたかご教授ください
0185デフォルトの名無しさん2008/05/17(土) 10:26:43
>>180
「選択肢があるなら、抽象データ型を使え」という指針がある
Listとおけば実装の詳細がより隠蔽される
例えば実装を交換したいという状況になっても、new ArrayList();の部分だけを取り替えてやればいい

・・・・一応、理論上はそういうことになってるようなのだが、
listのスコープが狭い場合はデメリットにしかならんような?使えるメソッド減るし
0186デフォルトの名無しさん2008/05/17(土) 10:26:48
//必要パッケージをインポート
import java.awt.*;
import javax.swing.*;
/*****************************************
* パネルクラス(中間コンテナ)
*
*****************************************/
class MainPanel extends JPanel implements Runnable{
//パネルサイズ
public static final int WIDTH = 500;
public static final int HEIGHT = 500;
private Thread thread;
//コンストラクタ
public MainPanel(){
//サイズの設定
setPreferredSize(new Dimension(WIDTH,HEIGHT));
thread = new Thread(this);
thread.start();
JButton btn = new JButton("OK");
add(btn);
}

0187デフォルトの名無しさん2008/05/17(土) 10:28:14
//ゲームループ

public void run(){

while(true){

SwingUtilities.invokeLater(new Runnable() {
public void run() {
gameRender();
paintScreen();
}
});

try{
Thread.sleep(200);
}catch(InterruptedException e){
e.printStackTrace();
}

}


}

0188デフォルトの名無しさん2008/05/17(土) 10:29:03
/*** ダブルバッファリング ***/

// ダブルバッファリング用
private Graphics dbg;
private Image dbImage = null;

//バッファにレンタリング
public void gameRender(){

//初回時の呼び出しならばダブルバッファリング用のオブジェクト作成
if(dbImage==null){
//バッファイメージの作成(領域)
dbImage = createImage(WIDTH,HEIGHT);
if(dbImage==null){
System.out.println("no dbimage obj!");
return;
}else{
//バッファイメージに図や画像を書き込むために必要なGraphicsオブジェクトも作っておく
dbg = dbImage.getGraphics();
}

}

//バッファをクリアする
dbg.setColor(Color.WHITE);
dbg.fillRect(0, 0, WIDTH, HEIGHT);

}
0189デフォルトの名無しさん2008/05/17(土) 10:29:39
//バッファの内容を画面に転写
public void paintScreen(){

try{

Graphics g = getGraphics();
if(g!=null && dbImage!=null){
//バッファイメージを画面に描画
g.drawImage(dbImage,0,0,null);

}

//システムのtoolkitオブジェクトを返し、画面を強制的に更新させる
Toolkit.getDefaultToolkit().sync();

if(g!=null){
//グラフィックオブジェクトの破棄
g.dispose();
}

}catch(Exception e){
e.printStackTrace();
}


}


}
0190デフォルトの名無しさん2008/05/17(土) 10:33:02
public class MPN extends JFrame{
//コンストラクタ
public MPN(){
//タイトル
setTitle("ウィンドウ");
setResizable(false);
//ContentPaneにパネルを貼り付ける
MainPanel panel = new MainPanel();
Container contentpane = getContentPane();
contentpane.add(panel);
//フレームサイズをパネルに合わせて設定
pack();
}
private static void createFrame(){
MPN game = new MPN();
game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
game.setLocationRelativeTo(null);
game.setVisible(true);
}
public static void main(String[] args) {

//イベントディスパッチスレッドにフレームを作成させる
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createFrame();
}
});
}
}
0191デフォルトの名無しさん2008/05/17(土) 10:35:21
上記ソースを投稿したものです。
長くなりすみません。
どうもダブルバッファリングするとボタンがうまく配置しません。

paintComponentメソッドを使った描画処理ではうまくいきました。
0192デフォルトの名無しさん2008/05/17(土) 10:51:46
>>180
trimToSize() も clone() も使う必要ない場合だと、5文字削れてラッキーとか。

メソッド境界以外では抽象型に拘る必要がないってのもわかるけど、
ArrayList と List にも拘るほど違いないから、ぶっちゃけどうでもいい。
0193デフォルトの名無しさん2008/05/17(土) 11:23:53
自分でボタンを描画したいの?
それとも親(JPanel)にボタンを描画させたいの?
0194デフォルトの名無しさん2008/05/17(土) 11:54:22
>>180
俺は、後でプロファイルを取ってListの実装を最適化する予定の時、よくそう書いておく
0195デフォルトの名無しさん2008/05/17(土) 12:03:04
>>193

JPanelに描画させたいっす。
コンストラクタでやってるように

なのになぜか裏にいってしまうんだああああ!なぜだあああ!
0196デフォルトの名無しさん2008/05/17(土) 12:31:26
dbImageのgraphicsを取得してJButtonのpaintに渡してdbImageにボタンを書き込む
dbImageを描画した後にrepaintして親を再描画させる
適当に考えてみたので見当違いだったらごめん
01971862008/05/17(土) 12:44:26
パネルにボタンを配置したあと
パネル上に描画処理をほどこすと、かぶるものなのでしょうか

ダブルバッファ処理をしないでpaintComponentを使った描画はかさならず描画されました
ダブルバッファ処理は別スレッド処理なのでイベントディスパッチスレッドで
処理させているのですが、そこらへんがおかしいのでしょうか

うむうむ・・・・
0198デフォルトの名無しさん2008/05/17(土) 12:47:16
ダブルバッファリングって書いてあるけど、バッファ1つだけじゃん……
01991862008/05/17(土) 13:07:34
>>188

描画する領域と、描画する前のサブ領域でダブルバッファリングでは?
参考サイトにはそうかいてあった
0200デフォルトの名無しさん2008/05/17(土) 14:17:28
>>199
その参考サイトが間違ってるだけじゃね?
例えば、そのプログラムだと gameRender() と paintScreen() を
マルチスレッドで並列動作させたらチラつくでしょ。
チラつかないようにgameRender() が使う描画用の領域と、
paintScreen() が使う、既に描画完了してる表示用の領域と
二つ持つのがダブルバッファリング。
paintScreen() 相当の処理が十分速ければダブルでいいけど、
遅い場合はトリプルバッファリングが必要になったりする。

まぁ、いまどきは Window#createBufferStrategy() 使えば済む話だから
自前でダブルバッファリングする必要はあんましないはず。
0201デフォルトの名無しさん2008/05/17(土) 14:25:11
JtextAreaに対して入力キー制限したいです
つまり、左右方向キーは入力を受け付けて上下方向キーは無視、のような
ただJtextAreaに直接KeyEentリスナーを加えてもダメみたいだたし
何かいい方法があればご教示下さい
02022012008/05/17(土) 14:26:47
言葉足らずだったので補足します

左右キーでカーソルを左右に移動、上下キーでは何も処理をいない、
というテキストアリアを実現したいと考えています
0203デフォルトの名無しさん2008/05/17(土) 14:34:45
コンポーネントは描画されて表示している部品だから
その上から塗りつぶしたら見えなくなるよ
0204デフォルトの名無しさん2008/05/17(土) 14:41:26
>>201
何が真っ先に呼ばれるんだろう
protected void processKeyEvent(KeyEvent e)かな・・・自信ない
上手くいったら報告プリーズ
02051862008/05/17(土) 14:49:13
>>203

ありがとうございます。
とすると、上のコードではどうなるのでしょうか
私も考えているのですがいまいち・・知識がたらず・・すみません
0206デフォルトの名無しさん2008/05/17(土) 14:53:08
C:\MixIDE-1.4rc6>java -jar MixIDE.jar
Exception in thread "main" java.lang.UnsupportedClassVersionError: mix/ide/MixID
E (Unsupported major.minor version 50.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
02072062008/05/17(土) 14:57:03
間違って、送信してしまったorz
javaのプログラムをコンパイルしたいのですが・・・

http://mixide.sourceforge.net/
mixideというプログラムです

jar形式で配布されてるので、それをcmdで実行すると
C:\MixIDE-1.4rc6>java -jar MixIDE.jar
Exception in thread "main" java.lang.UnsupportedClassVersionError: mix/ide/MixID
E (Unsupported major.minor version 50.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)

となってしまいます・・・アドバイスください
0208デフォルトの名無しさん2008/05/17(土) 14:59:46
gameRenderの
dbImage = createImage(WIDTH,HEIGHT);
以降で自身にaddされたコンポーネントを自分で描画する
0209デフォルトの名無しさん2008/05/17(土) 15:07:57
>>201
Keymap 使って、VK_UP や VK_DOWN に何もしない Action を結び付けてみるとか。

TextAction noaction = new TextAction("noaction") { public void actionPerformed(ActionEvent e){} };
textarea.getKeymap().addActionForKeyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), noaction);
0210デフォルトの名無しさん2008/05/17(土) 15:08:49
>>204
本当ありがとう、processKeyEventメソッドを
オーバライドしてやったら上手くいったよ

昨日1日奮闘してダメだったことを30分で解決してくれるとは、、
もっと精進せねば
02112012008/05/17(土) 15:15:27
>>209
Keymapなんて使ったことなかったので勉強になります
この方法でも上手くいきました。ありがとうございます
02121862008/05/17(土) 15:41:54
>>208

なるほどなるほど。
画面に描画するときに一緒に描画するんですね

ボタンのようなコンポーネントの描画に関してちょっと知識不足です
ぱねるにaddすればはりつけられることはわかっているのですが

一緒に描画というところがまだわかりません
自分で調べてみますが、よろしかったらご教授お願いします!
02131802008/05/17(土) 15:50:16
>>182,185
質問に答えていただいてありがとうございます。
0214デフォルトの名無しさん2008/05/17(土) 16:13:01
以下のプログラムで「booleanの結果を戻す必要があります」と
コンパイルエラーがでるんですが、なぜでしょうか??
returnでbooleanを返してるんですが???
tryの外からbooleanを返すとうまくいくのですが、何故なのか理由がよくわかりません。
public boolean DBDelete(int formVal[]) {
try {
Connection con = getConnection();
Statement smt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_UPDATABLE);
ResultSet rs = smt.executeQuery("SELECT * from kyuuyo WHERE 社員番号="+formVal[1]);
if (rs.next()) {
if (rs.getInt("社員番号")==formVal[1]) {
rs.deleteRow();
return true;
} else {
System.out.println("該当する社員番号がありません");
return false;
}
}
} catch(Exception e) {
e.printStackTrace();
}
}
0215デフォルトの名無しさん2008/05/17(土) 16:21:52
>>214
全てのケースにおいて return するか例外投げるかしないとダメ。

具体的には rs.next() が true にならないケースと、
catch(Exception e) で例外捕捉したケースが漏れてる。
booleanの結果を戻すか、例外投げる必要がある。
0216デフォルトの名無しさん2008/05/17(土) 16:31:00
>>214
SQLインジェクション
0217デフォルトの名無しさん2008/05/17(土) 16:41:21
KeyMapを使うのと、InputMap + ActionMapを使うのはどっちがいいんだろ。
KeyStroke a = KeyStroke.getKeyStroke("ctrl A");
for (InputMap im = t.getInputMap(); im != null; im = im.getParent()) {
im.remove(a);
}
とか。
02182142008/05/17(土) 16:44:04
>>215
あ、catchにもreturn書かないといけないんですね
なるほど!ありがとうございました!!
0219デフォルトの名無しさん2008/05/17(土) 17:05:30
>>218
それはそれでマズイ
0220デフォルトの名無しさん2008/05/17(土) 17:07:28
>>218
if (rs.next()) {
}
//ここじゃね?
02212142008/05/17(土) 17:40:53
>>218
マズいんでしょうか???
0222デフォルトの名無しさん2008/05/17(土) 18:00:52
例外の握りつぶしでググレ
0223デフォルトの名無しさん2008/05/17(土) 18:08:45
>>180
List list = new ArrayList();

は、List としての機能が必要だが、インスタンスを生成するには具象クラスが必要なので
とりあえずArrayList を使ったということ。

すなわち、それ以降は単に List の機能が必要なだけという、
プログラムの書き手から読み手への強い意思表示が含まれている。

これを、半端な知識のマと言ってしまうと、書き手は哀れw
0224デフォルトの名無しさん2008/05/17(土) 18:44:13
>>223
無駄に短いスコープで抽象化するのは俺も反対だな
そもそもListに関して言えば、何も考えずにgetListとか作る方が問題となるわけで。
02251862008/05/17(土) 19:10:01
>>186 のコードのものです

gameRenderの
dbImage = createImage(WIDTH,HEIGHT);
以降で自身にaddされたコンポーネントを自分で描画する

とアドバイスをいただいたのですが、まだ理解できずボタンが隠れてしまします

gameRender内でaddで追加してもだめでした。
どなたかご教授お願いします
0226デフォルトの名無しさん2008/05/17(土) 19:20:40
最初に具象クラスで書いておいて
「お、ここ、List で十分じゃん」と書き換えるのは抽象化って感じだけど、

List でロジック組んでみたけど、その List のインスタンスも生成しなくちゃならない
というような場合は、むしろ具象化って呼ぶのが適当じゃね?
(そもそも、はなっから List でなく ArrayList で考えるような場合がどれだけあるのだろうか)

そのような場合、生成部分は仕方ないけどそれ以外を
わざわざ List から ArrayList へ置き換えてやる必要があるのかどうか。
いくらスコープが狭くても面倒だし
0227デフォルトの名無しさん2008/05/17(土) 19:21:18
eqlipseのページからEMF build 2.2.0が落とせない
どこか落とせるところ無いですか?
02282272008/05/17(土) 19:36:02
お騒がせしました、できました。
0229デフォルトの名無しさん2008/05/17(土) 19:43:14
button.paint(dbg)
02301862008/05/17(土) 19:47:52
>>229

できました!
感激です!
スキです!
0231デフォルトの名無しさん2008/05/17(土) 20:01:14
http://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/252.java

これをコンパイルしようとすると終盤でFigureTypeが見つけられないとでてしまいます
どこを修正・追加すればコンパイル可能になるでしょうか?
0232デフォルトの名無しさん2008/05/17(土) 20:06:42
>>226
むしろ最初からListではなくArrayListで考えれば充分で、Listとして考える必要もないような気がする。

>生成部分は仕方ないけどそれ以外をわざわざ List から ArrayList へ置き換えてやる
宣言と初期化は普通は同時に行うわけで、書き換える必要もないと思うけど?
02331862008/05/17(土) 20:13:31
>>229

ボタン表示ができたのですが、ボタンとしての機能がなくなっていました!
コンストラクタでボタンをADDで貼り付けて、別スレッドでpaintで描画した結果、
addで貼り付けたボタンは結局うしろにいって、paintで描画したボタン(ボタンとしての機能なし)
が画面はじにでるだけでした!
こういうものなのでしょうか?
0234デフォルトの名無しさん2008/05/17(土) 20:57:46
そりゃ下のコンポーネントにボタン置いてその上のコンポーネントにボタンのグラフィック描画しただけだから
クリックしたイベントが伝達されてないだけだと思う。
設計が悪い。
0235デフォルトの名無しさん2008/05/17(土) 21:01:08
ボタンが押されたら押された状態を描画すればいい
バッファイメージを自分で作るってのはそういう事だよ。
ゲームなんだよね?
JButton使わずにパネル上のマウス位置とマウスイベントを拾ってボタンは画像にしたらどうだろう。
0236デフォルトの名無しさん2008/05/17(土) 21:05:05
>>232
それは順序が逆だ。使う側が必要とするのは本来はListという概念を実現している何かであって、その実現手段は知ったこっちゃない。
しかし、Listの実体を生成するためには、具体的なモノを明示的に指定する必要があって、諸々の取捨選択の結果としてArrayListを用いることになるわけだ。
だから、ListでなくArrayListを型として用いるということは、利用側が必要としているのは「Listを実現した何か」ではなく「ArrayListという実装」である、という意志の表明になる。
0237デフォルトの名無しさん2008/05/17(土) 21:06:41
>>232
まあ、どうでもいいんだけど

例えば、本来、ローカル変数で十分なところに(ループのイテレータとか)フィールドを割り当ててて、
 「できることが多いからいいじゃないか」
 「クラスの外からは隠蔽されているからいいじゃないか」
 「最初からフィールド変数で考えれば十分じゃないか」
と言われるくらい気持ち悪い(※)

ましてや、これを、
「イテレータにフィールド変数を使わないのは、半端な知識がマが書いた云々」
とか非難され始めたら、ちょっと一言いいたくなる。

(※)それぞれ、以下から脳内変換
 「ArrayList は List よりメソッドが多いからいいじゃないか」
 「外向けのメソッドをつくる場合に、List にすればいいじゃないか」
 「最初から ArrayList で考えれば十分じゃないか」


>>生成部分は仕方ないけどそれ以外をわざわざ List から ArrayList へ置き換えてやる
>宣言と初期化は普通は同時に行うわけで、書き換える必要もないと思うけど?

考えてみれば、仮引数とかに使うとかしなければ、そうそう必要ないねぇ。
でも、まあ、人間の頭の中では List を操作しているつもりなのに、
プログラムの中では操作している変数は ArrayList である
という剥離は気持ち悪い。プログラムは、人間が読むためのドキュメントであるべきなのだから。
0238デフォルトの名無しさん2008/05/17(土) 21:45:36
>>236
その理論でいくならば、すべてのクラスにおいて具体的なモノとインターフェイスは別々に考えなければならないともとれる。
現実ではListとして考える≒ArrayList、諸所の取捨選択なんてほとんどない。

メソッド内とかクラス内で閉じるものに対して、「使う側」を意識するんか?
実体をつくるのも使うのも自分だろ。
そりゃ外部とのインターフェイスとしてはListが望ましいけどね。
0239デフォルトの名無しさん2008/05/17(土) 22:24:21
まあどっちでもいいと思うのは確か
Listでも構わんし、ArrayListでも気持ち悪くもない。
>232も必要がないとしか言ってないわけでどっちでもいい的立場なんじゃね?
0240デフォルトの名無しさん2008/05/17(土) 22:26:57
>>238
> その理論でいくならば、すべてのクラスにおいて具体的なモノとインターフェイスは別々に考えなければならないともとれる。
ある意味yes. 実装レベルでclassとinterfaceに分離するか否かは、モノの性質、作業工数、管理工数などを考慮して決めるけど。
あと、「使う側」って言うのは「List/ArrayListを使用しているコード」のこと。
それから、「表明」する主語は「コードを書いた人」で、「表明」している先は「そのコードを読むモノ(人だけじゃなくコンパイラも含む)」のこと。
つまり、List でなく ArrayList と書いたなら、そのソースコードを書いた人はそれを読むモノに対して、「ここでは (List ではなく) ArrayList である必要があるのだ」と主張しているのに等しい。
02411772008/05/17(土) 22:46:21
>>181
確かに詳細にいくだけならプライマリキーを渡せばいいのですが、
詳細からまた一覧に戻ってくる際に同じ条件で検索する必要があるので一覧画面が受け取ったパラメータをまるまる渡してやらなければいかんのです…

ユーザインターフェスはformとボタンを使用する事を考えています。
コードとしては

<table>
<% while(ResultSet.next()){ %>
<tr><td>-----テーブル内容-----</td><td><form action="URL" method="POST"><--hiddonいっぱいとsubmit--></form></tr>
<% } %>
というのが思いついてはいるのですが、それだと生成されるレコードごとにhiddonがたくさん書き込まれてしまうなぁと思いまして…bottunタグにパラメータを埋め込めたら便利なんだけどなぁと思っているのですが…
02421772008/05/17(土) 22:47:30
hiddenのスペル間違えてる…お恥ずかしい…
0243デフォルトの名無しさん2008/05/17(土) 22:54:05
>>241
行ごとにformを作るな、ページに1つでいいだろ

どこまでも検索条件を持ちまわすのか?
検索条件が増えたとき困らないか?

なんでもセッションに値を突っ込むのは奨励されないが、2画面以上遷移して値を保持しなければならない場合、セッションに積んだ方がいい。
0244デフォルトの名無しさん2008/05/17(土) 23:04:57
Webサービスのライブラリって、axis2とJAX-WSのどっちがお勧め?

axis2は今動かして(クライアントだけだけど)とりあえず動いた。
JAX-WSはJDK落とすのがかったるいのでまだ試してないw

ttp://homepage2.nifty.com/igat/igapyon/diary/2008/ig080116.html
の「いろいろ問題」ってーのは具体的にどのあたりなんでしょ?
0245デフォルトの名無しさん2008/05/17(土) 23:09:08
List と ArrayList だとわかりにくいかもしれないけど、
Map と Hashmap では、体感しやすい経験があった。

最初のソース:
マスタ取得部品みたいなクラスがあって、
Hashmap map = new Hashmap();
で定義されていて、この map オブジェクトを外部からさわれるようになっている。
当然、呼び側からは Hashmap 型でアクセスしていた。

後日、Map の一覧をソートされた状態で表示する必要が発生し、Treemap に変えたくなった。
けれども呼び側では、すべて Hashmap にしているため、呼び側を、結局 Map で
取得するよう、すべて書き換えた。

部品側は、Map map = new Treemap();
にしておしまい。

こういうことがあると、呼び出し側ではインターフェースで取得すべきと思うようになった。
List においても、後日データ量が増えた、チューニングの問題で、ArrayList から LinkedList に変えたくなった
ときに、呼び出し側は List にしておけば、部品側だけの修正ですむと思うのだけど。
0246デフォルトの名無しさん2008/05/17(土) 23:09:29
いがぴょんに聞けば良いじゃん。

ま、現状だと資料とか実装例とか豊富なaxis2でいいと思う。
チャレンジャーならばJAX-WS使ってみれば?
0247デフォルトの名無しさん2008/05/17(土) 23:12:59
>245
問題は「当然、呼び側からは HashMap 型でアクセスしていた」ところ
02482442008/05/17(土) 23:19:44
>>246
おお、もうお返事がw
了解、さしあたりaxis2でもう少し掘り下げてみる。

いや、axis(1)のような、Wikipediaにまで載ってる明らかなダメがあるのかと思ってねw
>JAX-WS
ttp://ja.wikipedia.org/wiki/Apache_Axis
02492452008/05/17(土) 23:20:49
>>247
その部品は、以下のようなメソッドが外部向けに定義されていた。

public Hashmap getMasterMap() { }

たしかにこのままでも、呼び側は Map map = HogeUtil.getMasterMap();
すればよかったんだけど、Javadoc に返却値の型が Hashmap と書かれていたので、
みんな Hashmap 型で取得していたよ。
0250デフォルトの名無しさん2008/05/17(土) 23:25:23
ちげーよw
× public HashMap getMasterMap() { }
○ public Map getMasterMap() { }
あとHashMapだよ、Hashmapはないわ
0251デフォルトの名無しさん2008/05/17(土) 23:27:28
>>244
xfire ( http://xfire.codehaus.org/ )
あるいは、後継の
CXF ( http://cxf.apache.org/ )

はどうだい?

xfire は使ってたけど、POJO を WebService 化するのがすごく楽だった。
(コード修正なし、xml 書くだけ)

まぁいまどきのデファクトという意味では、Axis2 でしょう。
0252デフォルトの名無しさん2008/05/17(土) 23:37:28
>>243
ページに一つでformにしたいんですが、複数のSubmitを作ったら全部のHiddenを渡してしまうのが…というのが悩みでして。
submitを押したときに特定のパラメータを渡す動作をsubmitの中に書ければいいのですが…

検索条件は検索結果と詳細の間だけで持ちまわす物です。
■ このスレッドは過去ログ倉庫に格納されています