1 :
デフォルトの名無しさん :
2007/09/26(水) 20:51:18
jDialogでボタン付きのダイアログを作成して、 ボタンを押すとdispose()して閉じるようにしても またダイアログを開くと前回表示した内容が残ってしまいます。 2回目の表示のときは、ダイアログを最初から作り直したい のですが、どのようにすべきでしょうか? ちなみにVisualEditorを使って作成しています。
disposeがやっているのはOS側のリソースの解放だから、OSリソースを 使わないSwingの子供部品はなくならないわけです。部品自体やその階層 関係はそのままのこっていて、描画が必要になったときにOSリソースが 取り直されるだけ。 地道に値を入れなおすか、子供を全部削除して入れ直(あるいはそれを するメソッドを呼ぶ)せばいいと思うよ。
JDialog を new するところからやり直せばいいと思うよ
>>1 標準低速ってなんだよw
オレのお茶返せwww
Q. AWT と Swing 混ぜちゃ駄目って聞いたんですけど
混ぜちゃ駄目なんですか・・・・?
A.
今まででは、「駄目」というのが正解です。
が、現在開発中(未リリース)のバージョンではSwingとAWTの混在ができるようになっています。
正式リリースがされるまで、情報の錯綜があって混乱すると思いますが
普通の人にとっては「まだ駄目」という状況だと思ってください。
SwingとATWを混ぜて使えると良い点は多少軽量化できることがあるとか? できないよりはできたほうがいいとはおもうけど、Swingのコンポーネント 増やしてくれたほうがうれしい。
プルダウンメニュー付のボタンなんか欲しいな〜
エクセル的なJTableの拡張が欲しいな〜
「標準」でも検索にかかる上に、低速のふりをする良いスレタイだ。
>パフォーマンスの問題は改善されています。
現在完了形キタコレ。
>>9 軽量化よりも環境ネイティブな L&F なのが嬉しそう。
Swing のエミュレーションは見た目は実用レベルで近づいたけど
挙動の微妙な差異にイラっとさせられる時がある。
ファイル選択ダイアログでファイル名をクリックしたら
名前変更モードになっちゃうとか、
ちっこいアイコン叩かないとファイル選択にならないとか、
そういう部分。
13 :
デフォルトの名無しさん :2007/09/27(木) 14:14:13
正直ダイアログ関係はSystemの使ってほしいよね AWTだと使えるけど、機能が少ないし AWTとの連携で一番期待したいのはGLCanvasが使えること、かな? GLJPanelが遅すぎて使い物にならないとか統合チップセット以外なら Windowモードでも垂直同期が取れているというのが一番大きいかもしれない
>>14 どれも古いプラグインじゃないか。まだ残ってたんだ。
昔Jiglooってプラグイン使ってたんだけど、まだある?
公式扱いということでVisual Editor使ってるんだけど、Jigloo結構いい感じだなあ。
3.3対応のVEはいつでることやら。
>>17 つ
>>14
Jiglooは商用製品なんだからフリーよりよくないとこまるだろ
Delphi使ってたので、Jiglooのパレットの 並び方はなかなか懐かしくてよいなあ。
21 :
9 :2007/09/28(金) 14:20:24
>>12 ああなるほど、そういうのがあったのか。
余談だけど、
>>9 のATWはAWTですた orz
少し凝ったアプリを作ろうとすると、GUIの操作体系考えるの難しいよね。 最初から読み切って作れればいいんだけどそうもいかない。 GUIの部分って書くの時間かかるじゃん。 メニューを動的に変化させたり、いろんな機能と複雑に絡み合っていたり。 人間側で使いやすい操作法と、コーディングのしやすさは相容れない事が多いし。 使ってみて使いにくいから別のやり方に変更とか、やり直しが頻発するときびしい。 デバッグもいろんなパターンをためしていかなきゃいけないし。
>>22 イベントの発行順序がかわったりして苦労するとか
ほんと昔からあるとおりデバッグ等は大変だよ
GUIのアニメとか見た目のコントロールはそのフォームべったりになりやすいし
せいぜいビジネスロジックを完全に分離してフロントエンドに何が来てもいいように
するくらいしかない
NetBeansだったら2行以上のロジックはイベントのメソッドに書かないとかIDEごとの常識が存在するし
すれ違いだけど、なんかそこら辺を解決するためにWindows Presentation Foundationとか機能があったんじゃなかったっけ? どこかの記事で読んだだけなんだが、同じようなのJavaで付けてくれないかなあ。
それが JavaFX なんじゃない? 詳しいことは知らないけどさ。
そのとおりだよ でもさー、最近のリッチクライアント事情っていったらMSのSilverlightとAdobeのAIRの2人勝負で、JavaFXが蚊帳の外になってるよね
SilverlightやAIRと戦えるかどうかはJava Kernelしだい。
TransferHandlerでD&Dは出来たのですが、 貼り付けがよく分からないんですけど、 どうやってメニューアイテムとかボタンとかイベントで貼り付けを起動したらいいか分かりません。 あまりググっても出てこないんですけど、日本語の解説サイトとかないですかね?
何をどこに貼り付けるの?
>>29 それはDnDの範疇ではなく、普通にクリップボードを介してオブジェクトを渡せばいいんじゃないか?
DragSourceから引き出してDropTargetへ落とすまでは一連の操作だから、
ドラッグの開始で得られたTransferableをメニューやボタンなんかの他の操作でどうにかしたりはできない。
Transferableをクリップボードへ→クリップボードから貼り付け対象へ
という二段階のそれぞれを処理するイベントハンドラをメニューやボタンにaddすればいいんじゃないか?
32 :
デフォルトの名無しさん :2007/09/29(土) 15:42:02
>>30 tableにwindows上でファイルを右クリック→コピーでクリップボードに入れたファイル(?)
を解析してそのファイルの情報
D&Dできるようにはした。
http://up2.viploader.net/bg/src/vlbg013628.jpg public boolean importData(TransferSupport support) {
if (!canImport(support)) {
return false;
}
try {
Object obj = support.getTransferable()
.getTransferData(DataFlavor.javaFileListFlavor);
List<File> files = (List<File>)obj;
for (File file: files) {
//if (filter.accept(file)) {
frame.addRowFile(file); ←このメソッドでtableにファイル情報が追加される
//}
}
return true;
} catch (UnsupportedFlavorException ex) {
// 失敗したら false を返すだけ
} catch (IOException ex) {
// 失敗したら false を返すだけ
}
return false;
}
D&Dなら投げ込むだけimportDataがたぶん起動してる。
貼り付けの時のどうやってimportDataを動かすか分からない…
その貼り付けメニューはどうやって作ってるのよ。 そのメニューに getPasteAction を設定してる?
>>33 すいません、ちょっと出かけてました…
その辺がよく分からなくて、
pastejMenuItem.setActionCommand((String)TransferHandler.getPasteAction().getValue(Action.NAME));
と書いてみました。何かでも間違ってるっぽい
最近eclipse+VEを使いはじめました。 Timerで1秒間隔でJFrameを描画しなおす為にactionListenerを定義しようと したんですが、VEで作成したパネル上で [右クリック]→[Events]→[actionPerformed] しようとしたんですが・・・・ actionPerformedがメニューに出てきません。 eclipseから全てインストールしなおしても変わりません。 何が原因なんでしょうか? 環境は eclipse 3.2 + JRE1.6.0_02 GEF 3.2 EMF 2.2.0 VE 1.2 Windows XP Pro SP2 です。
>>34 actionPerformedで
Transferable transferable = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(this);
Object obj = transferable.getData(DataFlavor.javaFileListFlavor);
List<File> files = (List<File>)obj;
以下略
ってやった方が簡単な気がする
>>35 VEでは、javax.swing.TimerはGUIコンポーネント扱いされないので、
ポップアップメニューからaddActionListenerはできない。
手書きしよう。そんなに面倒じゃない。
実際のところ javax.swing.Timerはあんまりつかわんよな 1.3以上は
>>38 そう?
手書きで精度をあまり問わないちょっとしたもので定期的実行が必要な時によく使うんだが。
使うならGUIと直交した java.util.Timer じゃね? ということかもしれない。
1.3から実装されたのはjava.util.Timer より複雑な並列動作に使うことは多いね
java.util.Timer はコールバックが EDT じゃないじゃん
単純な定期イベントってのが実際そんなに多くないから java.util.Timerってことだろ?
いまどきは ScheduledThreadPoolExecutor
>>44 1.5以上ならjava.util.concurrentはよくつかうね
SwingWorkerはpublishとのタイミングがわからんから使われないことが多いかも
つーか、面倒だよな、あれ
java.util.concurrentを学習してない俺が行き当たりばったりで実験コード書いたときは簡単に並列処理できて 文書ソフトのファイルの読み書きと文書内検索にはちょうど良いと思った。 使い捨てのコストもそれならあまり気にならないし。
>37 つまりimportしているライブラリによって選べると言う事でしょうか? Timerは置いておいてパネルだけ作って追加しようとしてもメニューに表れません。手書きしてしまうのも良いのですが、今の状況がVEの正しい挙動なのか気になるところです。 そもそも、eclipseのGUI作成プラグインとしてVEを選んだのが正解だったかも疑問です。eclipse使ってる方々はGUI作成はどうしてるのか教えていただきたいです。
>>47 「パネルだけ作って追加」の意味が分からないが、
addActionListenerはJPanelにはない。
javax.swing.TimerはGUIコンポーネント扱いされないが、
Java Beansとして置く分には可能なので、それで追加して
addActionListenerを手書きするといい。
上で挙げられているような
java.util.Timerとどちらを使うかはお好きに。
どちらにしてもGUIコンポーネント扱いはされない。
ちなみに俺はVE使ってるが、半分意地みたいなところがある。
これがベストの選択肢という自覚はない。
昔Jigloo使ったことがあるけど、
com.cloudgarden.*なクラスが勝手に作られたり
自動生成されたコードが見づらかったりと
(1メソッドに全てのコンポーネント設定コードが詰め込まれるタイプ)
不満だったので止めた。今は良くなってるのかもしれないけど。
NetBeansという選択肢もあるが、わざわざ使い分けるのが面倒くさい。
フォームにタイマーをおいて・・・というのは感覚的にVBだなぁあとおもた まぁNetBeansだとできるけど、Eclipseだと商用製品に手をつけるのがオススメ
ってかVEって使い物になるレベルだっけか? 最近は改善されてるのかな…
いや、放置されてる
上の方ではJiglooがいいねって話してた。試してみたら?
JTableのセルへ数字以外入力できないようにしたいんだけど、どうやるのが一番キレイかな? やり方はいろいろありそうだけど、ソースがきれいになりそうなやり方あれば教えてちょ。
JFormattedTextFieldとかTableCellEditorとか使うんじゃないかね。
KeyListener#keyTyped(KeyEvent e)を実装して、そこで char c = e.getChar(); if(c >='0' && c <=9) return; else e.consume(); とかしても結構すっきりして好きだなー
あ、JTextFieldかなんかを拡張してTableCellEditorを実装した上でってことねー
JTableに限らず書式つけるならテキスト部分はJFormattedTextFieldだろ・・・
JTableのセルをクリックして入力モードになるとCellEditorでの入力を行ってるっぽいけど、 セルを入力モードにせずに適当なキーを押して入力した場合はCellEditorを使ってないの? CellEditorをかならず使うようにしたいのだが、どうすればよいかな。。。
>>56 Character.isDigit使う方がよくね?
と思ったが、漢数字や全角数字にもtrueを返すんだよな。
JTableネタが出てるのでちょっと聞きたいのですが、 ヘッダ行の文字数が多すぎると、項目によっては ...で項目名が省略されちゃいますよね。 セルの横余白を調節することってできませんか?
JTable#setIntercellSpacing(Dimension) かなんかで出来なかったっけ?
>>62 列の幅変えたいなら
TableColumn column = table.getColumn(col);
column.setMinWidth(min);
column.setMaxWidth(max);
column.setPreferredWidth(width);
>>63 ,64
ありがとうございます。でもすみません,ヘッダ行についてだけなんです。
これだと,普通のセルの余白が変更されちゃうんじゃ・・・
ヘッダのサイズだけ変えたいと そう申すのか?
>66 そのとおりです。たとえば,ヘッダ行が | 果物名 | 産地 | 価格 | のようにあったときに, | 果物名 | 産地 | 価格 | としたいのです。列のサイズ自体を変更することはできますが,ある程度 小さくすると項目行が「果...」とかになってしまって見にくくなって, でも余白はきっちりとられているものですから,なんとかならないかなーと。
TableColumn#setHeaderRenderer 使えば済む話?
>68 ありがとうございます。 とりあえず,new DefaultTableCellHeaderRenderer()したものをそれぞれの列に セットすることができるようになりました。 ただ,そのヘッダ行だけ周りのL&Fから浮いてしまっているだけでなく,クリックや マウスホバーにも反応しないのが大変痛いです。 TableColumn#getHeaderRendererで中身を取って,それを操作してやるのが一番 よいのではないかと思ったのですが,うまくいかず・・・ (DefaultTableCellHeaderRenderer)JTable.getColumnModel().getColumn(0).getHeaderRenderer(); とかだとnullが返ってきてしまいます。
MVCパターンの仕組みから勉強した方がよさそうだな。
71 :
デフォルトの名無しさん :2007/10/05(金) 17:07:29
まえから気になってるんだけど、 マウスイベントで、シングルクリックとダブルクリックを識別するには、 MouseEvent#getClickCount()でボタンを押した回数が分りそうに思えるけど、 ダブルクリックをするとイベントが二回発生して、 一回目はClickCount=1のイベント、 二回目にClickCount=2のイベントというように発生するよね。 たとえば画面に丸印を用意して、その丸をシングルクリックのときは四角に、 ダブルクリックのときは、三角に変化させる。 別のボタンを押すとまた丸にもどる。というプログラムを作りたいとする。 ところがダブルクリックのときは、まず1回目のクリックでmouseClicked()が呼び出され、 二回目のクリックで再び同メソッドが呼び出される事になる。 だから次のようなコードを書いたとすると・・・ public void mouseClicked(MouseEvent evt) { int count = evt.getClickCount(); if(count == 1) { //四角を描画 } else if(count ==2) { //三角を描画 } } ダブクリのとき、1度目のクリックで四角が描画され、 二度目のクリックで三角が描画されることになってしまう。 ダブクリとシングルクリックを識別することがmouseClicked()では 実のところできないような気がするのだけど、みんなどんなやり方してますか?
べつにいいんじゃない。 結果としてワンクリック目の四角形は消えて最終的に三角形だけが残るんなら。
>>72 じゃあシングルならダイアログAが開き、ダブクリならダイアログBが開くような場合は?
>>73 そんないかれた仕様にするならどちらかをモディファイアキー有りにするかポップアップメニューにしてくれ…
# シングルクリック時にタイマーを設定してダブルクリック時にタイマーをキャンセルとかすればできなくはないか…
>>73 ダブルクリック1回のつもりが失敗してシングルクリック2回になってしまうことはよくある。
その逆もよくある。
そういうゲームならともかく、ミスったら終わりみたいなユーザインタフェイスはやめた方がいいと思う。
UI設計論の話してんじゃないから、文意をくみ取ってちょ。
>>74 まあタイマー使うことになるよね。
>>75 ワンクリでアイテム選択、ダブクリでアイテムプロパティ設定とか、よくあるでしょ。
MSのパワポとか。
>>71 こんなのは? シングルクリックの動作が遅れるのは
原理的にダブルクリックとの判別にそれだけ時間をかけないといけないからなので仕方がない
四角の描画は別スレッドなのでシングルスレッドルールに反してはいけないときはEDTに描画を投げるようにして
まあ基本的にこういうふうにクリック回数で処理を分けるUIはよくないと思うが
private final int mci = ((Integer)Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval")).intValue();
private boolean flag;
public void mouseClicked(MouseEvent evt) {
int count = evt.getClickCount();
if(count == 1) {
new Thread(new Runnable() {
public void run() {
flag = true;
try { Thread.sleep(mci); } catch (InterruptedException e) {}
if (flag) {
//四角を描画
}
}
}).start();
} else if(count == 2) {
flag = false;
//三角を描画
}
}
前々から思ってたんだけど AWTは知らないけど、少なくともSwingのコンポーネントの多くはそのコンストラクタで オーバライド可能なメソッドを呼び出したり、 そのインナークラスをイベントリスナーとして登録してるんだけど、 どう考えればいいのかな。 コンストラクタが終了する前に this を漏洩することは、 オブジェクトが整合性を整える前にメソッドが呼び出される可能性がある。 とりあえず、基本EDT限定なので、まあ、別スレッドから呼び出される心配はないかもしれないが、 それを差し引いても、例えばリスナー登録の瞬間にコールバックされたりなど シングルスレッドでも、コンストラクタ完了前に呼び出される危険がある。 とりあえず、今考えているのは、Swingを使う場合は 自前コンポーネントでthisを漏洩しないよう(ファクトリメソッドを作るとか)複雑にしても、 既に親クラスが漏洩しているので、複雑にした分だけ損。それなら、毒を食らわば皿までということで、 1.コンストラクタでイベントハンドラの登録やオーバライド可能なメソッドの呼び出しはOKとする 2.イベントの仕組みを作る場合は、イベントを登録した瞬間にコールバックしない (標準で用意されているSwingのコンポーネントはそうなってるのかなあ?) 3.オーバライドを前提としているメソッド(paintComponent()など)以外は、絶対オーバライドしない というルールでカバーできるのかなと思っているのだけど、どなんでしょうか
>>76 エクスプローラとかパワポとかテキストエディタは、実際にワンクリ目の動作 (項目選択とかカーソル移動とか) を実行してる。
その後にダブクリの動作を実行するけど、そういう流れで問題ないユーザインタフェイスになってるからな。
>>77 おー、シンプルでいいね!
漏れが考えたのはもう少し冗長だった。
勉強になりますた!
>>79 言われてみればそうだね。
クリック回数で処理を分けるのは、よほどの理由がないかぎり
やらないほうが良いのかもしれない。
82 :
78 :2007/10/05(金) 21:27:33
メソッドの呼び出しがイベントを発生する可能性があるから、 4.リスナーの登録はコンストラクタの最後にする。 が必要か。リスナーの登録メソッド自身がイベントを発生したら木阿弥だけど。 いいのかこんなので
this参照の漏洩を防止するためにはコンストラクタからイベントリスナを決して登録すべきではない
イベントリスナが this を(直接的にも間接的にも)参照してなければ コンストラクタで登録しても問題ない
Swingのイベントの話してるのか ・SwingコンポーネントのイベントはAWTスレッドでしか発行しない これだけでおけでは? ところでDesktopがWindowsXPで動かないわけだが、これはいったいどういうコードになってるんだ?
solarisチェックが入っている
>>86 同じXPでも動くマシンと動かないマシンがあるのだ
すべてJREは同一という不思議
>>87 俺が言いたいのはコンストラクタをAWTスレッドでしか生成しないと問題は少ないという意味なんだが
生成中にthis公開するのが変というのは常識だろ
>>78 の前提がおかしいのは当たり前で
それをふまえてそのままのコードでいかに問題なく動かせるかの話じゃないの?
そして現在の実装において問題が発生することはないはず(5.0までは)
結局AWT/Swingなんてソース見ればわかるとおりほとんどVM依存コードの塊なんだけど、
SunのVMで実行しているかぎり問題は表面化していないというのが正しいか
ぬるぽが発生しなさそうで、発生しそうなコード final AtomicReference<String> lastSetText = new ... @Override public void setText(Strint text) { super.setText(text); lastSetText.set(text); }
暇なので書き込み
public class NPO extends JTextField {
public NPO(String text) { super(text); }
>>89 のコード
}
として、nullでない文字列を使ってクラスNPOのインスタンスを生成すると、
その時点で、ぬるぽになる。
オーバライド可能なメソッドをコンストラクタで使うことは、
生成中にサブクラスに this を漏洩しているのと同じでやってはいけない。
このような常識を Swing は平然と破っている。したがって、Swing を使うには、
「このメソッドは、(心の目でみると) final が付いているからオーバライドしてはいけないんだ!」
などという脳内変換ルールが必要なのは明らか。
NPOって何かと思ったらNPEのことか
nuru-poとnull pointer exceptionか?
あんまりぬるぽぬるぽいうから間違えちゃったのね。
NullPointerObject
JFrame#pack()はsetVisible(true)の前に実行することが推奨されていますか? ふと以前何処かでそういう文章を読んだことを思い出し、とりあえず盲目的にそれを追記してみた所、 バキュームベッドから空気を掃除機で全部吸い取った様に空間の余裕が消え、ピッチピチに圧縮されました。 setBounds()でウィンドウサイズを設定していたのにたまったもんじゃないです。 しかしまぁそれで大体どういう動きをするメソッドか分かりました。 ただピチピチにパックするだけでは無いだろうと思い調べてみたのですが、 それ以上の情報は見つからず、必ずパックしろといった記事も見つかりません。 今までパックしていなかったにも関わらず何事も無く動いていたので、何かの勘違いだったんでしょうか。 それとも偶々運良く動いていただけなんでしょうか。
>>95 余白が欲しければちゃんとBorderなりをセットしてからpackしろ
setBounds()で固定サイズとかダメすぎ
>>97 合わせてくれるかどうかはレイアウトマネージャ次第。
推奨サイズなんだから無視されても文句は言えない。
>>96 のようにBorderでマージンとるのを推奨。
いやいや、まだまだ低速のタイトルは外せません>< # いや、そういうコトなら結構昔に変わってるはずで・・・
101 :
95 :2007/10/10(水) 20:44:20
EmptyBorderをセットしてpack、と実装したところうまく行きました。
今までモヤモヤしていた部分が引き締まったようで、とってもすがすがしいです。
>>96 さん、
>>97 さん、どうもレスありがとうございました。
>>99 デフォルトでオンはいいよね。MacではOpenGLがオンになるんだろうか・・・。
Mac では Java2D は Quartz で描いてたはずかと
レンダリング品質はどうなるのだろうか・・・ 現状だとDirect3Dモードにすると品質がかわるので使い物にならない
>>103 それがさ、Java SE 6からSunのレンダラがデフォルトになる予定なのよ。
今までのwin版sun JVMなら-Dsun.java2d.ddraw=trueがデフォルトだったな。 -Dsun.java2d.d3dは支援がまともに得られないから無効だった(パフォーマンス落ちる) 当然-Dsun.java2d.openglはバグ回避で無効。 しかし、D3D9ベースになるのかPS2.0も使うみたいだしVGAとドライバ依存がでかくなるな。 それよりNimbusはマルチバイト文字通るようになるの?w
そうなのかスナップショット版だと直ってるのか。>Nimbus けど、-Dsun.java2d.d3d=trueがデフォになるってことはJOGLでプログラマブルシェーダー使うときは明示的にfalseにしないとOpenGLのシェーダーが効かなくなるな。 (win版JVMはd3dとddrawがtureだと効かない、他はDirectXがないので関係ない) けど、バックエンドがD3D9とPS2.0に変更になっただけで 描画アルゴリズムは今まで通り、OpenGL版と同じだからパフォーマンスは対して変わらんだろうなぁ。 むしろ、OpenGLパイプラインの一部がJOGLと共通化されてOpenGL使った方がJOGLやSwingにはメリットあるんだよな。 けど、個人向けVGAのOpenGLドライバはNVIDIAもATIもバグが回避出来んしなぁ。 もういっそ、J/Directをry・・・w それよりjdk6に密かに入ってるJava Smart Card IO APIのjavax移動はマダー!? jdk6はいろんなモン隠しすぎw
>>108 JDesktop側のweeklyビルドの方が古い様子。
どうも、JDK6u5が一番始めに組み込まれてるんじゃないかと。
JDK7にもまだ入ってないし。
OpenGLでもDirect3Dでもいいが、そろそろJava2Dでαブレンディングまともに実装してほしい
スレ違いなんだが、Mistralって画像ライブラリ?でアニメーションGIFを動かすにはどうすりゃいいんだろうか 読み込んで表示まではいけたんだが、最初の1フレームだけ表示してる感じ アニメーションGIFだけMistralを使わないとか、もう全部Mistral使わないでやったほうがいいんだろうか
マルチイメージのフレーム取得なんて標準で出来るじゃん。
image I/Oだっけか 確かpngはできないけどgifできたような気がする
アニメーションGIF表示するだけなら、ToolkitでloadImageしてdrawImageの最後の引数に表示先コンポーネント指定してやれば勝手にアニメーションする
116 :
デフォルトの名無しさん :2007/10/16(火) 03:15:34
気がする!!!!!!
MIDPはするけど、SEやCDCはしなかった気が・・・
>>114 pngのアニメーション仕様なんて画像ビューアーにすら忘れ去られてる存在だから気にしないw
対応してるのは次期Fxくらい。
Mozillaの出したAPNGは対応入るのかな?
mozillaは標準規格の普及に力入れてるな・・・。 jpeg2000は使われることなく次世代策定中かorz 実際、jpeg2000の拡張仕様まで実装したらPNGどころじゃない超万能規格なんだが。 ウェーブレットいいよ、ウェーブレット!
jpeg2000はjpegよりブロックノイズとかの面で優れてるけど 良い面を全部帳消しにするぐらい現在のCPUでも結構重いってのがな……
確かにデコード重いな。PNGより重いからな。
そろそろJAIのメモリリークは直った?
標準APIであるDesktopが動かないバグが放置なのに JAIがまともになるはずないだろ・・・
1.3あたりから無視されてるバグもあるしなぁ
それは、Bug Paradeには乗ってるの?
さて流れを読まず俺がしょぼい質問する… JFileChooserのcancelボタンに表示する文字を変えるにはどうすればいい? ApproveButtonは変えれるのに、キャンセルはなぜ変えれない?
自分でダイアログを作って、その中に JFileChooser を放り込んで、JFileChooser のボタンは非表示にして自分でボタンを置くってのでどうだ
GUIの部品に日本語使いたくなるの俺だけ?(w JTextFields 名前 = new JTextField(); JRadioButton 女 = new JRadioButton("女"); JRadioButton 男 = new JRadioButton("男"); JButtonGroup buttonGroup.add(女); JButtonGroup buttonGroup.add(男); Javaの変数名はダブルバイト可だし、自然言語風に書くのがスタイルなんだし。
下2行まちがえた。 ButtonGroup buttonGroup = new ButtonGroup(); buttonGroup.add(女); buttonGroup.add(男);
>>128 ファイルシステムに依存しやすいクラス名と違ってフィールド名やローカル変数は問題は出ないよ
DBでも日本語名のカラムを使うかどうかという話と同じく宗教だから気にすんな
クラス名でつかうのはさすがにとめる
文字コードの問題は、機種やOSに依存するからな。 マルチプラットホームのJavaではまさに致命的だし、うかつに手を出せん。
変数名で機種依存の問題になるのか?
理論上unicodeで表せれば問題ないがフォント側しだいだな。
>>132 まあ、無駄に怖がってるのかも試練がな。
だが、linuxなんかで文字コードに苦しんだ俺としては、
少しでもリスクを減らしたい。
つーか 変数名に日本語使えるのか!しらんかった!
具体的には、 Character.isJavaIdentifierStart(char) Character.isJavaIdentifierPart(char) で調べられる。 識別子の頭に使えるかと頭以外で使えるかがチェックできるよ。
漢字の変数名はコンパイル通ればOKじゃね? クラス名はクラスファイルで問題出る可能性があるけど String 半角カナ = StringConverter.get半角カナ( 全角ひらがな ); 氏名フィールド.setText("ほげほげ"); JMenu ファイルメニュー = new JMenu("ファイル(F)"); JMenuItem 開くアイテム = new JMenuItem("開く"); ファイルメニュー.add(開くアイテム); みたいな使い方もできるから、大胆に使ってみたいんだが、 やっぱりなんか気がひける。w Java言語のスタイルとしては、ある意味、正しいように思うけど。
>>137 入力がうざそうだなぁw
俺カナタイパーだから、IMEオンのままコード打つの難しいし
うへぇいちいち入力切替なんてやってられんわ
俺もカナタイパーなんだけど、鍛えたんで打つのは苦にならんのよ。w DOS/VキーでATOKの話だけど、タッチタイプで親指で[変換]キーを叩いて、 全角/半角の切替をマスターしたらけっこう楽に入力できるよ。 チームの中で一人だけ漢字でメソッド名つけたりする人いるのはまずそうだが。w
JMenuItemのやJTextFieldの数が増えてきたとき、日本語で書いておくと けっこういい感じなんだけどね。わかりやすい。 本番で採用したことはないけど。 英語圏の人には災難。
>>139 ローマ打ちの人に「面倒じゃない?」ってよく言われる
ローマ打ちの方が遅いから、「平気、っーかよくわかんない」
>>137 スマン!気が引ける事もなく最近じゃ普通に使ってる。
プロジェクトとして利用を推進してる。
ホント分かりやすいよ。
>>138-140 補完されるから日本語を全部打つ事はあまりない
>>140 ではないが、Macの流儀に合わせて変換キーで全角モードに入るようにしている
>>143 まーじーかー
どうせリファクタリングでゴリっと直せるんだし、挑戦してみようかな
>>143 おーっ、勇気あるなーww
Javaはもともとダブルバイトを変数名やメソッド名に許しているんだからして、
そういう作法もありだとSunも暗黙に認めてるってことじゃないかと。
将来には見たこともないフォントで書かれたソースコードが
出てくるような気がするんだよね。
>>137 のようなコードをあんまり見たこと無いからだろう。
個人的に使う分にはまったく問題ないし。
もしIDEでちゃんんと補完が効くのなら入力もそれほど苦じゃないかもね
>>145 ちょっと気になったので・・・・フォントと文字自体は、別のものですよ。
見た目と意味、くらいの違いがあります・・・・
老婆心ながら、ちょっと調べておいた方がよいかと・・・
メソッド名にはあまり日本語を使いたくないな、気分的にw Javaを全て日本語で書くとかいう研究がどっかであったけど、 ソースがあまりにもカッコ悪くて、プログラミング言語のほとんどが英語で良かったと思っている
アニメーションGIFをImageIconとして読み込んで、JLabelにアイコンとして設定したらちゃんとアニメーションしてくれたのね で、JLabelを継承して、paint(Graphics g)をオーバーライドしたら、拡大縮小回転を楽しめたんですよ。 ここで質問です。 paint(Graphics g)が呼ばれたときに、 アニメーションGIFの何フレーム目を表示しようとしてるか検出できますかね? 拡大縮小回転のさせたBufferedImageを保存して再利用したいんだけど、 今何フレーム目とかわからないと、再利用できない気がするんだぜ
151 :
デフォルトの名無しさん :2007/10/19(金) 01:50:12
>>149 気分とかカッコいいとかそういった主観に基づい行うもんじゃないだろ。
便利なのか必要なのかどうかで違ってくる。
それも言語仕様でサポートされてるから安心して使えるし。
日本語ってなかなかにグルー言語よね
>>148 文意を理解してよw
ギリシア語やタイ語の文字のグリフで変数名が書かれているかもしれないってこと。
日本語とハングルを同時表示するには両方に対応しているフォントが必要じゃね?
SDCだったかでハングルでコメント入ったソースコードは見たことある。 日本語環境のIDE上で表示できるかどうかはしらんけど。
>>140 エキサイト翻訳ででてきた意味不明な英語がはいるよりは漢字のほうがましだと思う
そのアプリは日本国外での開発で、海外で売る気があるのかい?と
数年後メンテをやらなくてはならない場合に
ドキュメントが残ってない場合把握しやすいというメリットもある
DBで日本語の項目名いれてNetBeansなりでJPAを生成でもすれば
日本語名のプロパティが見事に生成されるわけだが、わりとみやすいし
いざとなればリファクタリング一発だから問題はねぇな
>>150 とりあえず軽量コンポーネントでpaintそのものをオーバーライドするのやめれ
>>157 NetBeansだとGUIまわりのリファクタリングはひっかかるケースが多いけど。
Javaのバイトコードって変数名なんかも保存してるんじゃなかったっけ? 変数名に日本語使えばバイトコードにも残るの?
UFT8に変換されて残るからソースのエンコーディングがなんであれ問題なし。
ローカル変数も残るんだっけか?
テストケースのメソッドは日本語がたいへんよろしい。
デバッグ情報として残すことも残さないこともできる
ローカル変数やGenericsの型指定は残らないと思った。 C#だとGenerics型は残るらしいね。 Javaのはキャストしてるだけってのが理由だろうけど。
ローカル変数はフレームごとに領域(とlongとかあるので型のサイズ)だけ 確保されてたはず。
どっちにせよ日本語変数は問題なさそうだな
>>159 NetBeansのGUIコンポーネントの話はしてないよ
リファクタリングはJPAのほう
GUIのコンポーネントのリファクタリング問題は4.1あたりで直すとか言ってたのだが
絶賛放置中
>>167 なさそうではなくて問題ない
問題が出るとしたらマッピングがおかしい場合だけ
>>159 Netbeansは、リファクタリング無しでも日本語が使えないGUIエディタまわりがあるな。
Javaで作って、何でそうなるのか問い詰めてやりたい。
そりゃ日本語使ってないやつが作ってんだからそうなるだろ。 使わないものがどうなっていようとそれは仕様です。
aho
>>170 確かに国際化は意識して対応しないとまともに動かないけど
それってsunは他言語のことなんて知りません、手抜きですって告白してるようなものなんだが
Sunは、NetBeansを支援しているだけ。建前上は。
国際化で一番ひっかかるとこってどこだろうね。 やっぱフォントまわりかな。 文字列はダブルバイトでも1文字でカウントしてくれるし、 ファイルにはUnicodeで書き出するようにすればてっとり早い。 でもアプリの性質にもよるか。 エディタのように文字を扱うのは問題おきやすいかもね。
最近は見なくなってきたけど昔は Reader,Writer を使わずに InputStream, OutputStreamで処理してる糞アプリや糞ライブラリ をよく見かけたな…
NetBeansの日本語問題は直すつもりがないらしーぜ
使ってないから別にいいよ
178 :
デフォルトの名無しさん :2007/10/21(日) 03:01:53
どういうところが糞な
>>175 よく見かけるほどJavaアプリがあったのか
確に、GUI関係は何とかした方がよい。 Appletもいらない。
↑Appletはとても役に立っているから株やってみろ。まったく見識がないところは見逃してやるがなw
Appletはこれからだよ〜。
AppletよりJava Web Startの方がいいように思うんだが、なんか使ってるとこないねぇ……。
比べるものじゃなくて、どっちも必要だと思うよ〜。
Web Startってどういう場合に使うものなの? アプリ配布じゃ駄目なのか?
>>186 バージョンが上がってもユーザーは自分の意志でダウンロードしなくていい。
望めばデスクトップのアイコンやスタートメニューのエントリも作ってくれる(後からでも)。
あたりまえだがアンインストールにも対応してる。
つまりバグを大量に仕込んだまま出荷しても、ほとんどのエンドユーザに気づかれずにアップデート可能ということか。
組み込み型DBつかってたりプラグインのあるアプリには使えないんじゃないの。
>>188 エロゲメーカーにもってこいの機能だな。
Java Web Startか 思い出せるのはV2CとTopCoderぐらい 他にももっと見てきたはずなんだが
Looking Glassもそうだったか?
>>184 WebStartは配布技術だからWebStartアプレットというのもある
まぁ、WebStartアプリケーションのほうがはるかに使いやすいけど
今のJavaだとWebStartはデスクトップなどへのショートカット、
アプリケーションの追加と削除でアンインストールが出来るなど大幅によくなってるが
スタンドアロンアプリでもショートカットやアンインストールやってほしいのにねぇ
リッチクライアントは不特定多数を相手にしたものではなくて特定のユーザー向けだから
業務アプリとかやってないとあまり見る機会はないかもしれない
WebStart普通に便利だしJavaアプリケーションの配布では結構使われてはいるんだけど そもそもJavaアプリケーションで有名なものが少ないからWebStartの知名度も…
今まで俺が使ったJavaのアプリケーションっていったら、 JDiskReportとJudeぐらいかなあ。
NetBeansとかEclipseとかIDEAとかJDevはなしか
198 :
デフォルトの名無しさん :2007/10/22(月) 00:17:16
とりあえずJavaSE6は起動速度、動作速度に関して 進歩のほとんどなかった5.0から大幅によくなってるので だいぶ未来は明るいと信じたい
WebStartの場合、おもにB2Bや社内アプリのように相手が特定できる用途がほとんどで あらかじめ信頼できるように登録しておくという手が普通に使われるんで あんま問題になってない感じ
それは AWT/Swing ネタなのか? っとか思ったけどム板のJava関連のスレで適切なのってないのな…
203 :
200 :2007/10/27(土) 22:29:24
Preferencesを設定するGUIって普通作らない部類だからなぁ 多いとは思えない アプリでいくらでも上書きできるから、ちょっとした保存くらいにしか使い道がないと思うんだけど そういうアプリとなると通常Windowsがメイン環境になるし、設定箇所なんてWindowの位置保存程度だろう ならばレジストリ直接開いたほうが速い 意味のある値ならばxmlなり別ファイルにするはず ただし、選んだ部分を一気に出してほしいというインターフェースはわりとある その場合、右側のペインにもちゃんとスクロールバーつけといてね 特に難しいことではないので高機能ってのがわからんのだが、ここが便利!という売り文句がないと難しいぞ
「需要あるでしょうか?」ってのが良く分からんのだけど、 そういうのって自分が必要だと思うから作るんじゃないの?
>>204 200じゃないけど
>アプリでいくらでも上書きできるから、ちょっとした保存くらいにしか使い道がない
ってどういう意味?
JavaアプリなのにわざわざWindows依存にしてレジストリが出てくるのも
よくわからないんだけどどういう状況を想定してるのかしら…?
207 :
200 :2007/10/28(日) 00:22:19
> 意味のある値ならばxmlなり別ファイルにするはず っていうか、XMLエディタを作っているのですよ。 > そういうのって自分が必要だと思うから作るんじゃないの? 説明が難しいのだけれど、 階層的な構造をまたいで、 離れた枝と枝を見比べながら編集をするときに、 ちまちまと必要のない枝を閉じて、必要な枝だけを開いて、 画面内に収まるようにしてから作業をするのは、かったるい。 また、階層的な構造をまたいで、 離れた枝から枝へドラッグするときに、 マウスドラッグで画面をオートスクロールさせて 画面の外にある別の枝を探しながら作業をするというのは、 スクロール量の制御がやりにくいし、 うっかり途中でドラッグを放してしまいそうで、危なっかしくてイヤ。 こんなふうに感じるのって、俺だけなのかな?と。
>>206 Preferencesの実装としてWindowsであればレジストリを使っている
>>207 >っていうか、XMLエディタを作っているのですよ。
XMLエディタです、とあなたは一言も言ってないのにそんなの他人がわかるかい
209 :
200 :2007/10/28(日) 00:49:03
先に、
> たとえば、Preferencesを設定するGUIを作るときには、
> でも、この手のGUIで作業をすると、
と、断っているように、Preferencesを設定することが目的ではありません。
Preferencesについて言及したのは、「この手のGUI」について
問題提起するための、「たとえば」の話です。
また、
>
http://sqs.cmr.sfc.keio.ac.jp/app/SourceEditor.jnlp として、ここで提案しているGUIの動作内容が、
JavaWebStartで実際に動くようなURLを示しており、
これを起動してみれば、Preferenceエディタではなく、
XMLエディタであることは、すぐに分かるのではないかと思います。
で、
> Preferencesの実装としてWindowsであればレジストリを使っている
っていうのは、regeditのこと? あれ、使いやすいですか?
なんとかく理解した。 アプリケーションに組込む設定機能を作るコンポーネントの話をしているのに Preferencesを設定するツールの話をしていると勘違いしているのだな? それでWindows環境ならPrefenrecesの実装がレジストリだから レジストリエディタで直接弄ればいいんじゃね?って話がでてきたと…
212 :
200 :2007/10/28(日) 01:26:32
>>203 のスクリーンショット一枚でXMLエディタだとわかる人はそうそういまい。
んでみてると汎用XMLエディタにはみえんね。
だとしたら設定項目用ということならツリー構造を見せる必要もないと思うんだけど。
>>212 スレタイ嫁。
それにバグパレードに載ってるんだからバグだろうさ。
お前が悩んでいることをここに報告してどうするつもりなんだ?
それは困ったね、よしよし、と慰めてもらいたいのか?
スレタイに関係のない質問をしたいなら質問スレへ、
何かの課題をやってもらいたいなら宿題スレへいけ。
215 :
200 :2007/10/28(日) 01:41:21
>>210 やっぱりコピペだよね。
ところで、階層構造のノードをペースト先とするときには、
「そのノード自身(置き換え)」
「兄ノードとして挿入」
「弟ノードとして挿入」
「子供ノードとして挿入」といったように、
何通りかがあるのだけれど、Ctrl-Vで張り付けるとしたら、
どれをデフォルトにするのが感覚的に正しいのだろう?
ちなみにFreeMindでは、
「ノードのアイコンの微妙に上のほうを指しているときは兄として挿入」
「ノードのアイコンの微妙に下のほうを指しているときは弟として挿入」
「ノードのアイコンの右端のほうを指しているときは子供として挿入」
的なGUIを実現しているけれど、
JTreeでは、getClosestPathForLocationとかだと、
指定したx,yがどのノードに一番近いか、ということしかわからないので、
むずかしい。
Preferencesって言葉を初めて知ったw
>>215 感覚的には弟として挿入かな
CTRL+SHIFT+Vだったら子供として挿入とかもありかもしらん
218 :
200 :2007/10/28(日) 02:33:52
>>214 Preferences APIでの保存先の実装は、
Windowsではレジストリ、LinuxなどではXML形式のファイルとして保存される。
ここでの話題にもビミョーに関連すると思ったので、話のついでに書いてみた。
bug_idを示せば、ほかのひともvoteしてくれるかもしれないし。
でもまぁ、ここはGUIのスレなので、スレ違いですね。ごめん。
これから「汎用のもの」を目指して、
XMLエディタの開発を進めていこうと思っています。
個人的にはSwingというかJTreeというか特にTreeCellRendererの
あたりが好き:-)なので、階層構造を編集するためのGUIコンポーネントを、
ユーザ側・開発者側の両面から、もうちょっとだけ使いやすくする
工夫についても、取り組んでみるつもり。
コメントくれた人、ありがとう。名無しに戻ります。
>>215 ,217
一瞬、VIPスレだっけと思ってしまった俺は病んでいる。
リッチなSwing部品、という点で言うとSwinglabで作ってたりするけど
画面ごとの仕組みを含んだライブラリって決定版がないね。
>>203 の仕組みも、そんなに便利かなぁと思う。
左で選んだのが右にタブでどんどん、というのでもいいし
左で選ぶの面倒だから、eclipseなんかみたいに項目フィルタあった方が便利だし。
設定パネルなら、一度に見せる必然性ってあんまないのよねぇ・・・
よくあるやりかたとしては、 ウィンドウをSplitPaneで分割したり、複数のウィンドウを開いたりして、 それぞれの画面で、同じ文書の、別の場所を表示できるようにする、 というものがある。 MVCできちんと作ってあって、 同じModelに対して複数のViewを表示できるのなら、わりと簡単に実現できる。 Eclipseとかでは、タブを画面内でドラッグすると、 左右ないし上下での好みのスタイルで画面分割できる。 また、タブを画面外までドラッグすると、 新しいウィンドウを開くことができる。 こうした機能は、操作性もわりといいと思う。
Swingでも、JTabbedPaneのタブへのドラッグ動作についての作り込みと、 JToolBarのfloatable機能を組み合わせれば、似たようなことができると 思うのだけど、面倒くさいよな
222 :
_ :2007/11/01(木) 18:01:56
//ラベル作成 Border wborder = new LineBorder(Color.white, 1); JLabel Ac1 = new JLabel(""); Ac1.setBorder(wborder); Ac1.setHorizontalAlignment(JLabel.CENTER); Ac1.setBounds(400,100,80,30); add(Ac1); // ボタン作成 btnEnter =new Button("追加"); btnEnter.addActionListener(this); add(btnEnter); btnEnter.setBounds(150,250,80,80); //ボタンイベント public void actionPerformed(ActionEvent e){ Button bt = (Button)e.getSource(); if(bt==btnEnter){ Border wborder = new LineBorder(Color.black, 1); Ac1.setBorder(wborder); Ac1.setText("Push"); } } ボタンを押したら指定の場所にラベルが表示されるようにしたいのですが この方法ではなぜか出来ないのですがどうしてでしょうか どなたか教えてください
>JLabel Ac1 = new JLabel(""); Ac1 がローカル変数だからじゃね たぶん actionPerformed の中から見てる Ac1 と別物
224 :
_ :2007/11/01(木) 18:39:11
どうすればよいのでしょうか? public void actionPerformed(ActionEvent e){ Button bt = (Button)e.getSource(); if(bt==btnEnter){ JLabel Ac1 = new JLabel(); Ac1.setBounds(400,100,80,30); Ac1.setText("Push"); } このように書いてみたんですがまったく表示されません.
226 :
デフォルトの名無しさん :2007/11/01(木) 22:16:24
>>225 addも書き加えましたが出来ませんでした。
本当に困ってます。
誰か助けてください。
全ソースうpれ
228 :
デフォルトの名無しさん :2007/11/01(木) 22:34:06
これなんですがまったく出来ません。 public class Practice extends JFrame implements ActionListener{ Button btnEnter; public static void main(String[] args){ Practice frame = new Practice(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(50, 50, 900, 700); frame.setTitle("研究のGUI"); frame.setVisible(true); } Practice(){ JPanel p = new JPanel(); btnEnter = new Button("追加"); btnEnter.addActionListener(this); add(btnEnter); btnEnter.setBounds(250,120,80,80); getContentPane().add(p, BorderLayout.CENTER); appRun(); } public void appRun(){ } public void actionPerformed(ActionEvent e){ Button bt = (Button)e.getSource(); if(bt==btnEnter){ JLabel Ac1 = new JLabel(); Ac1.setBounds(400,100,80,30); Ac1.setText("Push"); add(Ac1); } } }
なんつーかgetContentPaneつかっていたりつかわなかったりばらばらだな コンストラクタで設定したり、mainの中だったりここも不統一だし レイアウトマネージャもしらんっぽいね そこから勉強したらどうかな
add(Ac1); のあとに、画面の再描画させたらええんちゃうかな? コマンドは忘れた
>>229 それや、add(Ac1);の前にgetContentPaneがいるんや
たぶん、BorderLayout.CENTER の JPanel に全面覆い隠されてるんじゃないか JPanel なくしてみ getContentPane は最近は要らない
233 :
デフォルトの名無しさん :2007/11/01(木) 23:47:16
JPanelをなくすとなぜか画面が全てボタンになってしまいます add(Ac1);の前にgetContentPaneを書いても変わりませんでした。 どなたかお手数ですがやってみてもらえないでしょうか?
じゃあレイアウトマネージャをなくす。 setLayout(null);
>>233 だからレイアウトマネージャが基本なんだから勉強してよ
コンテントペインはボーダーレイアウトがデフォで、
パネルはフローレイアウトがデフォってことでしょ?
推奨サイズとかも覚えてください
>>234 何も考えずにそれをすると一番難しいんだけどね
JPanelに推奨サイズを指定してpack、
JPanelはnullレイアウトというのならまだわかるけど
setBoundsというのが真っ先に出てきたあたりで何を参考に作ったのかが気になる
ButtonをJButtonに変えろよ こんな形でAWTとSwingを混在させるなw
偉そうなわりに、ズバリの回答書く奴いないのがなんとも
偉そうな
>>238 がズバリの回答を待つとしよう
重要なヒントや答えまででてるのにこれ以上何を言うのか楽しみだ
240 :
デフォルトの名無しさん :2007/11/02(金) 00:19:49
ボタンはJButtonにしたら普通の大きさになったんですが 肝心のラベルがボタンを押しても出てきません ただそれがやりたいだけなのに何故なんでしょうか? 正直どなたか全文を書いていただけないでしょうか?
ヒント200%だしてるのにそれを無視して全部おしえるなんてこの板ではあんまりありえん 答えだけがほしければ宿題スレへどうぞ
>正直どなたか全文を書いていただけないでしょうか? つ 練炭
>>240 勘違いすんな。ここはくだすれでもないし初心者スレでもない。
public class Practice extends JFrame { JPanel labelsPanel; public Practice (){ JButton appendLabelButton = new JButton ("ラベルを追加"); appendLabelButton.addActionListener (new ActionListener(){ public void actionPerformed(ActionEvent event){appendLabel();}}); JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new FlowLayout()); buttonPanel.add(appendLabelButton); labelsPanel = new JPanel(); labelsPanel.setLayout(new FlowLayout()); labelsPanel.setPreferredSize(new Dimension(400, 400)); add(buttonPanel, BorderLayout.NORTH); add(labelsPanel, BorderLayout.CENTER); } void appendLabel(){ JLabel helloLabel = new JLabel ("Hello"); helloLabel.setBorder(BorderFactory.createLineBorder(Color.white, 1)); helloLabel.setHorizontalAlignment(JLabel.CENTER); helloLabel.setPreferredSize(new Dimension(80,30)); labelsPanel.add(helloLabel); labelsPanel.revalidate(); } public static void main (String[]args){ SwingUtilities.invokeLater(new Runnable(){ public void run(){ Practice frame = new Practice (); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); frame.pack();frame.setVisible(true); } }); }}
245 :
244 :2007/11/02(金) 03:06:18
>>228 こんな感じでいいのか?
今度から宿題は宿題スレいってくれな?
246 :
デフォルトの名無しさん :2007/11/02(金) 04:17:09
>>24 4
超マジレスに笑ったw
でもこれがさらっと書けない職業プログラマが多いんだよな・・・
自演乙
というか研究のGUIってなんだw 何を研究したらあんなソースになるのか知りたいw
250 :
デフォルトの名無しさん :2007/11/02(金) 10:19:13
>>228 実行して出てきたGUIにワロタ。センターに足す動けばいい的例。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Test extends JFrame {
public Test() {
JButton button = new JButton("Add Label");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
add(new JLabel("Hello, world!"));
getContentPane().validate();
}
});
add(button, BorderLayout.SOUTH);
setSize(100, 100);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Test();
}
});
}
}
>>246 インナークラスとかAWTイベントディスパッチスレッドとかしらないで
GUI扱おうとしてぼろぼろになる例はよくみるね
特にスレッド周りがぼろぼろくさい
基本を勉強せずOJTという名の下に無理やり投入される場合そうなりやすい
デバッグ時には動いていてもたまに動かないとか厄介なバグいれこむのがうまい連中がね
>>252 200で言及済
次回以降、安定版のリリースのときには署名タイムスタンプを使うことにするよ。
windowsのJFileChooserとかJOptionPaneでキャンセルが"取消し"って表記されるのがウザい… windows標準みたいに"キャンセル"って書くにはどうすればいいだろ…
よくそんなん気づいたな
UIManager.put("FileChooser.cancelButtonText", "キャンセル"); UIManager.put("OptionPane.cancelButtonText", "キャンセル");
すごい・・・ いつも思うのですが、そのようなフィールドやプロパティの名前はどうやって調べているのでしょう。 ソースを見るしかないのでしょうか?
こういうの探してました! ありがとうございます。
260 :
254 :2007/11/04(日) 15:35:25
>>256 ありがとう。
これで見た目ほとんどwindowsっぽくなった。
FileChooserの複数選択をwindowsみたいにドラッグでびやーって範囲広げてその中全選択とかやってみたいけど、
さすがにこれはキツいな。
単純なファイル選択ダイアログならAWTのほうつかうといいよ 機能がほとんどないけど、それで足りるのならね
1. URL url = Hoge.class.getResource("../resources/book.gif"); 2. URL url = ClassLoader.getSystemClassLoader().getResource("../resources/book.gif"); このような2つのコードでリソースを取得しています。 1をHogeクラスで使用するとちゃんとURLが返ってきますが、Hogeのインスタンスであるインナークラスから呼び出すとnullが返ってきます。 しかし2のようにシステムクラスローダから呼び出すと、Hogeからの場合もHoge中のインナークラスからも呼び出すことができます。 そこで質問なのですが、 Q1.インナークラスからの相対パスは、そのインナークラスの属するクラスからの相対パスとは異なるのか(上でいうHogeのインスタンスのインナークラスとHogeクラスの関係) Q2.上の実行を、eclipseで行うと結果が逆になる(2がうまくいかず、1がうまくいく)のですがその理由。 答えづらい質問ですみません。もしよろしければ教えてください。
相対やめたほうがいいでよ どうせリソースは決まった場所におくでそ
確かにそうですよね。 なんだかそこらへん結構複雑そうですし・・ 分りました。以後リソース読み込みは絶対指定にします。 ありがとうございました!!
今更だがV2Cすげー
JOptionPaneに、「次からこのメッセージを表示しない」とかチェックボックス付けたいんですけど、 何かいい方法ないですかねぇ
JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.add(new JLabel("本文")); panel.add(new JCheckBox("次からこのメッセージを表示しない"), BorderLayout.SOUTH); JOptionPane.showMessageDialog(parent, panel);
270 :
デフォルトの名無しさん :2007/11/09(金) 23:36:58
いまからSwingアプリケーションつくるからなんかお題くれ 条件はネット接続しないこと 開発環境はJDK6u3、NetBeans6.0
>>270 Jazzの自動作曲。高品質の楽譜の表示と印刷。
272 :
270 :2007/11/09(金) 23:45:27
swing jazzじゃなくてもいいんだが… swingはあくまでもguiのフレームワークに過ぎないから、 swingでアプリケーションを作るって言っても範囲が広すぎるんじゃないかな? guiでアプリ作るけど何か無いかなって言うようなものだから、もう少し幅を狭めないと。
>>270 ドロー系お絵書きソフト、SVGでの読み書き可能なものを、OSSで。
>>271 少しジャンルは違うがヤマハの「初音みく」とか言うの良さそうじゃないか?
じゃあ懐かしのブラウザ HotJava を今の技術で作って
277 :
270 :2007/11/09(金) 23:54:59
SVGとか仕様しらねー HotJavaとか初めて聞いたし Java暦1年半ですがなにか?
クリップボードアプリケーションとか。 ・・・Swing関係ないかw
>>274 Javaじゃないが、それの本命はinkspaceだろうな。
swingの勉強がてらに作るならお絵描きアプリくらいが適当なのかも
ローカルファイル閲覧専用とかはアレだし、ブラウザはネット接続って点で270の要求を満たしてないかも。 何かオンリーワンな機能をつけたドローイングかペインティングアプリケーションとかいいんじゃないか?
linerみたいな画像ビューア 俺が作ってるのもそれだけどw
作りたいの作ればとしか・・・
PDFの背景を初音ミクにかえるアプリつくるわ
>>285 Swingと関係なくないか?
あとPDFオープンするのに環境依存コード書くはめになるのもちょっと嫌かな
まあ、きもちいいネタだ。
はやくu4こねーかなぁ JFileChooserおそくてかなわんわ
289 :
デフォルトの名無しさん :2007/11/10(土) 03:56:17
>>288 だな。死ぬほど遅い。いくつかlazyになるように書き直した。
u4 で直ることになってるの?
291 :
デフォルトの名無しさん :2007/11/10(土) 12:52:45
まだin progressの状態。
292 :
デフォルトの名無しさん :2007/11/10(土) 13:47:36
今まで、エディタとプロンプトでしこしこがんばってきたんだけど 金もできたので聞きたいとおもう。GUIつくるだけなら、JBuilderっていい? 無料版はつかったことあるけど、有料版は良いの?
今のJBuilderは昔とぜんぜん違うぞ SwingベースからEclipseベースになった 少なくとも昔のJBuilderはこつをつかまないと しらないうちにボーランドのコンポーネント使って汚染されて 他の環境で手軽にコンパイルできなくなるのが欠点だった あとJBuilderはGUI作成においてNetBeansぬいたことはないよ GUI使う、使わない以前に開発効率考えるとIDE使わないのは論外だと思う
295 :
デフォルトの名無しさん :2007/11/10(土) 14:12:00
>>293-294 thx
NetBeansの方が上なんだ。じゃあそうするよ。
IDE使わないと論外か。。じゃあ、買ってみるよ。
ありがとう。
NetBeansは無料のIDEだぞ
最近はOSしか買わなくなったなぁ。
まだUbuntu使ってるの?
もうエディタと make でシコシコするのは時代遅れですかそうですか でも V2C はIDE使ってないらしいね
時代遅れも何もそんな時代はあった事がない
ツール=IDEでポトペタできて楽ちん ソフトウェア=IDEがGUI部を隠蔽しててわずらわしい 規模によりけりじゃないかなぁ。
IDEはぽとぺたというよりコーディングが楽になるほうがおおきいかと まぁ、groupLayoutは自前でコードかくきにはならないけど
いきなりですまないのだが、JLabelやJButtonを縦書きにする方法ってある? 横長じゃなくて縦長のボタンやラベルを使いたいのだけど。
new JLabel("<html>縦<br>書<br>き<br>ラ<br>ベ<br>ル"); new JButton("<html>縦<br>書<br>き<br>ボ<br>タ<br>ン");
>>303 そうだよね。補完とかリファクタリングとか使用状況検索とか便利だよね。
GroupLayoutは最初は便利だと思ったけど、弄ってるといきなり位置が
すっ飛んだりして、いまいち使いづらい。よく出来てるとは思うんだけど。
エディタをもっと分かりやすくすれば良さそうだけど、どうすればいいのやら。
最近は、従来のものを組み合わせた方が思ったようにできていいなと思ってる。
>>304 その発想はなかったw
90度回転させて縦にできるといいんだけどな
SwingのL&Fでかっこいいのないかなぁ。
国外のL&Fを今日一つためしてみたんだが、ダブルバイトが全滅。
ttp://regis.risp.pl/ まあ、外観に変化つけるときってフォントいじるから当然かな。
L&Fを自分でこさえるのは手間かかりすぎてそこまで時間とれないし、
MetalのOceanで負けとくのが今のとこ勝ちなのか。orz
ニンバスニンニン
>>310 おおっ!
なんかすごそうだけど、まださっぱりわからん。
Java SE 6 Update N Early Access Programてのを落としてくればいいのかな。
これそのうちJDKに正式採用されるのかしら?
Synthって流行ってないのかね?
あれは結局全部自分で定義しなきゃいかんからLFそのものを作りたい人向けとちがうの?
そうだけど、ホームページの壁紙やボタン、仕切り線みたいな感じで素材化されてないのかなと。 Javaアプリケーションが普及してないってことか。
画像ファイルはりつけたボタンになってしまってもいいの? アイコンはともかくボタン全体が画像で作られているのはどうも。 融通効かないし。 ボタンが数個しかないアプリとか、ゲームとかならそういうのも良いかと思うけど。
>>308 作ってみた
public class VerticalJButton extends JComponent{
private JButton button=new JButton(){
public void repaint(long tm,int x,int y,int width,int height){
VerticalJButton.this.repaint(tm,y,1-x,height,width);}};
public VerticalJButton(String text){
add(button);button.setText(text);
enableEvents(AWTEvent.MOUSE_EVENT_MASK|AWTEvent.MOUSE_MOTION_EVENT_MASK);}
public Dimension getPreferredSize(){
Dimension d=button.getPreferredSize();
return new Dimension(d.height,d.width);}
public void doLayout(){
button.setBounds(0,1-getWidth(),getHeight(),getWidth());}
protected void paintChildren(Graphics g){
Graphics2D g2=(Graphics2D) g.create();
g2.rotate(Math.PI/2);g2.translate(button.getX(),button.getY());
button.paint(g2);g2.dispose();}
protected void processMouseEvent(MouseEvent e){
e=new MouseEvent(button,e.getID(),e.getWhen(),e.getModifiers(),e.getY()-button.getX(),-e.getX()-button.getY(),e.getClickCount(),e.isPopupTrigger(),e.getButton());
button.dispatchEvent(e);}
protected void processMouseMotionEvent(MouseEvent e){
e=new MouseEvent(button,e.getID(),e.getWhen(),e.getModifiers(),e.getY()-button.getX(),-e.getX()-button.getY(),e.getClickCount(),e.isPopupTrigger(),e.getButton());
button.dispatchEvent(e);}}
317 :
デフォルトの名無しさん :2007/11/12(月) 23:11:37
NetBeans5.5.1使ってるんですが、GUIビルダーで質問です JFrameフォームでフレームをつくり、 別途JPanelフォームでパネルを複数つくります。 アプリケーション起動後に、パネルを好きなタイミングで、フレームにadd()したいのですが、 SwingLayoutの影響でうまくいきません。 なにか特別なやり方があるのでしょうか? それともGUIビルダーでは不可能なのでしょうか。
>>316 g2.dispose();
なんだけど、これはpaintComponent()をオーバーライドしたときとか、
Graphicsオブジェクトを使ったあとはかならず実行したほうが良いの?
今までそうしてこなかったのだけど、APIリファレンスみると、
したほうが良いような感じなんだけど、いまいちわかりにくい日本語。
少なくともpaintComponentでは不要じゃないかい? OverrideしなくてもpaintComponentは呼ばれるだろうし
>>318 Graphics#disposeでグラフィックコンテクストを開放しないといけないのは自分でそれを確保したとき。
他人が確保したものを許可無く勝手に開放するのは行儀が悪い行い。
paintComponent()をオーバーライドしたときに開放するとかはどこに書いてあったの?
>>320 dispose
public abstract void dispose()このグラフィックスコンテキストを破棄して、使用中のシステムリソースがあればそれを解放します。
Graphics オブジェクトを dispose の呼び出し後に使用することはできません。
Java プログラムが実行されていると、短時間フレーム内で多数の Graphics オブジェクトを作成できます。
ガベージコレクタのファイナライズプロセスも同じシステムリソースを破棄しますが、関連するリソースを手動で解放することが推奨されます。
つまり、長期間に渡って完了まで実行されない可能性があるファイナライズプロセスに依存するよりも、
このメソッドを呼び出してリソースを手動で解放してください。
コンポーネントの paint メソッドと update メソッドに引数として提供される Graphics オブジェクトは、
こうしたメソッドが復帰したときにシステムによって自動的に解放されます。
効率性を確保するには、Graphics オブジェクトがコンポーネントまたはほかの Graphics オブジェクトから直接作成された場合だけ、
そのオブジェクトを使って終了したときに dispose を呼び出すようにプログラミングしなければなりません。
-----------------------------------
ということらしいんだが、dispose()不要のような必要なような、ケースバイケースのような
説明に読めたのよ。スマソ。
322 :
316 :2007/11/13(火) 00:12:45
>>318 その g2 は g の単なるキャストじゃなくて、 g.create() で生成したものだから。
放っておいても害はないけど、解放するべきなんじゃない?
>コンポーネントの paint メソッドと update メソッドに引数として提供される Graphics オブジェクトは、 >こうしたメソッドが復帰したときにシステムによって自動的に解放されます。 Graphics g = createGraphics(); //--->呼び出し paintComponent(g); //<---復帰 g.dispose(); こういうことでしょ。きっちり書いてるじゃん。
>>322 いやだからさ、おかしいなんていってないよ。
g.dispose()と書かれたソースを今までみなかったのだけど、
開放しといたほうがいいのかななどと思ったの。
これってどういう意味? > Java プログラムが実行されていると、短時間フレーム内で多数の Graphics オブジェクトを作成できます。
>>323 paintComponentについては暗黙の了解?
説明としては抜けてる。ソース嫁といわれりゃあっそう。
>>326 paintComponentについてはJComponentのドキュメントを読めば理解できるかと。
>>321 それ勘違いしてるぞ
ファイナライザとか関係ない
何でよ
なんでφならいざが?
>>310-311 Nimbusはイメージを使わずに、すべてJava2Dで書かれてるから、解像度に依存しないのがいいよね。
>>316 動作確認してみた。いいね!
やり方もエレガントだと思う。
アイコンもついてたら完璧かも。
>>331 うん。
作ってるアプリが終盤で、外観の体裁ととのえてるとこなんだけど、
今無理してL&Fいじくるより、Nimbusが標準になるまで待ったほうがトクだろうなぁ。
L&Fを自分で作ったりカスタマイズしてももすぐに時代遅れになるしね。
Metalも出てきた当時はけっこうクールに見えたし。
L&Fは服きせかえるみたいに使い捨てていきたい。
disposeは後始末 自前でgraphicsを生成した場合必須 ファイナライズの話はFileのIOをcloseしないというのと同じ話 そしてかってに呼び出し側でcloseしたらあかんだろというのと同じ
>>325 > Java プログラムが実行されていると、短時間フレーム内で多数の Graphics オブジェクトを作成できます。
いっぱい作成できると、なんとなく、うれしいジャン?
とりあえず、「多数の Graphics オブジェクトを作成する可能性があります」の誤訳に一票
久しぶりに覗いたぜ。 invokeLaterはinvokeLater間違えてAWTのSystem Queueに送ったことあるorz MIDPのGraphicsにdisposeがなくてどうやってメモリ空けようか悩んだことがあるorz Nimbusのマルチバイト化けは直ったらしいがあれ重くないか?スケーラブルなLaF目指してるんだろうけど・・・。 ただでさえ、未だにjavaは重いという迷信が信じられてるからなぁ。
迷信というかJFileChooserは今でもひどくない? ファイル多いとファイルリストの取得とは別の何かで重くなってる印象が・・
>>337 JavaSE6u2からすごいことになった
どうすればあそこまで悪化できるのかと
>>338 今はソース見れるんだから自分で調べられるよ
今OpenJDKで公開されてるソースと今公式ビルドに使われてるJDKのソースは違うぞ。 jdk6がOpenJDKベースになるのはまだ先。
>>337 今までひどすぎるとまでは感じなかったんだが、そんなにたくさんのファイルリストを
出すという局面に遭遇してないだけだったりする。
100個くらいリストが出ててもなんともないと思うんだが、いくつくらいだとひどいことになるの?
なんでファイル列挙系はバグが入りやすいんだろうな。 なんか共通したミスでもあるんだろうか?
ネットで調べると、でかい圧縮ファイルがあるとおかしくなるらしいね
>>336 7年後サクサク動くニンバスみて、軽いけどもう古いよなこのLaFとかいってるような気がすれ
ニンバスかっけぇんだけどさ、どうもスクロールバーが馴染めない…
文字はみんな□になってるけどSwingSet2のデモみるかぎり、遅いとは感じないな。Nimbus。 そんでこれいつからリリースされるのかな。
>>342 u2以降は1個の表示でもすごい遅い
u1まではさくさく
まぁ遅いといわれたり直ったりエンバグ繰り返してるのがJFileChooserだから・・・
JFileChooserはネイティブ頼りなんだっけ?エンバグの発生率は仕方ないと思う。
350 :
デフォルトの名無しさん :2007/11/14(水) 17:18:38
デスクトップのzipをどけると改善するみたい。開発で頻繁にテストする人はzipを 一時的にどけておくといいかも。
つーことは、JFileChooserはファイルの中身を調べるようなことまでやってるのかな。
Windowsのエクスプローラとか、Javaのクラスパス解決処理みたいな どっかのAPIを流用したことによる副作用とかいうオチだったらちょっと笑える
DirectXでIMEの例があるから笑うに笑えない・・・。
>>351 実行形式の場合、そのファイルのリソースとしてアイコンが格納されているんだから、
API経由か直接かは知らんけど、当然ファイルの中身は見てるはず。
で、PEとかELFとか、実行形式のフォーマットを決め打ちできない分、
アイコン読み取りが複雑になってるんじゃなかろうか。
JFileChooserのアイコンってFileSystemView#getSystemIconでしょ これが遅いってことか?
>>354 つまり世の中のGUIは全てファイル選択ダイアログは遅くて使い物にならない、と
それにu1まではそんなに遅くなかった
1.4.2はいくつかのバージョンが遅いけど
358 :
デフォルトの名無しさん :2007/11/15(木) 22:19:39
>>357 jPanel1.revalidate()
359 :
デフォルトの名無しさん :2007/11/16(金) 00:00:48
ああ、Swingか・・・。
>>357 HelloボタンをaddしたあとでMyFrame#pack()を呼ぶ
追加はされてるけど、flowレイアウトで1つしか表示できないサイズだから消えてるようにみえるだけ
>>358 で正しいよ
revalidateだけでは
>>357 のソースでは「追加と同時に表示させる」ことにはならないから
>>360 で正しいよ。
>>362 おまえはバカか
それはレイアウトマネージャの問題であってrevalidate()で十分尽くされているんだから358が正しいんだよ
364 :
357 :2007/11/16(金) 01:31:12
レス感謝です
>>361 revalidate()って意味ありますか?
revalidate()せずに、pack()だけで思い通りに表示されました
365 :
デフォルトの名無しさん :2007/11/16(金) 01:39:53
>>364 いろいろ作っているうちに分かるよ。pack()でレイアウト変更後の再描画なんてよっぽど
異常なUIでもない限りやらないよ。pack()の方でフレームを広げてボタン押してみ。
366 :
357 :2007/11/16(金) 02:01:39
たとえば、ウインドウを最大化してるにも関わらずpack()でウインドウが小さくなるのはおかしいということでしょうか?
367 :
デフォルトの名無しさん :2007/11/16(金) 02:33:01
それでいいならいいけどさ。
370 :
デフォルトの名無しさん :2007/11/16(金) 06:06:06
>>369 Bug ID: 6578753
Votes 65
Synopsis JFileChooser in 6u2 slow on Windows
Category java:classes_swing
Reported Against
Release Fixed
State In progress, bug
Related Bugs 6491795 , 5050516
Submit Date 10-JUL-2007
アプリの二重起動についてなんだが、二重起動を確認したらそこでシャットダウン するのはよくある方法だと思うんだけど、たとえばNetBeansはもっと賢いやり方 をしている。 NetBeansが動いている状態で、それが最小化した状態でタスクバーにあるとする。 その状態でNetBeansのアイコンをクリックするなりして二重に起動しようとすると、 二重起動にはならずに、タスクバーにあるものが画面に現れる。 これってどうやったらできるのかな・・・。
>>371 Javaにはミューテックスなかったっけ?
排他制御用のオブジェクトは同一VM上の同期に使うやつで プロセス間は別の仕組み考えないとダメ。
>>371 起動用のアプリを別に分ける。
というか、そのためにexeを用意しているようなもん。
んじゃあ手動でミューテックス作っちゃうとか。
テキストファイルで現在起動中のプログラム・インスタンス数を数えておいて、
起動時に中身が1なら起動しない。
もし
>>371 のいうような挙動をしたいなら、プログラムでミューテックスファイルを監視しておいて、
ファイルの中身が2になった瞬間タスクバーからプログラムを出せばいい。
ここまで書いて思ったんだが、Swingでタスクバーから出すとかそういうそうさって出来たっけ?
自プロセスのウィンドウを最小化解除するだけなら Frame#setState でできる でもそのファイルを監視ってのはどうするんだ タイマで1秒ごとにタイムスタンプを確認するとかか
>>376 ファイルやフォルダで変更があったときにイベント起こすような機能なかった?
>>377 NIO2で追加予定。
標準APIでなくてもいいなら、JConfigとかには付いてたと思うし
>>376 のやり方で自力で実装してる人も多いんじゃないかと。
379 :
371 :2007/11/16(金) 19:25:50
一眠りして考えたんだが、 アプリが独自にポート開いて監視しておく。 別プロセスでアプリが起動したら、そのポートを叩く。 応答が返ってきたら、そのプロセスはシャットダウン。 応答した側のプロセスはFrame#setState でいけそうな気がするんだが、けっこうめんどくさいね。 もっと簡単にできないもんだろか。
Windowsファイアウォールとかにブロックされそうだが
ファイルサーバとかでもたまに思うんだけど、 OSはロックサーバが標準で付いててほしいんだよな CVSのロックサービスだってそのためについてるんでしょ。 AbstractFactoryパターンでインタフェース書いて、Winだけ実装作ろうかな
Preferencesを使うってのはどうかな。
>>380 ファイアウォールの設定はユーザの責任じゃないかい。
なんにせよファイルにフラグを記録するやり方だと、アプリが異常終了して、 フラグの書き換えができなかった場合、次に起動しようとすると困ったことに なりやすい。
プラットフォームネイティブのMutexやセマフォを使うか、 オンメモリデータベースを使うってのがいいのかも。
ファイルチューザ同等の機能を持つファイルチューザを独自に作る場合、 こうやらねーとすっげー遅くなるぜ?っていうTips教えてくれ
>>387 普通に作れば遅くならんだろ…
JFileChooserはネイティヴLaFに近づけるために
いろいろ細工してるのが裏目に出てるだけだと思うぞ
http://touch.moe.hm/touchup_pict/download/1195233390.jpg こんな上下2ペイン構成のGUIアプリケーションを作りたいと思ってます
上ペインのJButtonをクリックすれば、下ペインのJPanelが切り替わるように作ればいいと思うんですが
普通どのようにやりますか?
■作ったサンプルではこのようにしてます
初期化で空のpanel1をつくり、その上にpanel2をadd()する
別のボタンが押されたら、panel1に載っているpanel2をremove()、panel3をadd()、validate()
ちょっとわかりづらいかもしれませんが、もっといいやり方ありそうでしょうか
っ CardLayout
TabbedPaneで、タブにアイコン貼付ければいいような気がした。
>>390 使ったことないけどカードレイアウトに同意
>>388 Fileが遅くなってるから、普通に作ったら遅くなるよ。
しったか乙。
JFileChooserの速いバージョンを作りたければ、FastFileを使うといいよ
395 :
371 :2007/11/17(土) 10:35:15
>>379 のやり方実装してみたけど、うまくいくみたい。
>>395 やってみた事ないけど、
途中でトラぶってコネクションクローズの前に死んだ場合は二重起動しちゃうの?
>>396 ローカルホストの接続でとらぶるって、どんなときにとらぶるかな。
そこらへんの想定外のことがあるかどうかは気にはなってんだけど。
>>397 他のアプリがそのポートを使っていて重複する場合
ファイアーウォールが入っていてはじかれる場合
今どきめずらしいけどLANがついてないマシンだとどうなるっけ?
> 今どきめずらしいけどLANがついてないマシンだとどうなるっけ? 頭大丈夫か?
スタンドアロンのPCがあるからネットワークサービス止めて試してみようか? たぶん、接続段階で例外投げられたはずだけど。 jarでクレw クローズ処理をfinalyでやってるなら途中でシャットダウン入るとfinalyブロック中断されるからそれでもアウトだね。
イーサネットがあってもなくてもlocalhost(127.0.0.1)にアクセスできるだろ… # TCP/IPを外してあればできないのか?
ネットワーク完全にとめるとループバックももちろん完全にだめ Win95以前はまずループバックアダプタいれての開発がデフォだったな
そういうアダプタ用MACアドレスもあるのかな?別に無くても困らないけど。
>>402 そもそも Win95 ってデフォルトのインストール
だと TCP/IP が組込まれてないようなOSだろ…
独自のネットワークサポートするから良いんです。 ゲイツ「インターネットなんて一般人にはやんねーよw」 時代の産物だからな。時代の流れか。
JDK1.5がそもそもWin95だともう動かんのじゃね? とくにGUIまわり。
サポートの話なんて誰もしてないだろと
設定でTCP/IP無効にしたらダメなんじゃねぇの?
アプリの性質にもよるわな。 DBやネットに接続するようなアプリなら、イーサカードが使えない環境に インストールされることなんて無いしさ。
「カードがない環境ではlocalhostもアクセスできない」 というのが当然みたいにいってるが、だれか試したことがあるのか? その理屈だとNICがない環境ではローカルでのサービスは動かんのだが。
>>411 NICないと実際IPサービスはうごかんよ
ループバックいれてれば動くが
という常識的な流れだろ
>>407 あんまり関係ないけど・・・、SunはMacのJVMはやってないんだね。
Macはどこがやってるんだろ。Macユーザじゃないからうといんだわ。
Winが80%をしめてるといわれるわりに、周囲にはMac使いが多くて、
じゃあその人たちにも使えるようにとJavaで作り始めたんだが、
肝心のSunはサポートしてないんだね。
まあいいじゃん。今時カード入ってないマシン使ってる人なんて ごくごく少数。クレームついても仕様ですで押し通せば。
>>413 Macはアップルがやってる
6がまだ出てこない…
>>415 そうなんだ。ありがーと。
6をはやくだしてほしいわ。5で動くようにと思ってたんだけど、
6を知るとついつい6の機能を使ってしまったような・・・
NetBeans6 + JavaSE6 + glassfish2の組み合わせの軽さは異常
>>416 ついこの前にそれではまった…
JFileChooser で FileNameExtensionFilter 使ってて
Mac OS X で動かねーって言われるまで気が付かなかった
# Apple は 6 を出す気があるんだろうか…?
Mac なんて捨てていいよ
Macの6はDPのままだにぃ。 Cocoa-Javaバインディングも放置になったし、やる気なさそう。
OpenSource版ががんばってくれるんじゃね?
多少のタイムラグはあってもMacでも6は出るだろうし、 7でも8でも出てくると思うけどね。 Javaはいつも明日の言語なんだよな。w 明日はごちそう、でも今日は無い。w
AppleはJavaに対してなかなか気合いが入ってると思うけどなぁ。 ただ、やろうとしていることに作業が追い付いてないだけで・・・。
前は気合い入ってたんだけど、新しめの機能のフレームワークに対応する Javaバインディングを出すのはもうやめてる。 LeopardではBridgeSupportでなんとかできるのかもしれないけど。
てかMacOS Xてunix互換なんだろ?CPUもIntel系にしたのに既存のコード使えないのか?
>>423 時間が経つごとに気合がなくなっていってるっぽいよなぁ
>>425 CPUがインテルでもベースがUNIXでも肝心なGUIライブラリは別物なので結局移植作業は必要
プロセスとかファイルシステムとかあたりはunix互換でも、 グラフィックとかサウンドとかあたりは全然別物だし・・・
追加機能が増えたりバージョンあがるごとに仕様かわったりで 追従していくの大変すぎるんじゃないのかなぁ。 JVMさえ開発すればどのマシンでも動きますなんてただの宣伝文句で、 それ作ろうとしたらすげー大変だと思うよ。
技術者の量・質を考えたらAppleがJavaを管理するのは無理そうだな できあいの既存のものを改造していくのには慣れていても、 継続的にある規格に互換させていく作業ってのはやってこなかっただろうし。
>>428 それが基本ソフトとよばれるものなんだけどな
互換性をいかに維持するか
新しいOSごとにアプリ全部作り直しなんてやってられん
このスレ的にはApple捨ててよで結論でてるだろ
5.0のときの対応も遅かった
マック使う人はアポー謹製ソフトさえありゃ満足なんだから放置しとけばいい
デザイナはAdobe製ソフトも入ってないと困るよ
mac osxはカーネルより上のレイヤーはXですら自前だからなぁ。 GUIが自前とか言う次元超えてるよ。
なんとかとハサミは使いようというじゃない。w
せっかちな人にはJavaは向かないね
マック信者をJavaで逆洗脳してみたいwww
6での大幅な改善点がデスクトップアプリの強化(大量にバグもちだが)と 大幅な高速化(1.3.1から1.4.0より大きな変化)だから もうすぐ1年たつというのにMacに6がきてないのは苦しい
アップルの独自実装だからmac版が早くなるか分からないんじゃない? 糞実装を何とかしてくれればそれで良いと思うが。
まあぶっちゃけV2Cが1.4.2で動く事からも Macが6をサポートしなくても当分困らないんだよな 5.0が動くだけでも十分じゃね
そんな後ろ向きな姿勢じゃいかんよ
JTreeで幹や葉をクリックしたり、矢印キーで移動させたときに 選択している幹や葉のファイルを別のJListに表示したい。 この場合、イベントはvalueChangedでいいんでしょうか? それとなにか注意点とかありますでしょうか
データ転送じゃね?
>>443 マニュアル読んで判断したならいいでしょ
あとvalueChangedってメソッド名だけ出しても普通の人はわからんと思うよ
下手にJTreeのvalueChangedいじったらパフォーマンス落ちね?
上手にいじれば良い
それが出来るならこんなところで確認してないと思うが? まあ、ドキュメント読めば分かることだが。
JFrameの下部にStatusBarを取り付けようとしています。 単純にBorderLayout.SOUTHで問題はないのですが、BorderLayout.SOUTHに当たる領域は後々別に使用するかもしれないので、完全に別領域として下部に取り付けたいのです。 イメージ的にはsetJMenuBar()と同じような感じです。 どのような実装がよいでしょうか?
JPanel に BorderLayout をセットして JFrame の CENTER に置く JFrame の SOUTH をステータスバーのために使って、 JPanel の SOUTH を後々別に使用するときのために取っておく
そのようにした場合、ステータスバーをセットするJFrameのCENTERにコンポーネントを加えたいときにわざわざそのJPanelを取得後貼り付けないといけないので避けたいです。 他にはないでしょうか?
>JFrameのCENTERにコンポーネントを加えたいときにわざわざそのJPanelを取得 いや、最初から、JFrame じゃなくて JPanel の CENTER に入れればいいじゃん。 わざわざ取得っていうか、JPanel 作ったときにそれをフィールドに持っとけばいいだけでそ? 本当にどうしても JMenuBar のように振舞わせたくて他に方法がないというなら、出来ることは出来るけどちょっと面倒い。 JRootPane の中の layeredPane と glassPane と、layeredPane の中の contentPane と JMenuBar (と自分の statusBar) をレイアウトするレイアウトマネージャを書いて、JRootPane のレイアウトマネージャをそれで置き換える。
Windowsに限定しちゃうかも知れないけど、 %USERPROFILE%\Local Settings\Application Data ↑のディレクトリの中に変なGUID名のディレクトリが作られてて 中を見るとJ2SDK5.0のインストーラみたいなのが入ってる。 うちの環境にはJDK6も入ってるけど、5系だけゴミ?があるので気になります。 これって削除しちゃっていいのかな?
>>452 そうなのですが、どうしてもメニューバーのように扱いたかったので・・
やはりかなり面倒なことになるようですね。
丁寧に教えていただきありがとうございました。
ボーダーレイアウトでいいだろ 面倒ではないだろと
456 :
453 :2007/11/23(金) 00:44:03
質問・相談スレに書くつもりが誤爆してました。 こちらはクローズします。ごめんよぅ。
457 :
デフォルトの名無しさん :2007/11/25(日) 00:15:06
質問相談スレで聞いたところ、こちらで聞いたほうが良いと教えていただい たので質問させていただきます。 現在、携帯電話でいうフレーム撮影機能をPC上でJAVAを用い、作りたいと考え ております。USBカメラから動画キャプチャを行い撮影ボタンを押すとその時の 静止画がJPEGで保存するところまでは作ったのですが、写真フレーム(gif)を 動画上に表示する方法がわかりません。API集の方も探してみたのですが、見つ けることができませんでした。誰か方法について教えてもらえませんでしょう か??よろしくお願いします 初心者でして簡単なソースなどつけていただけると助かります。
一番簡単なのは ・ImageのロードにはImageIOを使う ・JLabelを貼り付けてそれにImageをセットする ネットで初心者かどうかってのは意味ない文章だからやめたほうがいい 知っているか知らないかだけだから
JMF使ってる?
460 :
デフォルトの名無しさん :2007/11/25(日) 00:23:49
動画を描画するコンポーネントのpaintComonent(...)をオーバーライドして super呼んだ後に、drawImage(...)でOKじゃね?
いや >USBカメラから動画キャプチャを行い撮影ボタンを押すとその時の >静止画がJPEGで保存するところまでは作った ここにJMF使ってるならJMF流儀の動画の描画の仕方があるから動画のキャプチャをどうやってるかでやり方が決まる。
462 :
デフォルトの名無しさん :2007/11/25(日) 01:30:58
JMFをつかっています。 キャプチャ部分となりますと new Timer(100, new ActionListener(){ try { player = Manager.createRealizedPlayer(new MediaLocator("vfw://0")); } catch(Exception e){ System.out.println(e); System.exit(1); } player.start(); ここになりますでしょうか。 ご教授よろしくお願いします
>写真フレーム(gif)を動画上に表示する これがやりたいんだよね? ならEffect実装してProcessorからTrackControl取り出してTrackControl#setCodecChain(Codec[])で実装したEffectセットしてやれば良い。 んでProcessor#getVisualComponent()で取得したビジュアルコンポーネントを適当に張り付ければ良い。 あとはJMFのページのチュートリアルとかサンプルコード読んで。
日本語を入力時、「確定はされていない文字列入力状態中」(Windowsでは文字の下に破線が引いてある状態)を調べる方法はありますか?
ImmGetCompositionString
ごめん、ここJavaだったorz
Component に addInputMethodListener を仕掛けておけば取れるみたい?
468 :
464 :2007/11/27(火) 20:44:22
>>467 InputMethodEvent#getCommittedCharacterCount()
で判別できそうですね。
ありがとうございました!
Java Web Startのアプリで、jnlpファイルの中で <security> <all-permissions/> </security> を設定していて、jarにはオレオレ証明書でサインしている。 確かにファイルアクセスなど自由にできるから、 この設定は有効化されているはずなんだが、 Point p = MouseInfo.getPointerInfo().getLocation(); で Exception in thread "AWT-EventQueue-0" java.security.AccessControlException: access denied (java.awt.AWTPermission watchMousePointer) が出るのって、これはどういうことなんだろ。 JWSで動かさなければこのエラーは出ないんだが。
>>469 JWSのバグでね?
そのクラス1.5からのやつだからもしかしたら・・・
471 :
デフォルトの名無しさん :2007/12/01(土) 00:09:26
frameにタブだけ貼り付けたの作ると、 初めに、タブのタイトル部分に選択状態みたいなのが行くんだけど、 それをタブに貼ってある、jCheckBoxに初めから行くようにしたいんだけど、 windowsのアプリはそうなるようなんで。 どうやったら出来ますか?
フォーカスのトラバーサルいじるAPI群なかったけ?
初期状態ってことならオープン時にフォーカスセットしてあげれば?
474 :
471 :2007/12/01(土) 01:19:46
jCheckBox.requestFocusInWindow(); よく分からないけど、setVisible(true)した後しかフォーカスがいかないな…
>>471 つrequestFocusInWindow()
俺はタブはいつもsetFocusable(false)するなぁ。
>>474 つaddAncestorListener()
ancestorAddedでrequestFocusInWindow呼んでみそ
ふつーにオープン時でいいとおも
>>477 それだとタブで切り替えたときにフォーカスが移らないってことだとおも
479 :
471 :2007/12/01(土) 01:59:35
>>476 おーサンクスサンクス。
これで完璧だわ。AncestorAdapterは何故かないんだな
アダプタクラスは実装するメソッド数が少ないか そのインターフェースの多くが実装される可能性が高いリスナーは 利便性が低いからアダプタクラス用意しないって方針だよ。
JPopupMenuの使い方なのですが、ポップアップメニューの対象によってメニュー内容を変えたい場合、一般的にどのような方法を取るのがよろしいでしょうか? 単純に対象を毎回チェックしてその対象に必要なメニューを構成する、というのはどうも気持ちが悪くて・・
リスナーのフィールドにして遅延生成すればいいだけじゃない?
対象の種類ごとにJPopupMenuを予め作っておく・・・・のはムダが多いか
484 :
481 :2007/12/01(土) 12:48:32
>>482 遅延生成とはどういうことを指すのでしょう
やはり表示毎に必要なメニューを生成という意味でしょうか?
>>483 例えば対象の種類にあらゆる属性があり、その属性ごとに必要なメニューがある場合、その組み合わせをあらかじめ作っておくのは好ましくないかと・・
じゃあ、すべての項目を含めたJPopupMenuを1個用意しておいて、各JMenuItemのsetVisibleを切り替えるとか
>>478 そういう意味だったのか
あの日本語からはそこまで理解できなかったよ
>>481 表示される項目が全て画面に収まるのならすべていれる。
そして選択可能不可能で調整したほうがいいんじゃない?
コンポーネントによってメニューがかわるより、メニューは同じで選択可能か不可能かのほうが
ユーザーに優しいとおもわれる。
この選択肢は下のほうにあるとか上のほうにあるとかコンポーネントごとにかわっていたら厄介だ。
JFrameの上には、とりえあえずJPanel置くべきですか?
packの仕組みをしっているのならおいたほうがいい そうでなくともパネルに機能単位でのせていったほうが楽になるかな グループレイアウトを使うのなら場合によってはなくてもいいかも
490 :
481 :2007/12/01(土) 15:52:06
>>485 >>487 とりあえず全部登録しておくのが楽なようですね。
場合によってsetVisible、setEnabledで使い分けようと思います。
ご意見ありがとうございました。
>>480 そうなんだ〜。まぁ、よく使うなら自分でAdapter作ればいいしね〜。
LinuxのSwing上でトラックポイントのセンターボタンでスクロールしたときに コンテキストメニューが開いちゃうんだけど、心当たりがある人いる? JavaはSunの1.6.0_03
494 :
デフォルトの名無しさん :2007/12/02(日) 21:54:41
以下の挙動で、困っています。 JNLPでデスクトップにショートカットアイコンを作成し、 そのアイコンに何らかのファイル(何でもいい)をドラッグアンドドロップすると、 「このアプリケーションは起動できません」「詳細」「了解」というダイアログが表示される。 ここで「詳細」ボタンを押すと、次のような情報が表示される。 ※C:\Users\hoge\Desktop\新しいテキスト ドキュメント.txt をドラッグアンドドロップした場合。 InvalidArgumentException[ 無効な引数が指定されました: {C:\Users\hoge\Desktop\新しいテキスト ドキュメント.txt, C:\Users\hoge\AppData\Local\Temp\javaws12 }] at com.sun.javaws.Main.launchApp(Unknown Source) at com.sun.javaws.Main.continueInSecureThread(Unknown Source) at com.sun.javaws.Main$1.run(Unknown Source) at java.lang.Thread.run(Unknown Source) で、問題なのは、ここで、ドラッグアンドドロップしたファイルが、 何の断りもなく、いきなり 削除 されてしまう、ということなのです。 この不具合は、あらゆる全てのJNLPアプリで、全てのOSで再現しました。 こうした挙動を防ぐような、何らかの対策をすることは可能でしょうか?
496 :
デフォルトの名無しさん :2007/12/03(月) 01:24:26
ごめん、たしかに、MacOSでは試していない。 あと、64bit用のJREやSolarisでも試せていない。 こちらで試したのは、Windows Vista, Windows XP SP2, UbuntuLinux(7.04)の上で、 1.4.2_16,1.6.0_03,1.6.0_10-ea(いずれも32bit用)。 ここまでやって、いずれの環境でも再現した。 いま、Java7でも試そうとしているところ。 Javaキャッシュビューアで、インストール済みのJNLPアプリについて 「選択されたメニューのショートカットを作成」または、 右クリックメニューで「ショートカットの作成」で、 ショートカットがデスクトップにすることができる。 そうして作られたショートカットに、 ユーザが何かのファイルを放り込むと、 そのファイルが勝手に削除されてしまう、ということ。 ユーザがデスクトップ上のメモ帳のショートカットにファイルをDnDして 開こうとして、まちがって隣のJNLPアプリのショートカットにドロップしたところ、 そのファイルが勝手に削除されてしまう、という感じ。 > 何よりファイルにDnDができない。 たぶん、そういう挙動が正常なのだと思う。
質問です。JButtonがアイコンであるGIFファイルの縦横サイズより結構大きくなってしまうのですが、コンパクトにする方法は無いでしょうか?
>>497 JButtonのjavadocを隅から隅まで読んで
しかるのちにボーダーのマージンを設定したらいいよ
>>498 497です。できました。ありがとうございます。
JFrameでgetContentPane()をしなくてもよくなったは、いつからですか? 自動的に転送されるようになったってのを読んだのですが。
501 :
デフォルトの名無しさん :2007/12/06(木) 02:06:17
5.0
即レスthx
503 :
デフォルトの名無しさん :2007/12/07(金) 22:41:46
シューティングを作りたいと思ってます メイン画面とスコア画面があって、 それぞれJPanelを継承したクラスを作ってMainPanel,SubPanelと作ろうと思ってるんですが、 この方法は値の受け渡しが面倒くさくなったり、重くなったりしますか? 普通はひとつのゲームは大体1パネルですかね?
504 :
デフォルトの名無しさん :2007/12/07(金) 22:43:16
普通はゲームにSwingなんて使わなくないか? ましてシューティングで・・・
Javaの勉強もかねて作ってます 最近はSwingもだいぶ早くなったと聞いたんですが...
ゲームなら、Frameに直接描けばいいと思う。 BufferStrategyを使うのも良し。
400x300で24fpsくらいで試してみるといいよ。 Swingはシングルスレッドだから、パッシブ連打でも問題ないはず
508 :
デフォルトの名無しさん :2007/12/07(金) 23:00:08
パッシブ連打とは?
509 :
503 :2007/12/07(金) 23:01:39
Frameに直接書くってことはpaintComponentメソッド内に メイン画面用とスコア画面用の描画処理が混在してるってことですよね? そうすると片方の画面の背景だけ変更するなどの処理とかがややこしくはならないですか? パネルで分けるとコードがすっきりする気がするんですが
パッシブ・レンダリング=描画イベントによる受動的なレンダリング(repaint()) アクティブ・レンダリング=自発的に描画を実行するレンダリング(Toolkit.sync(), BufferedStrategy)
>>503 つまりWindowシステム普及前のゲームプログラミングが難しかったと思ってる?
んなことないよ
練習がてらというのならSwingつかってもいいけどメリットはあんまないとおもうよ
JLabelのアイコン指定でキャラ表示とかSwingというフレームワークで
描画や再移動とかそういうことでしょ?
途中でもっといいものを、もっと本格的なものを、となって挫折しそう
あとpaintComponentではゲームのレンダリングの処理はいれないことね
さらに付け加えるとパッシブレンダリングはいわゆるトリプルバッファを使わないといけないから注意ね ダブルバッファじゃダメ
513 :
503 :2007/12/08(土) 00:51:35
全体的な流れとしては、レンダリング(描画?)は各オブジェクト(敵、弾)のクラスのdrawメソッド(メソッド名は自由?)などで行い、 paintComponentはそれを呼び出すだけ。で、必要に応じてrepaint()を行うとpaintComponentが再描画されるという感じでしょうか?
paintのタイミングは自前のrepaintだけじゃないからそれはやっちゃだめ ウインドウの重なり具合とかOSが画面をいきなりリフレッシュしたりとかあるから 各オブジェクトにdrawのインターフェースを実装させるという考え方はあってる レンダリングは自前でAというバッファへしてるとすると、 その間描画はBというバッファからイベントでフロントへ描画させる Aのレンダリングが終わったらAとBをいれかえて、次のフレームの描画はBへ行う バックバッファへのレンダリングとフロントへのレンダリングが重なる場合もあるという考え方ね
515 :
503 :2007/12/08(土) 01:09:30
ダブルバッファがいまいち理解できてないのでもうちょっと勉強してみます。 答えてくださった方どうもありがとうございました
本当はJavaでゲーム作成というスレがあったんだけど最近おちちゃったんだよな ゲーム製作板とかいろいろと斜め読みしてみるといいかも
Javaでゲームってのはなかなか前衛的でおもしろいと思うんだが、 如何せんパフォーマンスが悪いのが致命的なんだよな。 いくら努力しても、一定以上FPSが上がらんとなるとどうしても敬遠したくなる。
勉強として作るプログラムも題材の選び方はかなり重要だよ。 努力するほど深まって発展していく題材と、 底の浅いところですぐに打ち止めになるのがある。
勉強の段階なら、何を作っても勉強になる。
Javaでエロゲぐらいなら作れそうじゃね?
アクションだろうがパズルだろうがなんでもできるんじゃないの。 ブロック崩しやテトリスくらいなら楽勝。 ゲーム専用機であるようなハデなアクションゲームを作りたいならお門違い。
あと速く動かしたいなら画面小さくすればいいんだよ。256 * 192とか。w 昔のアーケードゲームの解像度はせいぜいその程度だったしさ。
シューティングやアクションはともかくとして リアルタイムシミュレーションとか向いてると思うけどな>java スレッド周りとか楽々作れるし
ゲ制作板で話せ
リアルタイムのアクションものも余裕で出来るよ IntelCore2/2GHzでJavaで動かすとCネイティブだと1.6GHzくらいの速度になるけど それが問題になることはまずあるまい
[MainFrame.java] public class MainFrame extends JFrame { public MainFrame() { MainPanel mp = new MainPanel(); Container contentPane = getContentPane(); contentPane.add(mp); } public void main(String[] args) { MainFrame frame = new MainFrame(); frame.setVisible(true); } } [MainPanel.java] public class MainPanel extends JPanel implements ActionListener{ public MainPanel() { SubPanel sp = new SubPanel(); } public void actionPerformed(ActionEvent e) { setBackground(Color.BLACK); } } [SubPanel.java] public class SubPanel extends JPanel { public SubPanel() { JButton b = new JButton("メインパネルの色変更"); b.addActionListener(); }
↑の様な構成で作りたいんですけど、うまくいきません。 ようするにSubPanelのインスタンスからMainPanelのインスタンスへ アクセスするにはどうすればよいのでしょうか? MainFrameでMainPanelのインスタンスをpublicでstaticにしたりいろいろやったのですが、 うまくいかないのでどなたか教えてください。
>>528 SubPanelにボタンのaddActionListenerを委譲して
MainFrameからやりたいことを教えてあげればいいんじゃないの?
530 :
528 :2007/12/10(月) 03:21:26
>>529 すいません 委譲がいまいちわからないんですが、SubPanelとMainFrameにaddActionListener()メソッドを作り、MainFrameにactionPerformedメソッドがあるような感じですか?
今までは↓のような形で出来るかなとやっていたんですが、うまくインスタンスにアクセスできていないみたいなんです。
もし↓で出来たとしてもなにか強引過ぎる気がします。もともと構成がありえないんですかね?
[MainFrame.java]
public class MainFrame extends JFrame {
public static MainFrame frame;
public static MainPanel mp;
public MainFrame() {
mp = new MainPanel();
Container getContentPane.add(mp);
}
public void main(String[] args) {
frame = new MainFrame();
}
}
[MainPanel.java]
public class MainPanel extends JPanel implements ActionListener {
public MainPanel() {
sp = new SubPanel();
this.add(sp);
}
public void actionPerformed(ActionEvent e) {
setBackground(Color.BLACK);}}
[SubPanel.java]
public class SubPanel extends JPanel {
public SubPanel() {
JButton b = new JButton("メインパネルの色変更");
b.addActionListener(frame.mp);}}
MainPanelはPaintComponentをオーバーライドしないといけない気がする…
532 :
531 :2007/12/10(月) 10:06:52
やっぱ要らないか
>>530 設計方針とか変更不可のクラス等の制約条件とかが分からないけど
手っ取り早くやるならMainPanelとSubPanelの親子関係がそのままなのを前提に
b.addActionListener((MainPanel)getParent());
俺なら SubPanel#addColorChangeActionListener(listener){b.addActionListener(listener);} を作る方を選ぶかな。
これってSwingの話ですらなくて言語の基本の話だろ? なんでstaticがでてきたりするんだ? まずは言語の勉強からやりなおしたほうがいいんじゃないかい?
たぶんMainFrameやMainPanelのインスタンスをSubPanelで参照する方法が分からなくて、 b.addActionListener(frame.mp);}}ってやってもコンパイルできなくて、 b.addActionListener(MainFrame.mp);みたいにできるようにクラス変数にしちゃったんだと推測。 プログラムの設計と実装の仕方を良い参考書や良いソースを見ながら勉強した方がいいと思う。
537 :
530 :2007/12/11(火) 00:36:38
>>536 正にその通りです
>>533 getParent()なんてのがあったんですね
どうもありがとうございました
>>530 のコードを見る限り
getParent()は使わないほうがいいな
独立性が失われるのにListenner使ったりとかありえん
まず言語の基本の勉強からしたほうがいい
近道しようとしても無駄だと思う
ここ本当に基本中の基本だから
539 :
503 :2007/12/11(火) 17:52:44
>>538 すいませんご指摘ありがとうございます
SubPanelのコンストラクタでgetParent()しても、その時点ではMainPanelの子にはなってないということですよね
>独立性が失われるのにListenner使ったりとかありえん
これはimplements ActionListenerのことですかね アダプタクラスというのを使ったほうがいいということでしょうか
一応基礎はやったつもりでいたんですが、今回GUI使うことでぜんぜん理解できていないことに気づいてそれだけでもよかったです
もう来ません ありがとうございました。
もうきませんって捨て台詞・・・はもうきこえてないか インスタンスの参照を渡せばいいだけでしょ? それができないってことはJavaの勉強1週間程度しかしてないということかな?
541 :
530 :2007/12/12(水) 00:36:46
ながながとスレ違いすいません
勉強はJavaの入門書を一通り読んだんですが(スレッドくらいまで。デザインパターンは全く)、ちゃんとは理解できてなかったようです。
参照を渡すといいましても
>>530 のコードだと難しくないですか?
コンストラクタでいろいろやってるのも悪いんですかね
本当にこれで最後にしますんで、
MainPanelとSubPanelが連動していて(Subのボタンを押すとMainの内容を変更したりする)場合、
どんなコードになりますか?親切な方おねがいします
いや、普通に継承してるんだから MianPanelはSubPanelを生成してあげたあとにセットしてあげるでもいいんじゃない? SubPanelに private MainPanel mainPanel; public setMainPanel(MainPanel panel){ this.mainPanel = panel; } と追加しておいて sp = new SubPanel(); sp.setMainPanel( this ) ; this.add(sp); とするといい。 subからMainを触りたければ上で定義したprivateなmainPanelに対してアクセスをする。 MainPanelでSubPanel作って乗せてるだけだからこれでいいと思われ。 MainPanelが先に消えたりする可能性があるとかだとリスナーいじってどうのこうのが必要になるけど たぶんあなたがやりたいのはこれで十分かと。
そもそも設計の段階で間違えてるんじゃないか?
>>542 それだと SubPanel が汎用性の低いクズパーツになるだろ。
SubPanel がボタンを持つパネルならそのボタンのアクションリスナーを
>>534 のように SubPanel に委譲してやったほうがいい。
public class SubPanel extends JPanel {
private JButton button;
public SubPanel(String buttonText) {
button = new JButton(buttonText);
this.add(button);
}
public void addButtonActionListener(ActionListener listener) {
button.addActionListener(listener);
}
}
public class MainPanel extends JPanel implements ActionListener {
public MainPanel() {
SubPanel panel = new SubPanel("メインパネルの色を変更");
panel.addButtonActionListener(this);
this.add(panel);
}
public void actionPerformed(ActionEvent e) {
this.setBackground(Color.BLACK);
}
}
>>544 アクションイベントだけならそうだろうけど
GUIってそれ以外のプロパティの変更とかふつうはやるものだし
main panelをある構造に従って作るようにして、sub panelでその構造を変化させたらいいんじゃないの?
そこまでの設計が出来ていればこんな質問はせんだろうと。 ActionListennerをMainPanelで実装している時点で複数のイベント対応がおわっとるわけで。
>312でも書かれてるけど、Synthって流行らないのかなー。 スキンがXMLファイルと画像で済むならたくさん配布されてそうなのに、 どうして一個も見つからないんだろう・・・
つ Nimbus
スキンを色々着せ替えたい人ってどんなアプリ作ってんの? 着せ替えできることを売りにしてるアプリで俺が最初に思い出すのがCDプレイヤー。
554 :
デフォルトの名無しさん :2007/12/12(水) 17:10:21
ウィンドウをキャプチャし、JPGで保存するようなプログラムを作成中です。 手法、使用APIなどご教授お願いします。
>>554 なぜここで聞く?質問スレ行った方がいいんじゃないか?
キャプチャに関してはRobotがAWTパッケージに入ってるからかな? って感じでもないか。 知ってたらBufferedImageを保存するには?って聞くだろうし、それはスレ違いか。
>>553 そういう感じのLAFがカッコイイと思う人もいるんだろうけど・・・
ブログのスキンとは求められてるものが違うんでね?
Nimbusってjava LAFの置き換えなんだろうか? それとも共存するんだろうか? NimbusってSynthで全部自前でやってるせいか少し重いからイマイチなんだが。
重いかな? というか、エンジン部分が決まっているので むしろこれからのチューニングに期待できるんだけど。 Nimbusが出てきてからSubstanceへの興味はだいぶ薄れちゃったな・・・ V2Cは、6u10に入ってるNimbusで綺麗に動くので最近はNimbusで見てる。 素のMetalやOceanよりしっくりきてる。 普通に見れて、プラットフォーム共通の見栄えってのは重要でしょう。 Metalは、お世辞にも見栄えがいいとはいえなかったから・・・・(派手だけど)
見た目のこと言い出すと宗教戦争になりそう。
SynthってXMLと画像をjarに詰めて配布するの? jarをインデックス付き無圧縮で配布すれば多少早いかもね。 もしくはSynthをコンパイル可能にするとか。
ぶっちゃけSystemLAFがデフォになってくれるのが一番いいかも NetBeansもそれでシェアを一気に伸ばしたし
見た目なんて飾りです。えらい人にはそれが分からんのです。 ていうかクロスプラットフォームの実現性としてはjavaLAFがデフォの方が良いけど、 ユーザビリティが落ちるので天秤ってところか・・・。
LAFを変更したらレイアウトが微妙に崩れてデザインが台無しとかけっこうある。 部品をカスタマイズしてたりするとなおさら。 で、いくつもLAFがインストールされていても、事実上使えないものが出てくる。 そんなLaFしか実現できないのなら、LAF一つで統一してほしいところだな。
>>564 推奨サイズを使って設定してくれるならずれることはほとんどないはずだけど?
今まで大量にSwingアプリ作ったがLAFかえて問題が出る場合ってのはほとんどないよ。
むしろWinネイティブより楽。
566 :
デフォルトの名無しさん :2007/12/12(水) 21:35:29
>>565 推奨サイズって何?
カスタムコンポーネントなしのアプリしか作ったことないんじゃないの?
本気で言ってんのかコイツ
Swing使いが推奨サイズを知らないとは思えんが・・・・
きっと日本語ではなく preferredSize といえば通じるよっ。
570 :
デフォルトの名無しさん :2007/12/12(水) 22:47:58
生憎日本の会社で働いたことがないので。日本語のAPI docもたまに 見るけど気付かなかったよ。どこかに便利なサイズの表でもあるのかと思った。
今日もJava釣り君元気だな
>>570 つまり、preferredSizeを和訳できなかったわけだな。中国の会社の人?
インドだろう常考
574 :
564 :2007/12/13(木) 02:58:31
>>564 もちろんそうしてるよ。JDK1.0のころからある普通のレイアウトマネージャを組み合わせてレイアウトしてる。
そりゃテキストエディタのようにツールバーとメニュー、オプション選択とOK/NOボタンしかないとか、
その程度なら問題ないだろうけど、複雑になるとたいがい問題でると思うけどな。
ただしまったく使えなくなるほど、ひどいことになるのは少ない。
レイアウトデザインには急所があってさ、絶対はずせないところってのがいくつかある。
そこがずれると一気にしまりがなくなってださくなるとこが。
そういうとこが狂うと、やめてよっていいたくなる。
LAFに応じて位置とサイズを調整するようなコードを書くとか、無難なデザインを適用する事はできると思う。
でもそういうのってなんか違うと思うんだよね。
ボケたか自演か?
576 :
564 :2007/12/13(木) 03:52:46
推奨サイズを知らないバカと自分のレスにレス付けてるボケがいるスレはここですか?
レイアウトが崩れる例ってのを、出してみてよ 簡単なのでいいから
複雑になると問題が出るっていってるのに簡単なのでいいからっていうツッコミ、気の毒だな。
>>578 21 * 21 のicon,pressedIcon,rolloverIconの三枚のボタン画像を作りJButtonのプロパティに指定。
perferredSize=21,21
margin=0,0,0,0
focusPainted = false
contentAreaPainted = false
borderPainted = false
LaFでMotif,Windows,Metalの三通りを試してみてよ。Motifはアウトだから。
画像ボタンをつくればいいだけなら解決策はあるけど、しかし、
GridBagLayoutで次のようにJTextFieldが等間隔でならんでいて、
その一つにこの画像ボタンがあるとする。
[TextField]
[TextField][B] ←画像ボタン
[TextField]
[TextField]
アウトだよね。レイアウトは崩れる。デザインを修正することで回避する策もあるし、
使えないってことはないが、LaFを切り替えると振る舞いが違うのは困る。
>>578 もう一つ例をあげると、Motifのメニュー操作法と、Windows,Metalの操作法は異なる。
これは使ってみればすぐに分かると思うけど。
それから、JSliderBarの操作法ね。Metalと残りのWindows,Motifでは振る舞いが異なる。
これもわかりにくいかもしれないけど使ってみれば分かると思う。
LaFは見かけ上の外観を変更するだけのはずなのに、操作体系にまで干渉したらまずいと思うんだけど。
ルック&フィールのフィールって何か分かってるか?
>>581 LaFはLook & Feelの略だよ。外見を変更するだけじゃない。
>>580 すまん、やってみたが、レイアウトは崩れないっぽいんだが…
なんか俺間違ってるのかも試練から
どこがどう崩れたのか教えて欲しい
>>582 単純思考のくせに傲慢そうなやつだな。w
feelは手触りだから、操作体系が異なるのは仕様のうちだとでもいいたいのか?w
しかしそれでは良くない場合のほうが多いんだよな。
アプリに無意味な混乱を与えるくらいならLAFをユーザに選択させないほうが俺は良いと思うけどね。
ボタンが数個しかついてないようなアプリならまーすきにすればだけど。
>>584 画像はいらないから、コードをコピペしてみて。
環境の違いもあるだろうし。
コードつーかソースね
Look and Feelのfeelには気分や雰囲気の意味もあって、必ずしも操作法を指すともいえないけどな。
>>586 public class Test extends JFrame {
static public void main(String args[]){
new Test().createUI("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
}
private void createUI(String laf){
try {
UIManager.setLookAndFeel(laf);
} catch (Exception e) {
}
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
JPanel p = new JPanel(gbl);
c.weightx = c.weighty = 1;
JTextField t0 = new JTextField(10);
c.gridx = c.gridy = 0;
gbl.setConstraints(t0, c);
p.add(t0);
JTextField t1 = new JTextField(10);
c.gridy = 1;
gbl.setConstraints(t1, c);
p.add(t1);
JButton b = new JButton(new ImageIcon("./normal.gif")); b.setPreferredSize(new Dimension(21,21)); b.setMargin(new Insets(0,0,0,0)); b.setFocusPainted(false); b.setContentAreaFilled(false); b.setBorderPainted(false); b.setRolloverIcon(new ImageIcon("./over.gif")); b.setPressedIcon(new ImageIcon("./pressed.gif")); c.gridx = 1; gbl.setConstraints(b, c); p.add(b); JTextField t2 = new JTextField(10); c.gridx = 0; c.gridy = 2; gbl.setConstraints(t2, c); p.add(t2); JTextField t3 = new JTextField(10); c.gridy = 3; gbl.setConstraints(t3, c); p.add(t3); getContentPane().add(p); this.pack(); this.setVisible(true); } }
>>589-590 さんきゅー。やってみた。
ただし画像を取得する部分は、getResource()を使う方法に修正させてもらった。
こっちの環境でMotifを指定してみたら、画像ボタンは正常表示されなかった。
new Test().createUI("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
具体的には、3 * 3くらいのサイズで表示されてしまう。
MetalやWindowsのLAFでは、このような状態にはならない。
ところであなたの環境はなに?
3*3の状態で表示されたときは、当たり前ながらレイアウトは崩れない。
ボタンサイズがJTextFieldのheightより小さいから。
で、こっちの環境で、Motifでもボタンを正しく表示させようとしたときは、preferredSizeを指定しなければ良いらしい。
しかしボタンは表示されるが、デフォルトのボタンサイズが27*26くらいに設定されてしまう。
するとJTextFieldのheightを越えてしまうため、ボタンのある行は上下に隙間が空いてしまう。
あ、ちなみにこっちの環境はWin2KのJDK1.6.0_03
いつまで続くのこれ?
b.setBorder(null); でどうよ?
ボタンに限ったことじゃないだろうに・・・
たまたまMotif用の回避策があっただけのことでしょ。w LAF別に癖があって共通の振る舞いをしないのはかわらない。
どう見てもコンポーネントの表示を制御し切れてないヘタレというだけで レイアウト云々は関係ないと思うのだが
JButtonとかはサイズが指定してあると、Metal→Motifに変えたときにほんと崩れるよね。 普通にテキスト指定してJButton作っただけじゃ、OKとキャンセルボタンのサイズが違いすぎるから キャンセルボタンにあわせるようにしてるんだけど、Motifはおかしいよ・・・
まだ続くの?
Swingの話題だから別にいつまでも続いてもいいだろ
そういやMotifだとマウスホイールも効かないよな。 そんな中途半端なのいれなきゃいいのに。
SystemLAFならLinuxとかでもWin並みのFeelが得られるの? Win, Mac以外はLAFは何でもいいと思ってるのでお勧め教えて。
604 :
デフォルトの名無しさん :2007/12/13(木) 21:35:08
Linux では gtk使えるなら gtkじゃね?
>>598 ことLAFに関しては
>>597 でFAだと思うが。
切り替えて不都合がでるLAFがある時点で不完全なシステムだな。
正直Javaアプリ作ってもWinでしか使わないんだよね。 APIのバランスがいいし、今更.NET覚えるのはしんどいって理由で。 *nixやmacの挙動を調べるにはどうしたらいいんだろう。 LinuxならcoLinuxとか?
それ用にマシン用意するか、もってる人にテストを頼む以外なんかある?
Macごときに会社が金出すわけ無いじゃん。jk。
アップルに俺様の会社がMacでも動くアプリを作ってやったから、テスト用にMacを献上したまえといってみるとか。
Macごときに金ださんという会社は、JavaだろうがMacで動かす必要はないってことじゃね?
Macごときで動作しないなんてレポートが来られても困るし、 JavaクライアントでもMacは未対応ってことにしとけばいいか
そこはアップルの実装の問題だが、どうにも屑すぎる。 特に文字列処理。これはjavaに限った事じゃないけど。
たとえば文字列処理でどんなことが起きるの?
615 :
デフォルトの名無しさん :2007/12/13(木) 22:45:06
ワイド文字いい加減とか
仕事なら必要な範囲のアーキテクチャだけ動作保証するだけだし 趣味ならそもそも動作保証なんてしないから問題ないだろ…
趣味で作っても、友達がMac持ってることあるから問題あるだろ。
aho
619 :
デフォルトの名無しさん :2007/12/14(金) 15:36:51
例えば、undo,redo(WindowsだとCtrl+z,Ctrl+y)とかのデフォルトの キーバインディングがOS毎に違ったりする場合、 LAF変更毎にjavax.swing.InputMapとかも変更すべきでしょうか? javax.swing.plaf配下のUI委譲を見ても、そんなコードは見あたりませんが。
>>614 Unicode正規化まわりじゃないの?
LAF変えるたびに、それ固有の修正を施すなんてかなり馬鹿らしい話 これからいくらでも増えてくるだろうし
622 :
デフォルトの名無しさん :2007/12/15(土) 16:35:41
MacのredoのショートカットキーがWindowsと異なる (Ctrl+Shift+zだったかな)ことを最近知って、 さらに「Motifだとマウスホイールも効かないよな」っていうのを見て、 ふと疑問に思った。 マルチプラットフォーム対応のソフト作ってる場合って、 やっぱり、そんなことも考慮する必要があるんだろうな。 LAF毎に固有の修正を施すなんてかなり馬鹿らしい話っていうのは同感なんですが。 ふだん当たり前にできてることができないって結構ストレスになるから。
キー設定とかは外部設定に追い出しておいてプラットフォームごとに 切り替わるようにするくらいは必須だろうねぇ。 うっかりMac環境でメニューバーにまでショートカット付けて怒られた俺。 (個別のメニューには付けてもいいが、根っこのバー上には付かないのがMac)
624 :
デフォルトの名無しさん :2007/12/15(土) 17:27:21
>キー設定とかは外部設定に追い出しておいてプラットフォームごとに >切り替わるようにするくらいは必須だろうねぇ。 やっぱり、サーバーサイドより面倒ですね。 >うっかりMac環境でメニューバーにまでショートカット付けて怒られた俺。 怒られるほどのことではない。 というか、個人的には、そのほうが便利になってる気さえしますが。 余計な文字列がデザイン的にウザイってことなんですかね。 よくそういうどーでもいいディテールに拘る人いますし。 特に官公庁に。 >(個別のメニューには付けてもいいが、根っこのバー上には付かないのがMac) へー。Macさわったことないから、全然知らなかった。 エミュレータでも買って、ちょっと弄ってみようかな。
そういえばMacのマウスはシングルボタンが基本だよね。 Winでは右クリでポップアップメニューが出る操作がよくあるけど、あれMacではどうなるの?
ふるーい mac だと ctrl + クリックでやってた記憶が…… ポップアップメニュー出す操作か、だけなら、 java.awt.event.MouseEvent#isPopupTrigger() みればわかるはず。
何も考えたくなかったらMetalで固定ってことかな。
macはボタン長押しでコンテキストメニューじゃなかった? 今のmacはマウスホイール付いてた気がする。 小さな玉が・・・。
シングルボタンの場合は、Ctrl押しながらクリック。 2ボタンマウスを繋いだ場合は普通に右クリックできる。 Mighty Mouseも見た目はシングルだが、右よりの部分を押すと副ボタンと して扱える(デフォルトだと両方主ボタンになってるのはAppleの意地か?)
ノート型のMacだと、指を2本パッドに置いてクリックすると右クリック相当 だな。指2本でパッド上を滑らせるとスクロールとかも面白い。
MacのOS9時代まで使ってたけど、ctrl + クリックだったよ〜 まぁどうでもいいか。
理想的にはLaF毎に諸々切り替えるべきなんだけど… 結局どこまでサポート範囲にするかってだけだとな気がする. ぶっちゃけMotifとかは切り捨てても誰も困らないと思うぞ
633 :
デフォルトの名無しさん :2007/12/15(土) 18:45:57
Synthについてなんですが、SwingのJComponentの派生クラスの ちょっとした動作変更のHackのサンプルコードとかで、 よくMetalほげUI(MetalComboBoxUIとか)を継承したクラスを作って、 JComponent#setUI(作成したMetalほげUIのサブクラス)とかやってますよね。 ああいうのって、その後Synthでスキンを変更しようと思った場合、 動作するんですか? Synth導入時はjavax.swing.plaf.synth配下のクラスを 使用しなければならないのかなと思っていて、 Synthパッケージのクラスの継承関係がBasicComponentUIのサブクラスだから、 MetalUIで作ったクラスは使用できないのかと漠然と考えているんですが。
634 :
デフォルトの名無しさん :2007/12/15(土) 18:52:14
>ぶっちゃけMotifとかは切り捨てても誰も困らないと思うぞ 同感。Motifは単にSunの意地。 クライアントLinuxも趣味にはいいけど、 個人的にはサポートしたくない。 でも、数ヶ月前に21:00台のNHKのニュースで出てた、 どこか忘れたけど、ITじゃない大手企業の普通の職場で SunのワークステーションでXが写ってた。 マジで使ってんの?って思ったけど。
ソラリスのMotifはそれなりにさまになってる感じもあるけど Winでみるとダサイ・・・ってまったく同じMotifというわけでもなくMotif風というべきか。
MacでCtrl+クリックで右クリということは、WinでCtrl+左クリに機能を割り当てていると、 Macでは困ったことになる・・・のだろうな・・・
637 :
デフォルトの名無しさん :2007/12/15(土) 19:28:20
実機が手元にないから、あれだけど。 SolarisのMotifは、Sunのハードの色のグレーと紫と一緒になって、 初めて調和する感じがする。 だから、他のハードで単体でMotifのLAFだけを見るとかっこ悪さしか感じない。
LAFというか視覚デザイン系は深入りすると底なし沼だからなぁ・・・・ 3Dソフトも今はなき?シリコングラフィックのあの癖のある筐体でみるのと、 DOS/Vの筐体でみるのではやっぱ違ってみえるよねw
639 :
デフォルトの名無しさん :2007/12/15(土) 19:44:18
いろいろ考えるとInputMapはFactoryクラスとかで一括管理すべきなんだろうなと思ってきた。
そういえばJTableはCtrl+左クリで複数選択機能があったはずだけど、Macだとどうなるんだっけ。
641 :
デフォルトの名無しさん :2007/12/15(土) 19:49:16
>シリコングラフィックのあの癖のある筐体でみるのと、 >DOS/Vの筐体でみるのではやっぱ違ってみえるよねw それはありますねー。 Sunのマシンにsunの4つつながったロゴがないだけでも、 Motifは別物に見えそうだし。 データセンターでMacのハードやUIがあったりしたら、 違和感ありそうだし。。。
>>619 質問 ↓のコードでもmacとwindowsで兼用できなかったの??
KeyStroke.getKeyStroke(KeyEvent.VK_C, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
643 :
デフォルトの名無しさん :2007/12/16(日) 02:36:30
619です。
>質問 ↓のコードでもmacとwindowsで兼用できなかったの??
>KeyStroke.getKeyStroke(KeyEvent.VK_C, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
Toolkit#getMenuShortcutKeyMask()メソッドは初めて知りました。
ありがとうございます。
興味本位で聞いただけです。
実際にやってみていない。というかmac環境がないので。試せません。。
http://tinyurl.com/3cbuj2のあたりをざっとみると 、
Ctrl+Cとかコピペ、Ctrl+F(検索),Ctrl+S|Oあたりは同じようですが。
Ctrl+Y(やり直し(Windows))の記載が見あたりません。
ちょっと前に、どこかでWindowsのCtrl+YはmacでCtrl+Shift+Zと見たんですが、
記憶違いかガセだったのでしょうか。
でも、macにはUndoの反対のキーバインドがないとは思えませんけど。
でも仮にmacにCtrl+Shift+Zがあるとすると、
Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()だと、
引数と戻り値的に適切な値が取得できるとは考えられないですが。
それとgetMenuShortcutKeyMaskで適切な値が取得できるのであれば、
UIクラスのinstallUI()(すくなくともJTextComponentのサブクラスのUI)では、
InputMapにデフォルトで登録しておいて欲しいところです。
macをさわれる人にgetMenuShortcutKeyMask()の結果を聞きたいです。
いつになるか分かりませんが、私がmacを実行できる機会があれば、
結果を報告します。
Mac OS X 10.5.1 です。 % uname -a Darwin dorado.local 9.1.0 Darwin Kernel Version 9.1.0: Wed Oct 31 17:46:22 PDT 2007; root:xnu-1228.0.2~1/RELEASE_I386 i386 i386 MacBook2,1 Darwin % java -version java version "1.5.0_13" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_13-b05-237) Java HotSpot(TM) Client VM (build 1.5.0_13-119, mixed mode, sharing) System.out.println(Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()); System.out.println(Event.ALT_MASK); System.out.println(Event.CTRL_MASK); System.out.println(Event.META_MASK); System.out.println(Event.SHIFT_MASK); 結果は 4 8 2 4 1 Metaキーってことですかね。
Mac OS XではCommand+Cとかになるからね。 getMenuShortcutKeyMaskの戻り値はEvent.META_MASKになる。 CommandキーはWindowsだとWindowsキー。
646 :
デフォルトの名無しさん :2007/12/16(日) 17:50:37
619です。 macの結果を教えてくださりありがとうございます。 macのショートカットキー一覧を見ると 「コマンド + C →「編集」メニュー コピー」と記載されているので、 つまり、getMenuShortcutKeyMask()を使用できそうということでしょうか。 ところで、macにはWindowsでいう「やり直し(Ctrl+Y)」 (元に戻すのを戻す?)は、ないのでしょうか。 私の言っている「Ctrl+Shift+Z」ショートカットキーは誤りですか? たびたびすみませんが、時間がありましたら教えてください。
うお、Leopardでは「取り消す(cmd+Z)」と「やり直す(shift+cmd+z)」に変わったんだね。 プレビューではファイルメニューに、最後に保存した状態に戻す「元に戻す」があったりする。
650 :
デフォルトの名無しさん :2007/12/16(日) 20:20:32
Swing標準のキーバインドってなかったっけ? あったらそれで良いと思う。 あれはLAFで決まるんだっけ?
652 :
デフォルトの名無しさん :2007/12/16(日) 21:36:45
619です。 >Swing標準のキーバインドってなかったっけ? swing.plaf配下のUI委譲のInputMap登録コードでは、 JListでの上下移動、JComboBox等の選択等の細かいものを除けば、 基本的に選択(JTableのセル選択,JTextComponentのテキスト選択)、 移動系(セルの選択位置移動、キャレットの移動)の キーバインドしか登録されないのです。 undo,redoをはじめ、Ctrl+S,Ctrl+O等の、機能が実装されていないものに 関しては仕方がないにしても、JTable,JTextComponentでは、 printを実装しているにも関わらず、Ctrl+Pも登録されません。 ですから、標準のキーバインドはないのでは?と思っています。 まぁ、個別のOSのアプリケーションを熟知してませんが、 Gridやテキストエディタでの選択、移動のショートカットキーは、 各OSともほぼ共通なため、そのあたりは登録できるものの、 undo,redo等は、上記のような例があり、標準として登 録できないという事情があるのかもしれません。 でもSwing標準のキーバインドなんてあったとしても、 個人的には、ショートカットキーをバリバリ使う人にはストレスフルで 使いたくないし覚えたくないだろうと思いますが。 ちなみにLAF毎に、キーバインドを登録するようなコードが それぞれのUIクラスのソースに無いのは先述のとおりです。
653 :
デフォルトの名無しさん :2007/12/16(日) 21:48:11
654 :
_ :2007/12/19(水) 14:53:45
combodata = {"a", "b", "c","d"}; ・ ・ ・ private void Combo1ActionPerformed(java.awt.event.ActionEvent evt) { if (Combo1.getSelectedItem().equals("a")||Combo1.getSelectedItem().equals("b")){ Combo2.setEnabled(true); } else{ Combo2.setEnabled(false); } } Combo1でaかbが選択された場合はCombo2が有効で Combo2でcかdが選択された場合はCombo2が無効になるようにしたいのですが 上のやり方だとaを選ぶとCombo2は有効になるんですがaを選んだ後にcに変更すると Combo2は無効にならずに有効のままになってしまいます. 同じようにcを選ぶと無効になるんですがその後にaを選ぶと無効のままになってしまいます. これを直す方法を教えていただけないでしょうか?お願いします.
いくつか突っ込みどころがあるから最初からやり直した方が早い。
最初からやり直すというか、紙の上で状態遷移を考えた方がいい。 自分の言ってる矛盾に気付けるから。
>Combo1でaかbが選択された場合はCombo2が有効で >Combo2でcかdが選択された場合はCombo2が無効になるようにしたいのですが 下のCombo2はCombo1の間違えだよね?
658 :
デフォルトの名無しさん :2007/12/20(木) 08:46:01
Combo1の間違えでした. Combo1の状態に応じてCombo2の有効,無効が変化する 物をつくりたいんですが教えていただけないでしょうか
combo2.setVisible(false); これでは駄目なの?
660 :
_ :2007/12/20(木) 11:53:34
上のやり方だとaを選ぶとCombo2は有効になるんですがaを選んだ後にcに変更すると Combo2は無効にならずに有効のままになってしまいます. 同じようにcを選ぶと無効になるんですがその後にaを選ぶと無効のままになってしまいます. 最初の選択では上手くいくんですが選択を変更すると変化してくれないんです。
まず、そもそもCombo1ActionPerformedメソッドが実行されてるのかどうかを確かめるんだ。 実行されてるなら、そのときCombo1.getSelectedItem()の値が実際は何になっているのかを確かめるんだ。
662 :
_ :2007/12/20(木) 13:07:41
Combo1でaを選ぶとCombo1ActionPerformedメソッドが実行されてCombo1.getSelectedItem()の値は aになっているんですがその後にCombo1でcを選んでもCombo1ActionPerformedメソッドが実行されてません 続けて選んだ場合にもCombo1ActionPerformedメソッドが実行されるようにするにはどうすればよいのでしょうか?
>>662 実行されてないのをSystem.out.println文で確認した?
664 :
_ :2007/12/20(木) 16:00:32
確認しました コンボボックスを変更してもActionPerformedにいってくれないようです
ActionListenerをやめて、ListDataListenerでComboBoxModelの変更を捕らえてみたらどう
おい、おまいら。 SwingApplicationFramework使ってますか?
667 :
デフォルトの名無しさん :2007/12/20(木) 19:57:08
使ってません。 あれって便利なの?
使ってみようと、Netbeansでプロジェクトを作った。 でも、どうするものかいまいちピンときていない。 Actionの管理をしてくれるのはいいんだけどちょっと縛りがきついなぁと感じた。 IDE無しでは複雑過ぎる気がする。
IDEなしでの比較だとアクションイベントを書くのはフレームワーク使ったほうが楽 アプリケーションの起動時と終了時に処理が書けるようになるとかはまぁあればあったでいいという程度 ただアノテーションつかってそれの名称を文字列で記述ってのは実行時エラーの可能性が増えるから 静的言語としてはどうかなぁというのが多い Web方面のフレームワークもだけどね Springとか最新版ですら1.4とか過去の互換性のために文字列を使うことが多すぎ enumきっちりつかってくれよと思うことは多いかな
IDEなしということはGUIエディタも使わずにSwingのアプリを作るってこと? 本で紹介するサンプルコードならともかく、本格的なもの作るなら論外だと思えるけど。
別に普通に行われてることですが
そりゃお気の毒
本格的なものを作るならフォームエディタなんて使わないと思うが。
674 :
デフォルトの名無しさん :2007/12/21(金) 00:58:40
IDEサポートなしと読めばいいじゃない。
最近Javaから離れて久しいが、GroupLayoutはツールなしで使うのは 辛いと聞いたことがあるな。
670にとって本格的なものってのは テキストフィールド2つにボタンひとつ。
IDEなしじゃ何もできないって人は、素のHTMLをいじれない人と「使えない」って点で似てる
ここでは何もできない人の話はしてないね。
>>678 の煽りの程度の低さに絶望した
もっとまともな指摘があるのかと思った。
682 :
デフォルトの名無しさん :2007/12/21(金) 11:10:10
仕事でレイアウトマネージャって使っています?
使うよ
684 :
デフォルトの名無しさん :2007/12/21(金) 11:45:21
やっぱ普通使うよね 絶対座標ばっかだ・・・
>>679 効率よく出来るかどうかだから。
仕事ならDreamWeaverとか使わないでHTML生成してるアホはいらんね。
ペイントあればフォトショップ等いらないでしょ?とか
テキストエディタでPDF作れるでしょ?といってるのとかわらんな。
>>684 せめてNetBeansに付属の伝統のAbsoluteLayout使ってね。
Nullはだめだぞ。
親切な香具師だな。 土を手で耕したいという土民なんかほっとけばいいのに。w
なんかバカがいるな。
仕事ではGridBagLayoutが基本かな・・・ NetbeansのGridBagLayoutのエディタが無いと仕事にならんね・・・・ もうちょっと進化してくれても恨まないけど・・・・ 複数のレイアウトマネージャを組み合わせて、 がちっと作り込むのは実はむしろ趣味のほうだったりする。 それでも、GridBag,Groupを手で書くのは調整くらいはできても、まぁ正直無理。
レイアウトマネージャの組み合わせはわりと普通に使う ただ、GropuLayoutがでてしまったおかげでほとんどそれ1本でいけるようになっちまった
690 :
デフォルトの名無しさん :2007/12/21(金) 13:47:57
GropuLayoutはいいよね。使いたい。 でもそのためにはJavaのバージョンを6にしないとだめなんだよなー まだ1.4だしなー 先は長いな・・・
GropuLayout
パッケージが違っていいのなら1.4から使えた希ガス。 5.0からだったかな? 来年登場予定のJavaSE7がでると1.4は保守されなくなるから。 保守契約結んでいるなら5.0以上でも動くようにしていったほうがいいね。
1.4はとっくにEOL。jdk7が出てから死ぬのは1.4.2
GroupLayoutが出たときにEclipseからNetBeansに乗り換えようかなと考えたけど GroupLayoutが、考え方が非常に明快な上に 頭で考えたことを素直に反映できる優秀なレイアウトだったので、やめた
695 :
デフォルトの名無しさん :2007/12/21(金) 19:40:22
なんじゃそりゃ
難読化
IDEなしじゃGUIも扱えない奴ってどうなん? JTableとかテキストフィールドで再現してそう
それはないだろ
無知の自覚がない無知は無知のまま放置がベスト
>>670 GUIエディタは便利だけど、業務アプリでそういうのでサックリ作っちゃうと
後々火を吹くから俺のPjでは使わない。
>>685 イタイな
GroupLayoutってさ、vGroupとかhGroupとか使ってコンポーネントのレイアウトを決めるわけだけど、 なんか冗長な記述だよな。これは仕方ないのか?
>>700 GUIに頼らずにどこまでできるかで、決定的な差が出る場面ってあるからね。
このスレではアマチュアが多いのか、あまり良く分かってない人が多いようだけど。
703 :
デフォルトの名無しさん :2007/12/21(金) 22:05:17
>>700 えぢたを使って火を噴くって例えばどんなの?
ロジックを画面実装で埋め込ませなければ大丈夫じゃないか? ウチではハンドラをあとからインジェクションする仕組みで使ってるが・・・
>>704 確かにそうだね。
完全にGUI担当者がデザイナと化してくれれば問題はないよね。
あとは、GUI担当者が皆一様の作法を身につけてくれることが重要かな。
そのためにもGUIデザインのためのフレームワークみたいなものは欲しいね。
706 :
デフォルトの名無しさん :2007/12/21(金) 22:27:10
SwingApplicationFramework
デザイン関係ない
GUIエディタ使って火噴くって、どんだけ低レベルなんだよ
709 :
デフォルトの名無しさん :2007/12/22(土) 07:39:23
煽りあいしかできないのか。ちょっとは期待してたんだが。
>>706 それはどっちかというとGUIアプリの処理手順をフレームワーク化してるよね
ちょっとわかりにくいかもだけど、俺がいいたいのは、「GUIデザイン」部分のフレームワーク。
そういうのがあったらいいなぁなんてオモタわけ。
うーん伝わらないか。。。
IDEがないと何も出来ません><ってやつが大勢を得る事なんてないから黙ってようね
原因不明のバグが出たらとりあえず全部調べるんじゃね
IDEていうかGUIビルダみたいなRADのこと言ってんだろ湧いて来る厨は。
せいぜいメインウィンドウのメニューや、そこから辿れる設定ダイアログまでだな。 3ペインアプリとかは手書きじゃないと満足いくものはできないだろ
3ペインなら今手書きで作ってるが・・・。
GUIエディタ使うってのは、業務アプリの画面とかダイアログだろ。
IDEじゃ何もできません><ってやつは使い物にならんよなぁ。 ツール使えばすぐできることを、なんだかんだいいながら手書きでやるんだけど、無駄に時間かかるし古い機能しか使ってなかったり。
>>718 なるほどね。業務アプリって画面びっしりコントロールをつけるからなw
>>719 まともなコードが書けるかどうかが重要であって、
IDEの使用経験の有無は大した問題じゃない気がする
IDE使ったことない奴には使い方を教えてやるだけで済むが、
プログラミングのセンスがない奴はいくら教えてもどうにもならん
もういいからVB使っとけよ。
723 :
デフォルトの名無しさん :2007/12/22(土) 19:11:51
VBにSwingってあるの?
>>721 でもIDEの慣れの差はやはり大きい
NetBeansを長年使ってきた人はさくさくつくれるけど、
Eclipseしか触ってこなかった人は開発効率が悪い
1,2年たつと違うんだろうけどね
>>724 結局それがいいたかっただけか。
マジレスしなくてよかった。
>>727 俺が仕事で作ってる業務アプリは、こんなもんじゃねーぞ・・・
タブで分かれて細かい設定項目が山のようにある。
あんなの手書きしてたら気が狂うわ。
729 :
デフォルトの名無しさん :2007/12/22(土) 20:48:02
普通に100個ぐらいコンポーネントあるよね
まだ言い合ってるのか。お前らも飽きないな
業務アプリじゃJTableやJTreeはめったに登場しないしな そういう人らは使えばいいんじゃない?
732 :
デフォルトの名無しさん :2007/12/22(土) 21:24:25
JTableは使用しまくりだよ
>>731 JTable使いまくりだけど・・・
検索結果を大量に表示したりせんの?
まあ、めったにJTreeは使わんけど。
テーブルがでてこないアプリってあるか? ツリーはあんまりないけど
個人開発だけどツリーの方がよく使う。JTableはスプレッドシートだから業務アプリでよく使うんじゃない?
アプリ毎で性格違うんだから、自分の携わったプロジェクトの経験だけあげてもしかたない。 でも、部品の利用のされ方ってのは興味深いな。 アプリで使われてる場面がどれくらいあるのか、 JTableなんかのレンダラとかもどうされてるか気になる。 デフォルトで行ける場面ってどれくらいあるのかとか。 Swingのデフォルト部品って、あと一味足りないみたいなとこあるからなぁ。 というか、特にJTableに感じるんだけど。 (表の真ん中にスクロールバー付けたいなぁ、とか)
737 :
:2007/12/23(日) 03:03:49
Swingでキャッチされない例外が起きてもプログラムは終了しませんよね。 エクリプスとかで走らせてるとoutputに表示されるけど、コマンドプロンプトから走らせるとキャッチされない例外が起きてるのが分かりません。 これを知るにはどうしたらいいのですか? 検出してログをとるなり、メッセージダイアログを表示するなりしたいんです。
sun.awt.exception.handler で検索汁
throwsして無けりゃなんか表示するとおもう
>>736 > 表の真ん中にスクロールバー付けたいなぁ
それは一味も二味も違うだろ w
それができるテーブルコントロールなんて他の言語でも見たこと無いけど。
まあ、俺なら二つのテーブルを並べて、スクロールを同期させるかな。
>>738 どうもありがとうございます!
>>739 jarにしてダブルクリックで起動したりもするので、windowsだと何も表示されないのです。
>>741 java -jar file.jar
と「ファイル名を指定して実行(R)..」すれば
例外は全部コンソールに表示される
というか例外はアプリケーションのどっかの層で拾って ユーザーにGUIで見せて後は処理続けるかどうかは状況次第っていうように組むもんだが。 System.errにテキストコンポーネント突っ込んでやると楽。
>>743 その、「アプリケーションのどっか」にこないから問題っていってるんじゃねぇの?
738で解決するようだけど。
例外の対応は場所によって個別対応するしかないよ。 問題ない例外なのかそうでないのかは単純に判断できないし。 運用時ならテキストファイルにログを書き出しておいてそこをメールで添付させるように促すとか 画面のスナップショットを自動でとってdesktopに自動でbmp作ってそれを添付させるとか まぁいろんな方法があるわな。
NetBeans6.0ってJTable使うのにほとんどの場合面倒な設定を直書きしなくてよくなったのな。 新機能であまり取り上げられていないけどこれはすごいな。
SwingでPopup形式でJPanelとかJTableとかを表示したいのですが、どう書けばよいでしょうか?
複雑なロジックの入ったものならポップアップよりダイアログにするほうがいいけど、ポップアップじゃないとダメ? JDialogを普通に使うほうがいい場合もあると思うけど。 JPopupMenuは想定される素の状態だとメニューバーと同じくアクションボタンを並べるものだけど 例によって自由にカスタマイズできるので継承するといいかも。
>>748 JFrameの上に出せるWindowなら何でも良いというくらいの意味だったんですが、Dialogでやろうと思います。
JPopupMenuがカスタマイズできるとは知りませんでした。ありがとうございます。
Swing Application Framework でメニューバーとかツールバーを実装する場合の作法を教えてちょ。
>>750 NetBeansでデスクトップアプリケーションで作ると
メインフレームがメニューとか作られるから参考にするとよろし
>>751 サンクス。
いつもEclipseばっかり使ってたもんで、NetBeansには疎いんですが、
機能的には遜色ないですかね?
Eclipseでいうところの「呼び出し階層を開く」とかそういうのはありますかね?よく使う機能なので。
宣言をしてる場所にとんだりする機能? CTRL+クリックでとぶよ キー操作だけだとどこだったかはわすれたけどEclipseと同じキー設定もあったような気がする 乗換えとかじゃなくて参考に出来ればよいと考えるといいかも でも、GUIアプリ開発とWebアプリ開発が目的なら乗り換えるほうが楽だと思う Swing Application Framework対応していて、@Actionとかぜんぶやってくれるよ
>>753 そっちの機能じゃなくて、選択したメソッドがどこから呼び出されているかを一覧する機能。
かなり重宝してる機能なのであったらいいんだけど。
呼び出し元なら普通に昔からあるけど。
あるオブジェクトをある場所に移動させていきたい時に、 オブジェクトのxとyを少しづつ変化させているんですけど、どうやるのがベターですかね? オブジェクトはいろんな場所に発生するので、 if (x > 行き先X) {
すいません 途中でした。 続き if (x > 行き先X) {
すいません 途中でした。 続き if (x > 行き先X) { x -= 5; } else { x += 5; } if (y > 行き先Y) { y -= 5; } else { y += 5; } こうやってるんですけど、こうするとxかyのどちらかが行き先に到達した場合に、 ぷるぷる震えた感じになっちゃうんですけど、なにかうまい方法ありますかね?
759 :
デフォルトの名無しさん :2007/12/27(木) 00:13:37
それはSwingの問題なのか??
単に行き先Xや行き先Yが5の倍数じゃないんじゃね?
761 :
758 :2007/12/27(木) 00:18:36
>>760 そうですちょうど倍数じゃないときで、移動距離を1にしたくない場合、
どういうロジックが考えられますか?
>>761 それぐらい、自分で考えろよ・・・・
つかスレ違い。
Math.abs() 絶対値 差が5に満たない場合 差の分だけ移動 既に目的地に到達してたら チェックはしない。 移動距離の5は定数にしようかな 思った事を書いてみた。 俺は寝る、がんばれ。
764 :
758 :2007/12/27(木) 00:41:06
そうですか 表示上の問題だと思ったんでここで聞いたんですが・・・ xflagとyflagを作って、&で到達チェックするとか考えたんですけど、 スマートじゃないんですよね たとえばどんなのが考えられますかね?
765 :
758 :2007/12/27(木) 00:43:12
>>763 ありがとうございます
とても参考になりました
766 :
デフォルトの名無しさん :2007/12/27(木) 00:45:01
>どういうロジックが考えられますか? って自分で聞いてるぐらいだからSwingの問題じゃなくてアルゴリズムの問題だろ。
そうですね javaのスレッドで聞いたほうが良かったですね 答えてくれた方ありがとうございました。
java関係ないし 問題の切り分けに注意しないと間違ったスレでは歓迎されないぞ
そうですか 初心者スレッドで聞けばよかったですか いえばただの簡単なアルゴリズムの問題なのですが、 ここなら同じようなことをやっている人がいるかなと思ったんで、 ここで聞いたほうが早いかなと思ってしまいました。
初心者は初心者らしく初心者スレで聞こうな。 まあ、その前にこの程度のロジックは自分で考えられないと、 なにを作るにしても困ると思うぞ。
というか普通に高校の物理の問題じゃないかこれ? そこまでのアルゴリズムじゃないけど。
物理?! どう見ても小学生の算数レベルだろ。
773 :
758 :2007/12/27(木) 01:39:19
>>769 >ここで聞いたほうが早いかなと思ってしまいました。
こんなのを自分で考えられないとしたら先は長い気がするが…
まぁ地道にがんばれ!
ベーマガとか初心者向き雑誌がないと大変なのかなーとかおもっちまった こういうの当時の小学生は普通に作ってたもんね
HSP使ってる連中も普通に作ってるぞ。 というかゲームにSwing使ってるの?
Java2Dを使うことはあるかもしれないが、Swingはあんまつかわないだろうね ただ、ここAWTと合流したからJava2D等も含むといえば含む 本気でやるならJOGLだろうけど
778 :
デフォルトの名無しさん :2007/12/27(木) 02:26:13
本当だ!! いつの間にかスレタイにAWTが入ってた!!
JOGLの正式版が出たときプレイアブルな2DデモとGLCanvasに描画するJMFのレンダラを組んだけど いまじゃJOGLはjava2Dとパイプラインが統合されてんだよね。 OpenGLの関数使いたいわけじゃないなら-DオプションでOpenGL使うようにした方が楽かね? それならわざわざ2D描画に3Dtoolkit使う必要ないし。 バグさえ消えれば。
780 :
デフォルトの名無しさん :2007/12/27(木) 04:23:20
javax.swing.timerなんですけど ↓の様にやること多いじゃないですか このタイマーをストップさせることって可能ですか? public void startTimer() { int i = 0; Timer timer = new Timer(20, new ActionListener() { public void actionPerformed(ActionEvent e) { if (i > 100) { return; } i++; }); timer.start(); } いままで↑のような感じでiが100超えたらリターンするようにしてたんですが、 ずっとタイマーは動きっぱなしなんですよね。 timerはiが100を超えたらストップさせたいんですよ。 timer内から自分自身をstopさせることができればいいんですが...
782 :
780 :2007/12/27(木) 07:55:23
そこも含めていろいろググったんですが... 実際のコーディングを見てください まずメインクラスでクラスAのインスタンスaを10個作る(略 pubilc void run { //メインループ for(int i=0;i<10;i++){ //a[0]からa[9]のxを増やしていき、xが10になったらstartTimer()をplay a[i].x++; if(a[i].x >= 10) { a.startTimer(); } @ } } pubilc class A { int x = 0; int size = 10; public void startTimer() { Timer timer = new Timer(20, new ActionListener() { public void actionPerformed(ActionEvent e) { if (size> 20) { return; } size++; }); timer.start(); } } 実際はa[0]が増分し終わったらa[1]にいったり、同時に動いたりするんですが... @の部分で判定してtimer.stopさせようとしてもすぐストップしてしまうと困るし、 メインループからはtimerがいつ終わるのかわからないのでストップできないんですよね なにか大きな間違いがあるんでしょうか?
Timer#stop()を呼べば止まると分かっているのなら、 後は変数のスコープの問題。 ローカル変数timerをクラスAのインスタンス変数にして、 こんなメソッドを作って public void stopTimer(){ timer.stop(); } これをactionPerformed()内の適切な位置で呼べばいい。 ところでこのサンプルコード、Timerでやってる処理がi++だけなんだが、 これは単純化したサンプルコードなだけだよね? ホントのコードでは、ちゃんとGUIスレッドですべき処理をしてるんだよね?
ああうまくいきました GUIスレッドですべき処理というのがいまいちわかんないんですが、 ある条件でaのエフェクトを起こすみたいな感じなんですよ とにかくこれで寝れます どうもありがとうございました
ボタンのイベント中にタイマーの時間が来たり、その逆も有ったりするって意味じゃね。
>>783 swing.TimerはEDTでactionPerformed呼ぶからそのへんは大丈夫と思
>>779 Java2Dだとαブレンディング/テストとか足りないものが多いから
2DであってもOpenGL使わざるを得ないのが現実
>>785 が正解
あと注意すべきところはSwingTimerは定期処理にはいいけど、
長時間の流れがある処理には向かないというのもおぼえておくとよろし
あくまでも一定時間ごとにアクションイベントを発生させるだけ
詳しく見てないけどSwingFrameworkでjavax.swing.Timerも扱えるんかな?
Javaで動画を再生しようと思っているのですが(Macも含める) ・JMFだとMacで再生出来ない。 ・QuickTime for JavaだとLinuxで再生出来ない。 という認識はあっていますでしょうか?
JMFのクロスプラットフォーム版を含めるなら間違ってる。 というかこれくらい人に聞かずとも分かるだろ。
検索するとそこヒットするんだよね。 JMFはjava動かすスペックと動画デコードするスペックを ダブルで要求するからネイティブ版でもいろいろすると重いぞ。 単純なラッパーだからwin版はバグだらけだし。
2004年から更新してないとか心配なんだけど、 なんでどこも投資して開発を続けないんだろう
こんなところでじゅんを見る事になるとは・・・。
JFileChooserにおいて、ダイアログ表示時のデフォルトの名前を指定するにはどうすればよいでしょうか?
setSelectedFile() で指定してから表示
JFileChooser#setSelectedFile(File)
ありがとうございました!
NetBeans入れたら超もっさり動作でがっかりした。 結局今はEclipseにもどりますた。 SwingアプリがSWTアプリみたいに比較的ストレスなく動いてくれる日はマダ来ないのかね。
もっさりとかストレスなく動くとかってのは主観的なものだから、
>>799 の気分次第で明日にでも来るし、永遠に来ない事もありうる
JavaはマイナーCPUに冷たいだろうし マイナーGPUにも冷たいのかもしれんね
CやC++なら温かいともいえないんじゃね?
>>802 Java使ってるSWTもマイナーCPUやマイナーGPUに冷たいって事に?
今時はお世辞にもメジャーとは言い難い。
いまさらSPARCもねえだろ
金にいとめをつけずWinで最速のマシンもってくれば、Javaでもかなり高速動作するんじゃないの。
既存のコンポーネントにアクションを付加したい場合どのような手段を取るのが比較的単純に済むでしょうか? 例えば、JTreeでCtrl+Fで検索のアクションをさせたい場合などです。
>>810 適当なコンポーネントの ActionMap と InputMap に登録すればいいだろ。
JFileChooserののろさにガックリ
>>368 あたりで話題になってる不具合のせいかも?
InputMapを知りませんでした。 こんな簡単に実現できるなんてSwingは本当にすごいですね。 ありがとうございました。
>>799 いつものネガティブキャンペーン乙
6.0だとEclipseのほうが軽いとかってありえんだろ
SWTはスレ違いだからそっちでやってくれ
今更釣られるアホは寝てろ
たしかに起動に関してはnetbeansめっちゃ遅いよな
何もプラグイン入れなければ、Eclipseは軽いね。
Java EE フルセット入れた Eclipse のもっさりと不安定さはすさまじいものがある。 sysdeo の Tomcat プラグインと JSP, XML の構造化エディタ程度ならめちゃめちゃ軽い。 必要なものを選択できる人間だけが楽できる。
>>819 インストールしてもプラグイン無効にすればいいんじゃね?
swingのコピペを調べてたんだが。 CTRL+X -> CTRL+V で「切り取り -> 貼り付け」した時に、 貼り付け後に、余計なオブジェクトを削除するための後処理はexportDoneでいいんだろうか? なぜか、CTRL+Xを押した瞬間に、exportDoneが実行されちゃうんだ。 exportDoneの説明には、 >データのエクスポート後に呼び出されます。このメソッドは、アクションが MOVE の場合に転送されたデータを削除します。 >MOVE はこの実装にサポートされるアクションでないため、このメソッドの実装では何も行われません。getSourceActions には MOVE が含まれません。 どっちやねんw
822 :
821 :2008/01/02(水) 22:28:33
今のところ、対処方法が分らないので、exportDoneの中では何もせず、 importDoneの中で、貼り付け操作完了後に、 自分で削除操作を実行しようかなと思ってる。
823 :
821 :2008/01/03(木) 00:34:28
なにをバカなことを! 切り取りの標準的な操作は、切り取りと同時に削除だろうが! エクスプローラの動作が特殊なんだ! 新年早々はずかしぃぃぃぃぃぃぃぃぃぃぃぃ!!!!!!!!!!
エクスプローラの動作は、CUTというよりPREPARE-MOVEだからな。
jdk1.6.0u3 import java.awt.Frame; これってバグなの?
___ ━┓ / ―\ ┏┛ /ノ (●)\ ・ . | (●) ⌒)\ . | (__ノ ̄ | \ / \ _ノ /´ `\ | | | | ___ ━┓ / ― \ ┏┛ / (●) \ヽ ・ / (⌒ (●) / /  ̄ヽ__) / . /´ ___/ | \ | |
>>827 >>828 バグってたのは俺のほうだったw
*.class 削除したらコンパイル通ったよww
どういう環境だよ・・・
テストするならTestFrameとかにすべし
相変わらず質問スレは気持ち悪いな
import java.util.*; import javax.swing.*; public class NewJFrame2 extends javax.swing.JFrame { List<String> dummyList = new ArrayList<String>(); JList jList; public NewJFrame2() { setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE); JScrollPane jScrollPane = new JScrollPane(); jList = new JList(); jScrollPane.setViewportView(jList); getContentPane().add(jScrollPane, java.awt.BorderLayout.CENTER); for ( int i=0; i<300; i++ ) { StringBuilder sb = new StringBuilder(); int max = (int)(Math.random() * 100 + 1); //int max = 20; for ( int j=0; j<max; j++ ) sb.append("A"); dummyList.add(sb.toString() + " " + i); } jList.setModel(new AbstractListModel() { public int getSize() { return dummyList.size(); } public Object getElementAt(int index) { return dummyList.get(index); } }); pack(); } public static void main(String args[]) { new NewJFrame2().setVisible(true); } }
JListのカーソルキーによるスクロールことで謎があるので投げてみる。
>>835 のプログラムなんだけど、単純にJListの中に300個のダミーデータを入れている。
カーソルキーで下にスクロールしていき、数十行進んだら、こんどは上に10行くらい
スクロール。
そしたらまたカーソルキーで下に移動。
すると、選択されてる項目が一瞬で画面の下までジャンプしてしまう。
このプログラムで、maxを20とか一定の値にした場合はジャンプしない。
JListの各セルの文字列長をランダムに変えたものを入れるとこの現象が起きる。
こういう仕様なのかもしれないけど、一瞬で選択位置が飛ぶと、
目線がそれてしまうので操作感がよくない。
maxを固定したときのように動作してほしい。
なんとかする方法ないかなぁ?
>>836 解決法でないのだが、「ジャンプ」の条件について。
固定長かどうかではなく、Viewport の外に描画域があるかないか、ではないのか、と。
固定長で横スクロールが出るようにしたときは「ジャンプ」するし、
固定長でなくても、横スクロールが出ないときは「ジャンプ」しない。
JScrollPane で横スクロールを非表示にしても、見えない部分があるときは「ジャンプ」する。
フレームの横サイズを水平スクロールバーが出なくなるまで広げてやればジャンプはしないな。 しかしちょっと設定をいじくったぐらいでは解決しそうない。 オーバーライドして一部の機能を殺すとか。
839 :
デフォルトの名無しさん :2008/01/10(木) 18:27:36
バージョンアップを待つのが一番楽そうだね
よく見つけてくるな。すげーよ。
有名なバグだぞ。 JListに512個要素突っ込むとバグるとか放置されてるし。
>>842 2000個いれてみたけど、なにかバグあんの?
512個入れて、一番したのアイテム選択してCTRL+B これで、すべてのアイテムが2個ずつになって1024個になるというステキなバグ
1から10000までの数字を全部掛けたときに 末尾に並ぶ0の個数を求めるのをJavaでおながいします
846 :
デフォルトの名無しさん :2008/01/10(木) 23:10:36
それはSwingに関係あるのか?
847 :
デフォルトの名無しさん :2008/01/10(木) 23:16:39
>>844 バグが出なかったんだけど
他になんか条件ないの?
>>845 class Test{
static void main () {
cnt5 = 0;
for (int i = 1;i <= 10000; i++)
if(i % 5 == 0)
cnt5++;
System.out.println("count" + cnt5);
}
}
ああ、5から5ずつ足してくから10000/5=2000か?
10を素因数分解して2*5。んで、2は大量に有るから、5だけ数えれば良い、と。
>>850 i%25 とか i%125 も数えなきゃだめじゃね?
どのみちグズグズっぽいんだが。
いかにロジカルに解くかが課題じゃなけりゃ BigDecimal で階乗求めて数えた方が早い。 実用に問題ないレベルならシンプル記述に徹するのも美学。
80-20の法則な。今丁度勉強中。
857 :
848 :2008/01/11(金) 01:29:37
直した。 class Test{ static void main () { int cnt5 = 0, n; for (int i = 5;i <= 10000; i += 5) { n = i; while (n % 5 == 0) { cnt5++; n /= 5; } } System.out.println("count" + cnt5); } }
だからどのへんがAWT/Swingに関係あるんだよと
859 :
デフォルトの名無しさん :2008/01/11(金) 01:57:27
839だけど、このバグは初めて知った。
>>有名なバグだぞ。
にしては、バグ登録日があまり昔ではないが?
>>842 >>844 そんなバグはありえない。
まず、JList、JListのsuperクラスにCTRL+Bなんてデフォルトのキーバインドはない。
さらに、ListModelへ項目の追加、削除が可能であることを
JListは知りようがないから、JListがListModelに項目を追加することはできない。
(ComboBoxModelのMutableComboBoxみたいなインタフェイスはない。)
そもそも、登録もされていないキーバインドが実行されるなら、
JListでなく、JComponentのバグだし。
JListがListModelに項目を追加する唯一の方法は、
ListModelをDefaultListModelへダウンキャストすることだけど、
Swingのソースコードにダウンキャストするような箇所はない。
さて、どうやったら、ソースに書かれていないことを
JListが実行するのだろう?
256発あてるとバキュラを破壊できるんだぜ
Observer や Composite 型の設計だと本体クラスでそう書かれてないからライブラリのバグじゃねーとは 断言できないんだけどな。実行時のリスナやら集約の親子まで調べてやらないと。
ちょっと尻切れトンボだった。 JLabel クラスが無罪であることを得々と説いてもあんまし意味なくね? という話 (実装者乙、でなければ)。
JEditorPane とか、せめて W3C の DOM で xhtml + CSS になってくれりゃ XSL で処理できるからデータを利用しやすいんじゃがのう。
自分でやれば良いだろそれくらい。
Lobo Browserに投資する企業はいないのかねぇ
866 :
デフォルトの名無しさん :2008/01/17(木) 19:01:08
>>865 ブラウザを使うのがPCだけしかない考えてるなら、考え直した方がいい。
Swing の HTML 機能も携帯のフルブラウザにすら追い越されて久しいわけだが。
シンクライアントに必要なだけだし携帯とかいらんな
>>868 むしろあの HTMLEditorKit 系をおまいがどこで活用できてるのか知りたい。
871 :
デフォルトの名無しさん :2008/01/17(木) 19:31:39
ブラウザをJavaでやる必要があるのか?
普通にあるぞ。例えばヘルプ機能とかの生産性があがる。 JDICだとXSS対策が必要だろうけど、こっちは不要。
うん、ヘルプは俺も使う。だがどうしてもその Sandbox から出してやれんw
バカばっかだな
Sandboxなフルブラウザは作れると思うが。 Rhinoにその手のインタフェースを与えなきゃいいだけだ。
フルブラウザという言葉自体胡散臭い
頭の悪い煽りがやたら入るスレだなw
たまに客がどこで見つけたか知らないが 「Swing でもブラウザみたいなこと できるんでしょ?」 と言い出す事もあるが、あれを見せるとさすがに黙る。
つ Flying Saucer
880 :
:2008/01/17(木) 20:39:33
Swing の HTMLEditorKitは文字通りEditorのためでブラウザみたいに表示onlyではないからね。 でも日本語とかIMEのこととか考えてないよな、あのHTMLEditorKitは。表示だけならいいけど。
4.01準拠マダー?
JavaがC++より優れている事を示す 絶好の材料だと思うんだけどなあ<ブラウザ
標準ライブラリの有無で言語の優劣を決めるのか?
実際問題、ライブラリとIDEが言語仕様の優劣を余裕で帳消しにするからね。 D言語1.0がまったく普及しない原因がそれと言われてるし。
C++の失敗もそうだね 標準ライブラリがしっかりしてれば Javaは生まれなかったかも知れない
Perl嫌いだけどこれだけ流行ってしまったのは CPANのおかげと言っても過言ではない死ね
>>883 の中では SmallTalk が世界を救うようです。
888 :
デフォルトの名無しさん :2008/01/18(金) 03:53:19
java c++ d を同列に扱う馬鹿がおる
>>888 人を否定するなら代替の主張を出してからにしたら?
なにいってんだ?
同列だろ。言語仕様は実装とは違うレイヤーにある。
892 :
デフォルトの名無しさん :2008/01/18(金) 19:37:12
いいかげんスレ違いだろ 次の話題どうぞ ↓↓↓
JMFって商用可能ですか?
スレ違い
どうかんがえてもここだろ。自治厨とか懐かしすぎ。
JMFがここだって
897 :
デフォルトの名無しさん :2008/01/18(金) 21:04:19
じゃあJOGLはここでいい?
じゃあ、SDL for javaもここだな。
>>865 の脳内ではメディア再生ライブラリがGUIツールキットなんだよ。
普通の考えじゃん。頭おかしいんじゃね?
JOGLとJava3Dはまったくの別物だぞ・・・ むしろGLCanvasとかGLJPanelとかAWTとSwingの外部コンポーネントと考えれるからこっちだろと シンプルに描画だけのOpenGLの実装だからユーザーに全ての描画を任せるタイプで フルスタックで重いJava3Dとはかなり違う
JOGLはOpenGLスレで良いらしいぞ
OpenGL自体の知識はOpenGLスレが本筋 でもGLCanvasの挙動とかどうかんがえてもむこうの範疇ではないと思うんだが
JMFの話題についてけないゴミなんだろうな
スレチ
Java標準拡張のメディア再生フレームワークのどこがスレ違いなんだかw
スレタイ嫁アホ
誰も答えられる奴がいないんだろう。フヌケばかりだしw
自己紹介乙
頭の弱い自治厨が沸いてるみたいだけど、前からJMFの話題は出てるから。
スレタイの読めない盲目がわいてるからスルーしろ
JMF涙目www
>>893 ライセンス読むと良いよ。
たしかRuntimeと同じ特例が適用されてたと思う。
そういえばJava Media APIのスレってないんだな。 JMFとJOGLは需要ありそうというか隔離しないと他で暴れるバカが出てきそうだけど。 JAIは実際に使ってるの見たことないな。 Java Media APIスレ立てたら誘導用くらいには機能するかね?
>>915 JMFはあってもよさそうなもんだなぁ…
JOGLは…どの程度使われてるんだろ…?
ちなみにJava Media APIsはこんだけある ・Java Media Framework (JMF) ・Java Sound API ・Java 3D ・Java Binding for OpenGL(JOGL) ・Java Advanced Imaging(JAI) ・Java Image I/O ・Java 2D ・Java Speech API ・Java Telephony API(JTAPI) JMFとJava Advanced Imaging、Java Image I/O 、Java 2DはAWT/Swingコンポーネント関係ないなら分けた方が良いと思うんだけどな。
使われてる割合JOGL>JMF 知名度JMF>JOGL 日本語リソースの多さJMF>JOGL じゃない? javaでゲームつくるとなるとJOGLは欠かせないけど、なきゃないでJava2Dで十分って感じ。 ゲ制のJavaでゲームつくるスレが落ちたからJOGL聞く場所がないんだよ。
>>918 javaでゲームつくるとなるとJOGLがほしい、ってのはわかるんだけど…
そもそもPC向けゲームをつくるのにjavaを選ぶ理由がないよなぁとか思うわけですよ?
その手のゲームって結構あるものなの?
コードに手を入れず入出力フォーマット増やしたいときに使うよ > JAI まぁバグも多いけど。
JOGLはOpenGLスレでもいいんじゃない ところでJMFとJOGLって比較するもんなのか…?
別に比較したいわけじゃなくてスレたてるかどーすっかって話だろ。 需要的に考えると全部まとめて Java Media API スレとかでもいい気がするな。
ぐだぐだ言ってないでスレ立てればいいだろ
JOGLは2.0はサポートするけど1.3で拡張からコアに入ったAPIは混同するという理由で1.3で追加されたAPIはサポートされてないから迂闊にOpenGLスレいけないんだよ。 あとjavaでゲームつくるってのはかなり居る。 日本でもググレば出てくるし、海外はJOGL,JInput,JOALはセットでゲームつくるときに使う。 ただ、リソースは海外の方が多い。 だから日本語のリソースがないから英語読めないと何も出来ネ!ってなる。 俺も需要的にJava Media APIsで統一してスレ立てても良いと思うんだが・・・誘導・隔離用にw IIOとかJava soundはアプリケーションプログラマが直接いじる所って少ないしさ。
925 :
デフォルトの名無しさん :2008/01/25(金) 20:08:13
JOGLって将来的に標準に入るって可能性ありますかね?
クライアント向けのJava標準拡張は全てが滅茶苦茶将来性がある。 根拠はJava 7に登場のJava Kernel、JAM、JavaFXあたり。これらは要チェック。 Java Sound本、最近でたね。つい衝動買いしたけど、まだ読んでなかったり。
927 :
デフォルトの名無しさん :2008/01/25(金) 20:29:26
工学社ってだけでなんか敬遠してたんだけど実際どうなんだろう・・・
928 :
デフォルトの名無しさん :2008/01/25(金) 23:12:41
JOGLに将来性ある事は否定しないけど、まだ3年ぐらい先の話だろう。 つまり人柱。日本語のページも全然ないし。 あまり勧めたくはないけど、もしゲームで、かつwindowsなら、C#じゃないか?
あんな重いの話にならん。 1コア丸々使ってる箱○なら別だが
931 :
デフォルトの名無しさん :2008/02/06(水) 00:48:21
で、いい加減そろそろ、JAIのメモリリークは直ったのか?
932 :
デフォルトの名無しさん :2008/02/07(木) 21:21:18
複数の Component の描画の順序(重なり具合)を任意に変えるには、 親コンテナ.remove(comp) / 親コンテナ.add(comp, index) もしくは getComponentZOrder(comp) / setComponentZOrder(comp, index) の組み合わせしか方法はありませんか? Component のほうが、自立的に一歩前進、とか、一歩後退、みたいな仕掛け、ありませんかね…? たとえば、大、小の円がそれぞれ component だったとして、 それを、drag で、重ねたときに、◎になるようにするしたいんですが。 (2つに限らず、3つ、4つでもいけるように) getComponents してループさせて入れ替え、しかないでしょうか。
JLayerdPaneを増やして載っけるとか。
934 :
932 :2008/02/07(木) 22:13:16
>>933 おぉ、JLayeredPane、忘れてましたw
duke 君のデモソースはチェックしたのに、なにしてんだ>自分
そういう Pane がある、ということは裏を返すと Container/Component
には、あまり気の利いた順序変更の手段はないんですかね。
ひきつづき、つっこみ・ご意見お待ちしております。
実際のところ重なりの順序を動的に変えたいことってあるの? それが必要なパターンが想像できないんだが。
CardLayoutでもいいんじゃね?
937 :
932 :2008/02/07(木) 23:03:27
レス、どうもです。
>>935 ビジネスアプリケーションじゃなくて、えと・・・
ゲームでキャラが重なる、みたいなヤツを思い浮かべてください。
>>936 CardLayoutは、ノーチェックでした。
リファレンスをチェックしてきますノシ
>>937 ゲームのようなやつならSwingつかわずにJava2D等で描画したほうがいいよ
速度的にもメリットが薄い
SwingよりJava2DじゃなくてSwingよりAWTでJava2Dじゃね? Java2DよりJOGLの方がry
Java2D って Swing じゃないのか?
941 :
932 :2008/02/07(木) 23:46:41
>>936 CardLayout、あとは自分で動作とか確認しますが、リファレンス曰く、
「コンテナ内の各コンポーネントをカードとして扱います。一度に 1 枚のカードだけを表示し…」
う、1枚では困るぅ〜。
>>938 Java2D にそんなに詳しくないのですが、
ゲームのキャラでなく、(バーチャル環境の)アバターみたいのヤツを
前後(奥行き)に操作する、といったような例だとどうでしょうか。
イメージのまま取り回すのは管理が大変かなぁ、とビビッているのですが…。
設計次第ですかねぇ。
速度の要望はそんなにシビアでないです。
>>940 違うAWT、Swing,Java2Dは同じ層にあるUser InterFace Toolkits。
AWTはAWT,SwingはSwing,Java2DはJava MediaのAPI。
そもそもAWTは重量WindowToolkitでSwingはJava2Dを使った軽量WindowToolkitだろ。
Java2Dは2D描画ライブラリ。
javadoc嫁。
>>939 JOGLいいけど、テクスチャを単純に表示するのが目的ならそこまで必要ないと思う
プラットフォームによってパッケージが違うのもやっかいだし、Line引くときたぶんはまる
Java2Dはαブレンディングがまともに実装されていないのがきついかな
おかげでゲームで使うときはJOGL必須だ
>>941 その動かすキャラクターの動く範囲は?
Window内をじゆうじざいにということでないのなら、
その描画はJava2Dによる重ね合わせのほうが難易度は低いと思う
αブレンドなぁ。結局Java2Dだとハードウェアアクセラレータ効かないんだよな。 JOGL1.1ならcom.sun.opengl.util.j2dが追加されたから BufferStrategyと同じ感覚で使えるんだけどcom.sunパッケージは嫌い?
レイヤードペインの話題が見えたので便乗 1.JFrameのgetLayeredPane()に直接JLabelとか貼り付けて遊んでた。 2.この状態で、ポップアップメニュー出したら、表示されなかった。 3.マウスをずるずる動かして、見えないメニューの上を通過させるとメニューが表示された。 ※メニューが「パッ」と全部表示されるんじゃなくて、 マウスが乗っかったメニューアイテムが1つずつ表示される。 4.JLabelを乗せるレイヤーを変えても問題は解決しなかった。 そもそも1.の使い方がナンセンスなのか。 レイヤードペインとポップアップは気をつける何かがあるのか。 誰か知ってる人がいたら教えてください。
混ぜるな危険じゃない?
ポップアップってどっかのレイヤーの上に描画されるんだっけ? GlassPane?
948 :
デフォルトの名無しさん :2008/02/08(金) 09:58:10
おはようございます。932,941でございます。 とりあえず、LayeredPane を導入してみますデス。 もう一個、教えてくんです・・・。 contains(int x, int y) メソッドって、 リスナーにしなくても mouseEntered なとき(Component 上に マウスカーソルがあると)、勝手に呼ばれるようですが、 それでよいです??? Documented な仕様ですか? override して使わないほうがよさそうですよね。override しちゃだめ? だったら final にして〜〜。
949 :
デフォルトの名無しさん :2008/02/08(金) 18:15:56
>>947 描画される順番の問題。
GlassPaneは自分で描画しない限り何もない。
GlassPaneでイベント握り潰せば結果的にGUIをブロックできる。
>>947 layeredPane の POPUP_LAYER じゃない?
951 :
945 :2008/02/09(土) 00:25:29
追記 JLabelにアニメーションGIFを表示させた場合、 絵が書き換わるたびに、マウスずらしで表示させた ポップアップメニューが消されたw ・JLabelに文字を表示させた場合 ・普通にコンテンツペインにJLabelを置いた場合 この状態での実験も。。。今度やってみる
どうしてもバグければ JPopupMenu#setLightWeightPopupEnabled を false にしてみる手も
バグ-ける
その活用形はおかしい バグ-かろう バグ-かった バグ-くない バグ-い バグ-ければ
955 :
948 :2008/02/09(土) 13:01:03
昨日、速攻、JLayeredPane 組み入れました。 気がついたのは、 より上位の Layer のコンポーネントが、より下位のコンポーネントを 完全に覆い隠すと(感覚的にいうと lower.getBounds() < upper.getBounds()) のとき下位のコンポーネントが描画されない(消える) つーことがありました。 理屈としては、そのほうが、高速化が図れるのかもしれないけど、 上位の矩形のイメージが透明化されてるときちょっと困るんだけどなぁ。
>>955 上位レイヤのコンポーネントでsetOpaque(false)でどう?
setOpaque(false) してる?
958 :
948 :2008/02/09(土) 15:38:21
>>956 ,957
レス、どうもです。
setOpaque() してると思うんですが、今日は、職場でないので
確認できないっす。火曜日にチェックします!
みなさんは休出っすか?
つーか自宅にPCないんか
961 :
945 :2008/02/10(日) 03:09:13
おいおい、会社で趣味プログラミングかよw
それはともかく、
>>952 さんありがとうございます。
ポップアップでまくりですよ。
そして、実験の報告。
>・JLabelに文字を表示させた場合
結果:×
レイヤードペインに文字ばっかりのJLabelを乗せてみた。
文字の後ろにメニューがでた。文字の隙間からメニューが見えてるw
マウス動かすと文字の前に来るあたりの挙動は一緒。
>・普通にコンテンツペインにJLabelを置いた場合
結果:○
当たり前か。
現在TransferHandlerを用いてJTreeにコピーアンドペーストの機能を付加しています。 同様のアクションをJPopupMenuにも加えたいのですが、どのようにすればよいでしょうか? CTRL C, CTRL Vではうまくいくのですが、JPopupMenuからアクションを行うと、ソースが変わってしまいだめなようなのです。 TransferHandlerのcopyのアクションのコードを見てみると、アクションソースがJComponentのインスタンスでなければ弾いているのが原因のようです。 そこで // a:TransferHandlerのアクション private Action createAnotherSourceAction(final Action a,final Object src){ return new AbstractAction(){ public void actionPerformed(ActionEvent e) { e.setSource(src); a.actionPerformed(e); } }; } こんな感じで新たに生成してやるとうまくいくのですが、わざわざ作り直すのは抵抗があって・・・ 何か打開策がありましたらご教授ください。
>>962 アクションが操作対象となるJTreeのインスタンスを持てばいいだけじゃないのか?
964 :
962 :2008/02/15(金) 09:33:09
聞いておきながら遅くなってしまってすみません。
JComponentのインスタンスでなければ弾いているので、そもそもアクションまで起こっていないんです。
CopyActionくらい自分で実装して、
>>963 さんのおっしゃるように対応したコンポーネントのインスタンスを持たせていた方がいいかもしれないですね。
ありがとうございました。
例えばリストにTransferHandlerを設定するとき、COPYなのかMOVEなのかCUTなのか判定させたいときどのようにすればよいのでしょうか? それを実装するコンポーネントでどのようなアクションを取ったかを調べられれば問題ないのですが、それがMouse系のリスナーではスマートに調べられなくて困っています。 教えください。
勘違いしていました。 何十回か氏んできます。
GUIのデザイナはなかなか決定的なものがないようなのですが、 メジャーどころだとNetbeans付属のものやVisual Editorがありますよね。 ほかにもJformDesignerや、jvilderなどがあるようです。 みなさん、GUI開発にはどんなツールをお使いですか?
テキストエディタで手書きしてまつ・・・
jiglooがなかなかおすすめ。 慣れないうちは思うようにデザインできないけど慣れたらかなり使いやすいかも
私はVisual Editor。でも、ちょっとコンポーネント置いただけですぐ 1000行ぐらいいっちゃうのがちょっとアレですが。 jiglooは冗長にならないように書けます?
Visual EditorってGroupLayoutサポートしてましたっけ? あれ使えばそんなに冗長にはならないですよ 個人的に一つ一つのコンポーネントのプロパティ設定で勝手にブロックで囲んでくれてるのが見やすくて好きです。
残念、Visual EditorにはGroupLayoutのサポートはまだないみたいです。 他のデザイナを試してみることにしましょう。Jiglooか、もうNetbeansかな。 EclipseのプラグインでWindowBuilderというのもこれに対応しているようですが、 日本で使ってる人があまりいなさそう・・・
ソースコード生成するんじゃなくてXAML式に 書けるGUIデザイナが欲しすぎる。
リファクタリングとかソースとの動機が取れなくなりそうだ
一般ブラウザ並みに JTextPane 強化して HTML ベースで GUI 組めるようにしたほうが 何かと合理的。
それはねーよ 細かいイベント等制御するためのSwingなんじゃねーか HTMLベースでいいのならWEBアプリにするだろ
onmouseover などからイベントリスナ呼びゃいい話でしょ。必要なら追加すりゃいいし。 Web 開発の資産やスキル転用できるし、単純にブラウザコンポーネントとしても転用も可能。 まじめに考えてるわけではないのでカスタムコンポーネントの追加方法なんか考慮する 必要はあるが、そんな頭から否定されるほど悪い話ではないと思うが。
そんなの全く考えたことなかったから結構新鮮だわw まぁ今の環境で満足だし、そこまで外部化してしまわなくてもいい気もするなぁー
GUIコンポーネントは宣言的に置くようにしてロジックは別にしたいってことでしょ JavaFXがやろうとしてるんじゃないかな ただXMLベースじゃないみたいだけど
そこまでWeb開発の資産やスキルを転用したいのなら、 スタンドアロンアプリでTomcat動して、UIはブラウザ、ってすればいいんじゃね?
アプレットや Web Start とかで使えねんじゃ。
XULを再発明したいのか
JSP や JDBC を再発明と言う? 別に XUL の Java 実装でも良いけど。
あ、いやこの話はそろそろやめる。
>>977 scriptのIDEサポートとかJavaのほかに別言語を覚えないといけないとか
そもそもブラウザによって違いがあるというのに・・・
ボタンクリック等のイベント程度でいいのなら別にかまわんとおもうけど
XMLは長ったらしすぎるので すっきりとロジックと融合したGUIが宣言ベースでかけるというのが 売りなのでしょう。 ただ、いまいち方向性が分からないというのは・・・。
987 :
デフォルトの名無しさん :2008/02/24(日) 21:57:42
SWTスレとマルチで失礼します。 クライアント側のJavaで、RTF文章を何らかの形で表示(編集できなくてもOKです)させたいのですが、 JEditorPaneはあまりにも古すぎてJREに同梱されているLICENSE_ja.rtfすらマトモに読めない、という 情けないことになっています。他に何らかの代替/回避方法はないのでしょうか?
RTFをパースして使えるコンポーネントに流し込むところを自作する
うふふw鬼ww
990 :
987 :2008/02/26(火) 10:29:05
>>988 >>989 いや、マジメな話、(ライブラリ等を使うかは別にして)今のところ、ググって引っかかるのはそのアプローチしかないみたい。
もう少し簡単な方法がないかと思って質問してみたのですがね(笑
SWT なら OLE でハメ込めるんじゃなかったっけ?
いまどきそれだけのためにSWT使うってのもなぁ
非常に抽象的な質問で申し訳ないのですが、スクロール可能なコンポーネントを作る際、Scrollableを実装するだけではだめなのでしょうか? 単純に実装してJScrollPaneにのっけてやるだけでは、実装したメソッドのうち、 getScrollableTracksViewportHeight() getScrollableTracksViewportWidth() の二つは呼び出されるのですが、肝心の getPreferredScrollableViewportSize() が呼び出されないのです。 どうしてでしょうか?
994 :
デフォルトの名無しさん :2008/02/28(木) 03:04:21
みんなBoxLayoutはつかってないのか? ほとんどこれ1本でやってるんだけど。
995 :
デフォルトの名無しさん :2008/02/28(木) 03:21:59
> 993 getPreferredSize()はどう実装している?
1レス埋めて去る。
ところで次スレは上の見すったやつ使うの? せっかくスレタイ変えたのに
っと、気づいたらもう999かよ
1000 :
デフォルトの名無しさん :2008/03/01(土) 19:25:58
上野でいいじゃん 細かいこと気にするなよ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。