JPanelを任意の個数だけ、for文使って作ることって、できるんでしょうか?
出来ないと思った理由が聞きたい
9です。 たとえば、JPanelを10個まとめて作りたいとき for (int i = 1; i <= 10; i++){ String s[i] = ("jPanel_"+i); JPanel s[i] = null; } ↑みたいに、for文使って一気にJPanelを作りたいですけど、↑じゃうまくいかないので 他に方法があれば教えていただければと…
言語仕様から学び直せ。 sは2回宣言されています。
>>12 s[i] ってのは変数名には使えないし、
配列なんだとすれば宣言と同時に配列アクセスしてるし……
>>11 JPanel[] panels = new JPanel[10];
for(int i = 0; i < panels.length; i++) panels[i] = new JPanel();
この質問、初心者質問スレで読んだ気がするな。
マウス側面の拡張ボタンをJavaで使う方法おしえて。
マウスイベントって3つまでしかサポートしてなかったような 5.0からはマウスのボタンの数は取得できるがそれを使ってどうのこうのはできないはず
返答どうもです。 やっぱ無理か…。 5ボタンマウスって、あんまり使われてないのかなあ。
ほとんどのアプリは3ボタンだし、ただのショートカットがほとんど ショートカット以外の使われ方してるアプリってどれだけある?
ボタン5個も何に使うの?
ブラウザやファイラで「進む」・「戻る」に便利に使ってるよ。 でも5ボタン必須のアプリなんて、ちょっと思い当たらない。 ホイールでスクロールみたいに、あれば便利って程度かな。
ホイールは定着したけど、5ボタンは流行らなかったね。
まわりの奴におしえても、使わないんだよね。ホイールは使うようになったけど。
3ボタンでも真中は特別使い道がない。
進む戻るだけは俺も使ってるけどあれはショートカット効果だけだからなぁ 4以上のボタンを使ってるわけではないだろう
25 :
デフォルトの名無しさん :2006/10/20(金) 22:03:08
>>23 自動スクロールに対応してればちょくちょく使うよ。
あとFirefoxだとタブを簡単に閉じられるしね。
Firefoxだと通常のクリックが真ん中ボタンといえるくらいだ 考えて左クリックを使う
そういやそうだね いつも新しいタブで開いてるや
7ボタンとチルトホイールはどうだろう?
ところで、ゲームパッドに標準で対応してほしい。あとタブレット
ゲームパッドってどんなOSにも標準で対応してたっけ? 積集合OSであるJavaにはそういう限界があるよ。 タスクトレイやブラウザとかがJava6に出てきただけでも感慨深い。
対応していないメジャーOSはないはずだし 一部だけで動く実装でも1.4以降は投入されてるから理由にならん
MSXのようにパッド0番目はキーボードとかいう実装にしておけば キーボードとパッド両対応作る手間がないし未対応OSであっても問題ないんじゃね?
あ、1chip MSXの入金忘れてた
ちょ、全然スレ違いw 5ボタンなんてケチくさいこと言わず、101個ボタンつけたらどうよ? で、ボタン押すと文字が入力されるようにしておくの。 そしたらキーボード要らないじゃん。
37 :
デフォルトの名無しさん :2006/10/21(土) 23:46:22
>>36 それ、キーボードじゃん!!!
あー、食いついちゃった。orz
Choiceで選択してButtonで実行てどうやるんですか?
ChoiceとButtonを用意してButtonのActionListenerに処理を実装すればいい。
Choiceってのはなんだ?
public void itemStateChanged(ItemEvent f) { String a = (String)f.getItem(); if( a.equals("A") ){ } else if( a.equals("B") ) { } } public void actionPerformed(ActionEvent e) { if( e.getSource() == b1 ) { } } 処理の部分でどれをチョイスしたか分かるようにしたいんですが
>>41 ButtonGroupを利用しなされ
ButtonGroupに、JRadioButtonをaddしておき、
actionが起こったときに、ButtonGroupからgetSelection()で選択されたものを取ればOK
AWTは1コンポーネント=1ウインドウだからシステムリソースを食いまる問題って解決されたの?
誰も使ってないのに何が問題なの?
AWTはスレ違い
>>43 AWTコンポーネント自体使うことが推奨されてないから解決されることはない。
SWYスレっていつの間にかなくなってたんだね
おれおれ
ゴスリンから大切なお知らせとお願いです。 古い年式のウィジェットを探しています。 ネイティブにピアを生成するタイプで、ご覧のバージョンの JDK の引き取りや、アップデートを行っています。 対象 JDK は万一の場合、訴訟事故に至るおそれがありますので、直ちに使用を中止していただき、 至急、ご連絡をお願い申し上げます。 ____ . .| | /\二___\.. | | |\/‖ '''.| | | DUKE | | ‖┌┐ .| | | ↓ | | ‖└┘ .|┌|=.|ヽ_ ゝノ゛ | | ‖ .|二| |回_ ●> | | ‖ .|└|=.|/ 〆 |ミ.| ‖ .| | | |\ノ.|ミ.| ‖ .| | | |_》 | | ‖ .| | | \|_‖____.| | |
旧い入門書だとSwingすらサンプルがねぇw で、SWTスレどしたのよ。
こっちの方が良かったかな…。 Java SE 6ではActionにSELECTED_KEY、DISPLAYED_MNEMONIC_INDEX_KEY等が追加されたんだね。 今まで何でないのか不思議だった。AbstractButtonにもHideActionTextプロパティが追加されてる。
54 :
デフォルトの名無しさん :2006/11/04(土) 01:04:21
>>53 よくわかんないけど、普通に貼り付ければこうなるんじゃないんだっけ?
BorderLayoutでCenterに配置するとか。
55 :
53 :2006/11/04(土) 01:41:03
普通に貼り付けただけだど、JTableがリサイズされないで、JFrameの大きさだけが 変わってしまいます… ウィンドウサイズと同じサイズにリサイズさせたいのですが、そのやり方わからなくて…
>>55 レイアウトマネージャをどう使っているか次第。
NullLayoutなどだと、座標で配置されているから、ロジック書かないとリサイズはされない。
>>54 が書いているように、BorderLayoutでCenterに配置するのが普通。
57 :
53 :2006/11/04(土) 10:32:33
>>54 ,56さん
ありがとうございまいた。私の知識不足でした。レイアウトマネージャをBorderLayoutにして
CENTERに配置すればできました。
できなかった理由としてFlowLayoutとGridLayoutを使っていたためだと思われます。
レイアウトマネージャについて勉強してきます。
ありがとうございました。
NetBeans使うというのも手
ネット上のxxxx.jpgなどの画像ファイルをGUIに表示させることって出来ますか?
URLクラスからopenStreamすればいいよ
とおもったが別にImageIO.readはURLをそのまま受け取れたなw
表示させるだけでいいなら、JLabelでHTML書けばOK。
JavaのHTMLってどこまで準拠してんの?
あんまり知らないけど、信用してはいけないことは知ってる。 実装がかなり前に止まっているとか。
Swingアプリで、「HTMLのテーブルみたく表示したいんだけど。」 と聞かれて、面倒くさいから、「setTextでHTMLをセットするとOK」と答えた。 で、setTextするための、HTMLを文字列でセッセと作っていたのが、そのうち Velocityで雛形作って、セットするようになっていた。 ほとんど、Webアプリ そのうち、IEだと、こう表示されるのが、うまくいかないとか言われそう。
JEditorPane#setText()したものを、HTML表示にすることってできます? バージョン情報を表示するに、書式をいろいろ変更して使いたかったんですけど、 なんかHTMLがそのまま表示されます。 ファイルにしてsetPage()使わないとダメなのかな。。 仕方ないので、今はJTextPaneを使って、ちまちま書式設定して出してます。
>>66 自己レス。JEditorPane#setContentType("text/html")を使えばいいのね。
69 :
デフォルトの名無しさん :2006/11/04(土) 22:17:17
質問です。 JTableの1行目のcolumnを1列目に縦に表示するには、どうすればよいのでしょうか?
71 :
69 :2006/11/04(土) 23:09:15
>>70 すいません。
エクセルみたいに行番号(1,2,3..)列名(A,B,C...)のような表示をつくりたいのですが…
74 :
69 :2006/11/04(土) 23:30:21
>>73 JTableにはもともとないんですね…
サンプル大変参考になりました。
ありがとうございました。
なんか質問な〜い?ただいまSwing勉強中。
>>75 システムフックの方法が知りたいけどSwingの話題じゃないので黙っておく
質問 フォーカストラバーサルサイクルルートについて詳しく
>>77 初耳だ。ちらっと見た感じだと、
TABを押した時なんかの、
次にフォーカスを与えるコンポーネントを探すクラスかな?
今まで使う場面が出たことがないけど、
FocusTraversalPolicyを継承してクラスを作れば、
コンポーネントの値とかでも順序を付けられたりするみたい。
質問が具体的なら、もう少し調べてもいいが。
JTableの中のセルにJPanelいれたときとかこれいじらんとだめだよな
>>78 具体的じゃないけど便乗で
5.0 -> 6.0 でフォーカス関係で変わった事ってまとめてるとこないかな?
5じゃ動いてたコードが6で動かなくなっちゃったから・・・
>>79 なるほど。
>>80 ごめんなさい、わかりません。
思ったとおりにリスナーが呼ばれないとか、そんな感じですか?
>>80 まじか
そのへんまではまだ詳しく調べてないけど困るな
正式版が出たらチェックしようという状態だったがSwingに大幅に手が入ってるのなら別だ
Sunなにやってるんだよ〜
1秒でわかるSwingのバグつきを夏にリリースしてたし
まぁ5.0でJavaSoundの挙動が大幅に変更されたりとか
日本語印刷が通らないあたりでおかしい気はしたが
>>82 今日たまたまJavaで印刷のサンプル動かしたら、
DocFlavor.INPUT_STREAM.AUTOSENSE を使わないと、テキストが印刷できなかった。
しかも日本語文字化けしてるし。これは当たり前?5.0から?
TEXT_PLAIN_HOSTとかいろいろ試したけど、こっちはエラーが出た。
あと、印刷が終わっても、紙が排出されないんだけど、最後に何かする必要あります?
今は、DocPrintJob#print(○,○); で終わってます。
なんか印刷大変そうだなぁ。。。
86 :
デフォルトの名無しさん :2006/11/06(月) 23:20:31
質問です。 JLabel→JLabelのようにJLabelからJLabelへ矢印を表示するには どうすればよいのでしょうか?
>>86 質問の意味がわかりませんが。。。
とりあえず「→」を書きたいなら、
真ん中に「→」を書いたJLabelを置いてみれば?矢印の画像でもいいけど。
もし矢印が長かったり、角度が中途半端なのであれば、drawLineで自分で書く。
89 :
86 :2006/11/06(月) 23:44:14
>>87 さん
配置してあるJLabelどうしを矢印で結んだ図を表示させたかったのですが
そういった場合は自分で書くしかないんでしょうか?
JLabelの位置を計算して、矢印を表示することはできないんでしょうか?
よろしくおねがいします。
>>83 印刷APIはサービスが追加されたけど、今までのも動くよ
ただし、日本語問題が解決されたのは今年の春くらいのバージョンから
1.5年ほど日本語バグは放置されていた
そしてそのバグが直ったと思ったらSwingにバグがついたというわけだ
正確にはWindows版のLAFだけだからすべてではないがWindowsって一番ユーザー多いから影響もでかい、と
NetBeans立ち上げればおかしいのはすぐにわかるはずなのにそれに気がつかなかったSunちね
>>89 なんだかんだとコンポーネントが追加されてるJPanel上の特定のJLabel間に線引きたいって事?
それならJLabelをaddするときに線を引きたいJLabelだけのコレクションを別に持っておいて自分で矢印を描画しないとだめだね。
常に次ぎが右横とか規則があるならJLabel継承した横に矢印付け足す描画をするJLabelWithArrowとかでもいいのだろうけど。
>>89 噂では、JLabelなんか使わないで、全部自分で描いた方がラクだって話もあるよ。
SWT だとなんかそういう軽量コンポーネントがある。
>>94 JGraphなんてものがあるのか。知らなかった。
LGPLの他に商用ライセンスがあえてあるってことは、商用で使う場合はお金かかる?
無知なので質問ですが、SwingとSWTって混ぜて使ったりするの?
水と油だと思っているのですが。。。
>>95 JGraphは商用利用も含めてフリー。LGPLだし。
一方JGraph Layout Pro というのがあって、JGraphの高機能版。こっちは有料。
JGraphだとノードの自動レイアウトが出来なかったりと、いろいろ不便。
他にもこういうのもあるけどね。
ttp://openjgraph.sourceforge.net/ こっちならレイアウトできたり、グラフに制約(巡回不可とか)かけられたりできる。
ただ、開発が4年以上止まっているけど。
自前で描画しとけ
98 :
86 :2006/11/07(火) 15:37:54
99 :
96 :2006/11/07(火) 16:09:10
JGraph使うのなら、標準の機能ではレイアウトできないことを覚悟しておかないと 後でハマるよ。 ここでいうレイアウト機能ってのは、適当にノード並べてエッジ引いた後で、 ボタン1クリックでノードやエッジの位置を設定し直してくれる機能。 俺の場合、SWTのdraw2dで提供されてるレイアウト機能だけ使って 強引に何とかしたけど。
101 :
96 :2006/11/07(火) 17:12:49
>>100 いつの間にか、JUNGが使えるライブラリになってるね。
2年前にこの手のライブラリについて調べてたんだけど、
当時のJUNGはグラフの編集機能がなくて、使うのをあきらめた覚えがある。
>>101 4年前に全部自前でやった事がある。
あの頃と比べたらオープンソースなライブラリがよりどり緑でありがたい。
103 :
86 :2006/11/07(火) 18:31:17
>>98 別にSwingでもNetbeansには普通にそういうモデリング描画用
ライブラリはあるわけだが。Graph Libraryというのがね。
Graph Libraryは、NetBeansのほかのライブラリに依存してるから、NetBeansの外で使うのはきついよ。 NetBeansプラットフォームで作っちゃえばいいんだけど。
Javaがどんなに疎結合を頑張っても、IDEがそれを否定するのな
疎結合っていうのは、業務アプリの各画面を独立させましょうという程度でしかないからな。 GUIのひとつの画面は、どうしても密結合になる。
jarファイルを実行したとき、そのjarファイルが置かれているディレクトリの パスを取得するにはどうしたらよいでしょうか?
>>108 クラスパスルートがたくさんある場合はどう解釈するの?
>>108 実行時のディレクトリを知りたいのかな?
String path;
path = new File(".").getAbsolutePath();
とか。
>>110 それなら、System.getProperty("user.dir")の方がよくね?
設定ファイルをjarと同じディレクトリに置きたいんだよ。 フォルダごと移動させれば他のPCに環境をそのまま移せるように。 設定ファイル以外にもいろいろ置きたいからjarのパスが知りたい。
113 :
108 :2006/11/10(金) 23:31:12
皆様ありがとうございました。 jarファイルを実行したときに、jarファイルと同じディレクトリにあるファイルで 拡張子が.zzzのもので、最終更新日が最新のものを自動的に読み込むという処理が 必要で、上記のような質問をさせて頂きました。 解決致しましたので、ご報告致します。 File f = new File(".") ; String[ ] files = f.list( ) ; これで実行ディレクトリのファイル一覧を配列に取得することができました。 ありがとうございました。
そのやり方は本当は危険なんだけどね。
OS(というかVM)に依存するんだよね。
GUIアプリならコマンドラインで打つようなことも無いのかな? 俺なら保険的に<md5>.md5みたいなファイル用意して 確実に実行元がカレントディレクトリである必要があるようにするかも
>>108 亀レスだけど、System.getProperty("java.class.path")
sunのVM限定だと思う。
他の方法としてはJARファイル内にリソースを格納して、
this.getClass().getClassLoader()#getResourceでURLを取得するとか。
>>117 java.lang.System#getProperties()のjavadocに明記されてるし、
J2SE5.0の仕様の上ではVMによらず使用可能とみていいんじゃないかな。
resources などというディレクトリを作ってそこにクラスパスを通し、 そこに設定ファイルを置いてファイルを取得
resources などというディレクトリはどこに作られるのかと。 jarと同じディレクトリに作りたいでしょ? でも、いちいちクラスパス通したくない。ではjarのパスはどこ? というお話し。
jar ファイルを実行、とあることから、 関連するライブラリなどへのクラスパスは jar ファイルのマニュフェストに記述されると勝手に推測。 そこに resources への相対パスも追加すればいいんじゃまいかと思ったが そもそも読み込むファイル名は決まっていないのね。
俺がこれまで使ったJavaにおける設定ファイルの設計はこんなもんかな。 1.CLASSPATHから読み込む方法。 一番安易だが、配置に柔軟性が乏しい。 2.環境変数XXXX_HOMEを設定させる方法 起動スクリプトや実行ファイル内で設定取得されることが多い。 Java 5から環境変数の取得が復活しているので、Java内で取得可能になった。 CLASSPATHによらず、自由に構成管理できる。(XXX/conf/配下等) 広く使われており、JAVA_HOME. ANT_HOMEなど実例多数。 3.ユーザのホームディレクトリからの相対パスを利用する方法 複数のユーザで使うソフトウェアに適する。 Windowsの場合、ApplicationData/XXX配下、Unixの場合.xxx/配下などが使われる。プログラマが構成をデザインしないといけない。 4.Preferences APIを使う方法 Java 5から提供される標準API。 実体は、Winはレジストリ、Unixは.java配下に作られるが、API利用者は意識する必要がない。
123 :
122 :2006/11/11(土) 18:42:23
追加 5.カレントディレクトリと1.の併用 log4jなどいくつかのソフトウェアで採用されている。 ツール系は、テンポラリに設定を変えたい時があるので、 この方法は便利。 結局、作成するアプリの性質によってどうデザインするか変わってくるよ。
Swingとまったく関係がないことについて
まったくってことはないな。直接は関係ないが、。 誰だよ、スレ違いの質問投げた奴は。
よーし、おねえさん、がんばってSwingしちゃうわよー
もう少し書こうかと思ったけどスレ違いじゃ仕方ないな。
129 :
デフォルトの名無しさん :2006/11/12(日) 13:58:33
あきらかに異常だね
>>130 やっぱりそうなのか。
thx
PCが悪いのかな?
ソース
133 :
デフォルトの名無しさん :2006/11/12(日) 14:38:42
javaってvistaでも使える?
>>132 import javax.swing.*;
import java.io.*;
import java.awt.Container;
import java.awt.*;
class TinyMemo {
JFrame frame;Container com;
TinyMemo(){
framereset();com = frame.getContentPane();
Paneles paneles = new Paneles();com.add(paneles.getBar(),BorderLayout.NORTH);
JTextArea text = new JTextArea();com.add(text,BorderLayout.CENTER);frame.setVisible(true);
}
private void framereset(){
frame = new JFrame("メモ帳");frame.setSize(300,400);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args){TinyMemo tiny = new TinyMemo();}
}
class Paneles extends JPanel {
JMenu menu;JMenuBar menubar;
JMenuItem save;JMenuItem read;JMenuItem delete;
Paneles(){
menu = new JMenu("nya");menubar = new JMenuBar();
delete = new JMenuItem("delete");save = new JMenuItem("save");read = new JMenuItem("read");menubar.add(menu);
menu.add(delete);menu.add(save);menu.add(read);
}
JMenuBar getBar(){return menubar;}
}
こんなもんソースいらんだろ思ってさらさんかったんだが
色々変わってたりついてるけ症状はそんままだからこれで
改行が多すぎる言われまくったからかえたらすげーよみにくい。
>>134 まだ初心者か?
Swingにはメニューバー用の専用メソッドがあるよ
他にもクラス設計など指摘したいところがたくさんあるがまあいいか
>>134 最低限、改行して見やすいコードをさらせ。
>>135 ,137
わ、サンクス!
わざわざありがとうございます。
>>136 改行多すぎる言われて修正しまくってこんなんなってしまったんです。orz
最初は普通だったのに。
>>138 2レスに分割するか、
レス消費に気を配っているorかなり長いソースの場合はアップローダを利用。
140 :
デフォルトの名無しさん :2006/11/15(水) 00:13:45
BOCのSpreadみたいなコンポーネントはないのですか? JTableの縦横にヘッダがあってExcelみたいな感じのやつ。
JSplitPaneで、初めに片方を閉じておくことってできます? JSplitPane#setDividerLocation(9999)とか無理矢理やればできるのですが、 一応できるのですが、キレイな方法で。 JSplitPane#getMaximumDividerLocation()で値を取得して、 それを設定する方法も試しましたが、 フレームが起動するまでは正しい値が取得できないんですかね。ダメでした。
>>141 JSplitPane#setDividerLocation(Integer.MAX_VALUE) とかやっとけば
>>141 pack()読んだ時点で確定されない?
144 :
141 :2006/11/15(水) 15:48:34
>>142 9999よりかはキレイですね。こっちにしておきます。どうもです。
>>143 pack()は使ってないので、フレームを表示するので確定しないようです。
SwingつかうならPackは必須だと思うのだが
pack()だけじゃサイズが確定できないレイアウトもあったような。 setPrefferedSize()とかJFrame#setSize()とかしないと、親コンポーネントが最小サイズになったり。
それレイアウトマネージャ勉強しろとしかいえない
マウスカーソルの絶対座標を簡単に取得する方法ってある?
>>148 java.awt.Point p = java.awt.MouseInfo.getPointerInfo().getLocation() ;
とか?1.5以降で.
さんきゅ! 助かったー!
151 :
148 :2006/11/15(水) 20:00:35
質問です。 Java2DとSwingに関連する内容なのですが、 JPanalを継承したクラスを、JTabbedPaneにaddして、そのクラスのpaintメソッドで Java2Dの描画を行っています。 そこで、 public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g; AffineTransform af = new AffineTransform(); g2.setTransform(af); 以下描画... } とすると、ウィンドウサイズを変更したり、再描画させたりした時に描画するものの位置がずれます。 具体的にいうと、jTabbedPaneのタブの大きさだけ描画した物が上に移動します。 原因を調べてみると、どうもAffineTransformオブジェクトをGraphics2Dに登録すると、 座標計算の基準点がタブに登録したJPanel派生クラスの領域の左上ではなく、 jTabbedPaneの領域(タブ表示域も含んだ)の左上に、再描画の時に変更になってしまうようなのです。 これはJavaランタイムのバグなのでしょうか。ちなみにJavaのバージョンは1.5.0_08です。
よくわからんが paint()じゃなくて paintComponent()をオーバーライドしなされ あと1.5.0_08はSwingにバグがあるので1.5.0_09にしたほうがいい
>>152 問題が再現するコンパイル可能なソースを出した方がはやいと思うよ.
>>154 public class foo extends JApplet {
private JPanel jContentPane = null;
private JTabbedPane jTabbedPane = null;
private JPanel jPanel2 = null;
public foo() { super(); }
public void init() {
this.setContentPane(getJContentPane());
}
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getJTabbedPane(), BorderLayout.CENTER);
}
return jContentPane;
}
private JTabbedPane getJTabbedPane() {
if (jTabbedPane == null) {
jTabbedPane = new JTabbedPane();
jTabbedPane.addTab("パネル2", null, getJPanel2(), null);
}
return jTabbedPane;
}
private JPanel getJPanel2() {
if (jPanel2 == null) {
jPanel2 = new Canvas();
jPanel2.setLayout(new GridBagLayout());
}
return jPanel2;
}
}
class Canvas extends JPanel { public Canvas self = this; public Canvas() { this.addMouseListener(new MouseAdapter(){public void mouseClicked(MouseEvent arg0) { self.repaint(); }}); } public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D)g; g2.clearRect(0, 0, this.getSize().width, this.getSize().height); //画面を一度クリア AffineTransform af = new AffineTransform(); af.setToTranslation(100, 0); g2.setTransform(af); g2.draw(new Line2D.Float(10,50,20,50)); //x軸 } } こんなソースになります。マウスクリックすると短い横線の位置がタブの高さ分下に下がります。 ウィンドウサイズを変更すると元に戻り、またクリックすると位置が下がります。
>public Canvas self = this; すまん,うけたw
>>155 //g2.setTransform(af);
g2.transform(af);
理由はAPI説明のGraphics2D#setTransformの項をよく読むこと。
ちなみに、内部クラスから外側のクラスのインスタンスを参照したいときは、
Canvas.this.repaint();
のように「外側のクラス名.this」と書けば、selfのように自分で持っていなくてもいい。
ただし、外側のクラスが匿名クラスの場合は名前がないため、この書き方はできないので、
別の手段が必要だが。その中にはself=thisのような方法もとりうる方法のひとつではある。
159 :
157 :2006/11/20(月) 21:41:14
笑っただけだと悪いので… Canvas#paintComponent() を以下のように すれば何が期待通りになって,かつ何が起きてるのかわかると思われ. # 初回描画時とrepaintでの描画時の出力を比べてください. public void paintComponent (Graphics g){ Graphics2D g2 = (Graphics2D) g; AffineTransform originalTransform = g2.getTransform(); System.out.println("translate (x, y) = ( " + originalTransform.getTranslateX() + ", " + originalTransform.getTranslateY() + ")"); g2.clearRect (0, 0, this.getSize().width, this.getSize().height); originalTransform.translate(100, 0); g2.draw (new Line2D.Float (10, 50, 20, 50)); }
ありがとうございます! 次のようにしたら解決できました。 Graphics2D g2 = (Graphics2D)g; g2.clearRect(0, 0, this.getSize().width, this.getSize().height); //画面を一度クリア AffineTransform af = g2.getTransform();//new AffineTransform(); System.out.println("translate (x, y) = ( " + af.getTranslateX() + ", " + af.getTranslateY() + ")"); af.translate(100, 0); System.out.println("translate (x, y) = ( " + af.getTranslateX() + ", " + af.getTranslateY() + ")"); g2.setTransform(af); g2.draw(new Line2D.Float(10,50,20,50)); //x軸 タブにした状態などの色々な状況によって、Graphics2Dの変換行列が自動的に辻褄をあわせてくれていたんですね。 だからg2.getTransform();としてAffineTransformオブジェクトを取得してそれを使うべきで、 さらにそれ以後の座標変換も相対的な変換にすべきだったんですね。 よく分かりました。ありがとうございます。
それにしても、マウスクリックした時と初回描画時やウィンドウサイズを変えたりした時で描画領域の 原点の位置が変わってしまうなんて、Swingって妙な仕様ですね・・・。
>>161 なぜにそんなにsetTransformを使いたがるんだろうか。
setTransformはgetTransformで保存した元のコンテクストを、
描画終了時にリストアするときにだけ使うべきものとある。
描画時の座標変換にはtransform, rotate, scale, shearを使うだけでいい。
仕様が変というより、使い方が変だと思う。
変な使い方ができうるという点で仕様が悪いのかもしれないけど。
>>160 Graphics2D g2 = (Graphics2D)g;
g2.clearRect(0, 0, this.getSize().width, this.getSize().height); //画面を一度クリア
AffineTransform backup = g2.getTransform(); // backup
g2.translate(100, 0);
g2.draw(new Line2D.Float(10,50,20,50)); //x軸を描画
g2.setTransform(backup); // restore
>>162 そうですね。setTransformは今後控えます。
でもそれと関係なしに、マウスクリックした時と初回描画時orウィンドウサイズ変更時で描画領域の
原点位置が変わっていて、それをSwing(AWT?)がg2の変換行列を自動的に変えて無理やりつじつまを合わせている
というSwing(AWT?)の仕様がちょっと気になってしまいました。
高速GUIのスレがいつの間にかなくなっているな
HTMLの<table>のように理解しやすいレイアウトはないの? GridBagLayoutでいいじゃんってのは止めてね。 コンポーネント間隔の割合比率(パーセント)を<table>のように 自動計算でやってくれたりすると楽なんだけど…
SWTも結局大して早くなかったし、最良のSWTがEclipse自身だもんな。
×SWTが ○SWTアプリが
>>166 割合ではないけどレイアウトマネージャほとんど理解しなくても使えるグループレイアウトは?
日本語でおk
>>166 XmlGridLayoutでも使ってみれば?
>>165 需要大してなかったみたいだし、仕方ないね・・・
それにSWTの質問がしたい人はプラグ印スレに行けばいいし、なくても問題ないだろ。
(つーかSWTやる人のほとんどはプラグ印用途な気もするが。)
Eclipseのプラグイン以外でSWT使うのはアホだな。 Eclipse RCPとか使ったりね。もうバカかと。
>>173 Eclipse RCPはそんなに悪く無いと思うがな
最近、RadRailsとかAptanaとか実際にそれなりに動くRCPアプリが結構出て来てるし
まあ、Eclipse RCPは実質Eclipseプラグインとほとんど変わらんのだが。
画面デザインがベタベタなWindows以外許さない、 な案件だと仕方なくSWTで作ることになる・・・ と思いきや、Swingでプロトタイプ作って見せると やっぱこれで良いですになる今日この頃。
あるあるwwww
JFrame上のJMenu、JMenuItem、等のフォントをまとめて(同じものに)設定するにはどうしたらいいでしょうか?
FontUIResource font = new FontUIResource(new Font(...)); UIManager.put("Menu.font", font); UIManager.put("MenuItem.font", font);
181 :
デフォルトの名無しさん :2006/12/04(月) 00:49:10
paintComponentとかpaintとかで、 いくつも矩形を描いて中に文字をいれたいんだけど、文字の長さや幅に応じて 自動的に矩形のサイズを調節したり、矩形の表示位置がウィンドウをはみだしたり 他の矩形と重なったりしないように表示位置を自動で調節してくれるようにしたい。 こういうのって相当むずかしいですか?
推奨サイズとかってわかる?
183 :
181 :2006/12/04(月) 18:17:08
単語をいくつかならべてそれを矩形でかこみたいんですよ。 矩形の大きさは単語が矩形からはみださないように自動的に適切な大きさ計算して 描かれるようにしたい。 そういう単語が入っている矩形がこれまた何個も出したい。 矩形同士もお互い重ならないように自分で適切な位置を計算してそこに表示されてほしい。 そういうのって簡単にはできないのかな?
JLabelにボーダーつければ?
185 :
181 :2006/12/04(月) 20:09:25
全部自分で描きたいんですよ。
TextLayoutとかLineBreakMeasurerとかで調べるとよろし。 結構めんどいよ。.NETは楽なんだけど。
そこまでして自分でやりたい意図が不明だ。非標準のライブラリを排除したいわけでもないし。
やりたいことが良く分からないけど、 SwingUtilities#computeStringWidth()とか、layoutCompoundLabel()とか使って 自分で描画するかな
>>181 >>185 自動でやってくれと言ったり、全部自分で描きたいとか
訳が分かりません。
俺なら、Border設定したJPanelの中にJLabelを埋めていくかな?
デモのアプレットの中にそういうのあったね。
>>181
文字を四角で囲みたいだけなら、Font#getStringBoundsで領域取得して計算すりゃいいんじゃないだろうか・・・
192 :
181 :2006/12/05(火) 19:37:37
>>191 表示する場所を計算すればいいってのは分かるんだけど、
複数の矩形を表示するってことを考えると、計算が複雑になりそうで
できそうもないです。
ちなみに185は私ではありません。
ひょっとしたら、
>>94 や
>>100 で挙がってるような
グラフ描画用ライブラリを使った方が簡単かもしれない。
ノードのみ並べて、ノードのサイズをライブラリ任せにすれば(その辺はライブラリ依存だが)
だいたいいけそうな気がする。
194 :
デフォルトの名無しさん :2006/12/05(火) 23:19:14
ちょいちょい だがあぷろーだに拒否された
196 :
デフォルトの名無しさん :2006/12/06(水) 10:37:34
JGraphいれようとしてるんだが Ant必要なの?これ。 インストールできませんdふぁd;sfじゃs
んなばかな
つかantの動かない開発環境ってどうよ
199 :
デフォルトの名無しさん :2006/12/06(水) 20:45:26
JGraphでほんとうにできるのかよ
200 :
デフォルトの名無しさん :2006/12/06(水) 20:48:44
ほんとうに出来るかどうか、は、何をやろうとしているかに拠る。
201 :
デフォルトの名無しさん :2006/12/06(水) 20:52:53
たくさんのキーワードをいくつかの分類して 分類ごとに矩形を描いて キーワードを矩形の中にならべていきたいわけ。 矩形の大きさはキーワードの長さと種類にあわせて決めたいし、 矩形の表示位置はほかの矩形とかさならないように決めたいのよ。
202 :
デフォルトの名無しさん :2006/12/06(水) 21:36:49
できないでファイナルアンサー?
コンポーネントのサイズなんていくらでも自由にかえれるだろ
>>202 オマエには出来ないでファイナルアンサー
ってか、既に答を書いてる人がいっぱいいるじゃん。
205 :
デフォルトの名無しさん :2006/12/06(水) 22:48:16
口だけでは納得いかん 動くコードなら納得がいく
206 :
デフォルトの名無しさん :2006/12/06(水) 23:02:57
コードくれ厨がJavaにまで…
>>201 なにがいいたいのか、俺にはさっぱりわからん。
図かなんか描いてどっかに貼ってみせてみろ。
208 :
デフォルトの名無しさん :2006/12/07(木) 00:24:40
_________________________________ | keyword 11111111111 | | keyword 222222222222222222222 | _______ | aaaa | | | _________________ | うお | ________ | ぎゃああ | | | _______ |あああああああ | | | __________
209 :
デフォルトの名無しさん :2006/12/07(木) 00:27:06
こんな風にできんのか ______________ | keyword 11111111111 | | keyword 222222222222222222222| _______ | aaaa | | | _________________ | うお | ________ | ぎゃああ | | | _______ |あああああああ | | | __________
210 :
デフォルトの名無しさん :2006/12/07(木) 00:35:22
ネトゲの吹き出しみたいなもんか?
Graphicsに描画するんだろ? どうでもできるだろ。
212 :
207 :2006/12/07(木) 00:52:55
>>208 GlyphVector 作って、getOutline() で Shape とかとってくれば
簡単な気がする。
ここまで答えが書かれてるのにできないってのは無いな。 やってないだけ。
結局アルゴリズムの問題だよな。 やることはJavaだろうがWin32だろうがGTKだろうが変わらない。
215 :
181 :2006/12/07(木) 12:28:54
文字をいれる枠の大きさぐらいはなんとかなるかもしれんが、 文字が入ってる枠をほかの枠とかさならない位置を計算して 表示するアルゴリズムがわからんじゃないか
なに、Swingと関係ないことで苦労してるの? アルゴリズムの初心者スレいったほうがいいよ。
複数個のJPanelが存在し, ボタンを押された祭にそれらのJPanelを切り替える事は可能でしょうか? public class SwingTest extends JFrame implements ActionListener{ JLabel label = new JLabel("change"); JButton btn = new JButton("push"); JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); public static void main(String[] args){ SwingTest test = new SwingTest("SwingTest"); test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); test.setVisible(true); } SwingTest(String title){ setTitle(title); setBounds(10, 10, 300, 200); p1.add(btn); p2.add(label); btn.addActionListener(this); getContentPane().add(p1); } public void actionPerformed(ActionEvent e){ getContentPane().remove(p1); getContentPane().add(p2); } } こんな感じで今やっているのですが,ボタンを押しても反応しなくて困っています. どなたかご教授お願いします.
一応そのやり方でもできるけど、ちゃんとイベント把握してないとやめたほうがいい たぶんやりたいことはJPanelを切り替えることではなく、レイアウトマネージャにあるやつで足りると思うが
>>217 解答。ボタンを押すとボタンが消えて、ラベルが現れるなんて、変なGUIだな。
元の状態にに戻れないじゃん。あくまでもテストだよね。
本ちゃんでこんな変なGUI使ったら笑われるよ。
public void actionPerformed(ActionEvent e){
getContentPane().remove(p1);
getContentPane().add(p2);
validate();//←ここ、ここ
}
220 :
217 :2006/12/07(木) 16:06:49
返信ありがとうございます. validate() を加える事で表示は代わるようになったのですが,また新たな問題が・・・. 今3つのパネルを用意してそれら3つを行き来できるようにしているのですが, この方法を用いた場合何故か3つのパネルを1回ずつ表示させることはできるのですが, 2回目以降即ち違うパネルから再度戻ってきた場合に表示が反映されません. 何度も質問してしまい,お手数だと思いますが,どなたかよろしくお願いします.
コードも見ないでどうやって解答しろと?
222 :
217 :2006/12/07(木) 16:22:57
すいません. コードを張ろうとしたら大きくなりすぎて,張る事ができなかったので・・・. 表示を切り替えている部分はこんな感じです.public void actionPerformed(ActionEvent e){ String cmd = e.getActionCommand(); if (cmd.equals("1to2")){ getContentPane().remove(パネル1); getContentPane().add(パネル2); } else if (cmd.equals("1to3")){ getContentPane().remove(パネル1); getContentPane().add(パネル3); } else if (cmd.equals("2to1")){ getContentPane().remove(パネル2); getContentPane().add(パネル1); } else if (cmd.equals("2to3")){ getContentPane().remove(パネル2); getContentPane().add(パネル3); } else if (cmd.equals("3to1")){ getContentPane().remove(パネル3); getContentPane().add(パネル1); } else if (cmd.equals("3to2")){ getContentPane().remove(パネル3); getContentPane().add(パネル2); } validate(); }
223 :
217 :2006/12/07(木) 16:29:56
何度も申し訳ありません. 先ほどパネルはが変わらないと言いましたが,一部分は変わっていました. 3つのパネルに共通する部分は変更されているのですが, それ以外の部分が変更されていませんでした. ただ変更されると言ってもマウスをボタンコンテナ上に乗せると変わるのですが, そうしなければ変わりませんでした. 非常に説明が下手で申し訳ありませんが,よろしくお願いします.
>>218 が一番まともな回答だと思うけどそれは調べたの?
225 :
217 :2006/12/07(木) 16:49:42
>>224 一応
>>218 の方法で
画面の切り替えが発生したら
パネル上にあるコンテナをremoveAllで削除.
新たに別のパネルを作成し,コンテナを設置.
そのパネルを今表示しているパネルに代入.
という感じでやったのですが,画面が切り替わらず,断念しました.
そりゃそうだが、java.awt.CardLayoutというキーワードが出てこないと そう簡単には調べられない。 AWTのレイアウト概説的文章とにらめっこする必要が出てくる。
AWTやSwingはまずレイアウトマネージャありきだろ どんな初心者本だってすぐにでてくる
228 :
217 :2006/12/07(木) 16:55:36
いまさらになってしまうのですが 自分がsetLayout(null)でレイアウトマネージャーを無効にしているのがダメな気がしてきた・・・. やはり何かしらレイアウトマネージャーは使うべきなんですかね・・・.
レイアウトマネージャ使えばコンポーネントサイズが変わってもそれにあわせて動いてくれるからな とりあえずnullを使う利点はない 絶対的な座標のように扱うにしてもグループレイアウトやアブソリュートレイアウトのほうがまし 今のコードそのまま使うにしてもそのさしかえたいJPanelにレイアウト指定して そこにカードレイアウトではりつければいいだけ レイアウトマネージャ理解していないのならIDEでいじってみてどういう感じなのか理解したほうがいい カードレイアウトってのはタブ部分のないタブコントロールみたいなもん
230 :
217 :2006/12/07(木) 17:07:34
返信ありがとうございます. カードレイアウトが自分のやりたい事とマッチしているようなのでまずはこれを勉強してみます. みなさま本当にありがとうございました.
カードレイアウトって、そんなもんも有ったなあ。 しかし、222のコード見たところ、ボタンがいくつか有って、押すと対応するパネルが 表示されるようにしたいんでしょ。普通はJTabbedPane使って解決じゃないの?
今のUIそのまま使いたいならCardLayoutだけど、それは普通Tabでやる。
まあ、人様に御見せするアプリじゃないんでしょ。いいんじゃないの。
234 :
181 :2006/12/07(木) 22:28:24
JGraphいちおううまくサンプル動かせたんだが、 なぜかJ2SDKのフォルダの中でソースをコンパイルして実行しないと 他の場所ではコンパイルも実行もできなんだけど、なぜだろう。 コンパイル後の.classファイルなら他の場所でも実行できるのかと思って 別の場所に移動させて動かしてみたらやっぱり動かないし。 普通、J2SDKフォルダの中でコンパイルしたり実行したりってしないんだし これだったら使い物にならないんだけど・・・
235 :
デフォルトの名無しさん :2006/12/08(金) 00:16:52
jgraph.jarをソースと同じフォルダにいれればコンパイルできますた。 でも常にjgraph.jarを一緒にいれておかなければならないんでしょうか。
なんか根本的なところ勉強したほうがよくないか? それにSwingとまったく関係ない点について
>>181 Javaの仕様を勉強してこい。
理解できるまで帰ってこんでよい。
jgraphスレ行け
239 :
デフォルトの名無しさん :2006/12/08(金) 00:49:38
jgraphスレってなんだよ。そんなものねえじゃん
無けりゃ最初に質問すべきスレがあるだろ 少なくともここじゃねえ
JTableで、カーソルキーによるセルの移動を監視したいのですが、どうしたらよいですか? keyPressed で JTable#getSelectedRow() で行を取得すると、 移動前の行が取れてしまうのが悩みの種です。 押したキーによって、+1、-1すればできますが、 もう少し良い方法があれば教えてください。お願いします。
242 :
241 :2006/12/09(土) 19:59:48
モデルの isCellEditable をオーバーライドして移動先が取得できるか試しましたが、 セルを行で選択するモードだと isCellEditable が呼ばれないんですね。どうしたものか。
>>241 SelectionModel を使う。
>>241 TableColumnModelListener,ListSelectionListener
の2つで横と縦の選択がとらえられる。
245 :
241 :2006/12/09(土) 22:31:36
>>243 >>244 ありがとうございました。早速試したところ、なんとか取れました。
あと、JTable#valueChanged(ListSelectionEvent) をオーバーライドしても取れました。
奥が深いですね。
ぽとぺたやってると手軽にオーバーライドできなくて面倒なんだよね ペイントイベントもイベントとしての実装じゃないから手軽とはいかないし SwingはJavaBeansをベースに作ってるといいながらどうもそういう実装になってないんだよね getとsetが対になってないからプロパティとして表示されないとかも多いし
Java SE 6 入れてみたけど Swing また速くなった?
Swing部分はまだ確認してないが、演算速度は確実に速いっぽ コンパイルしなおしてなくても物によっては1.4倍くらいでてる
JButton上で、HTML要素を使って改行し、多段落表示させているのですが、 この中の文字列に含まれる一部の「<」や「>」や「/」などが表示されません。 これらの文字をHTML要素として解釈させないため無効化するにはどうしたらいいのでしょうか? Webブラウザ上でHTMLソースを表示させるときのように 「<」や「/」を実体参照に書き換えても表示できないようです。
250 :
249 :2006/12/14(木) 12:37:25
文字実体参照ではなく数値文字参照でやってみたらなぜかうまくいきました。
あら、2chでえすけーぷされた &gt; で普通に表示されてるよと
>>252 レスありがとうございます。
< と >はうまくいったのですが、
<html> のあとに、「/」が入る部分があると表示されたり表示されなかったりで試行錯誤中です。
>>253 bodyタグがはいっていないとかいうオチは?
drawLineメソッドでCanvasに線をかくことが出来ますが、 その線を座標の配列として得るにはどうしたらいいでしょうか?
>>256 もっと簡単にできないものでしょうか
例えば(0,0),(0,5)をdrawLineで指定したとしたら
2点とその間にある(0,1),(0,2),(0,3),(0,4)が塗りつぶされます。
この4点の塗りつぶしをJavaはどのように実装しているのでしょうか?
この例のように予め2点を結ぶと水平,もしくは垂直になると分かっていればいいですが
(0,0),(2,5)のように水平及び垂直にならない場合,
drawLineはどのように計算して塗りつぶす点を決めているのでしょう?
>>257 言っている意味がわからないし(何に対して水平、垂直?水平な点なんてありえないし)
255との繋がりも無いように読めるんだけど、結局何がしたいの?
つか256もけして難しくはないと思うんだけど。
実装について知りたければソース読め。
>>258 ちょっと感動した。ソース読めってセリフが出てくるあたり。
まあ、ネイティブに飛ばしてない限りそこ読めば分かるよな。
どうでも良いことだけどCanvasはSwingじゃなくてAWTじゃなかったっけ。
1.2 以降だと、たかが drawLine でも Graphics2D の関係で Stroke の計算とか 結構面倒臭い事しなきゃいかんような気もする。 1.1 までだったら Stroke とか無かったし、 アンチエイリアス云々って時代でもなかったから ブレゼンハムアルゴリズムだけで出来たかもしらんけど。
257はソース読んでからの書き込みです。
drawLineの実装ってどんなんだろ,と思ってソース見たのですが
Graphic見てもabstractで
Graphic2Dでオーバーライドしてるのかなと思ってもありませんでした。
どうやらdraw(Shape)っぽい漢字なのですが
Stroke云々ってあってめんどくさそうなのです。
>>258 水平,垂直ってのは結んだ線の話です。
(0,0)と(0,5)を結ぶと垂直な線になります。
ある2点を結んだときにできる線が通ることになる座標を
得るにはどうしたらいいか?ってことで伝わるでしょうか
えっと、もっと簡単に言うと 直線が2本あって、 その2本の線の交点の座標って求められるの? ってことかい? もしそれなら数学学べ
>>263 全然話が違います
「ある2点を結んだとき」ですから出てくる点は2つです
それだと4点になります
drawLine(0, 0, 0, 5)を呼び出すと
(0,0),(0,1),(0,2),(0,3),(0,4),(0,5)が塗りつぶされます。
(0,1),(0,2),(0,3),(0,4)が塗りつぶされるのは
(0,0)と(0,5)を結んだ直線が通る座標だからです。
(0,0)と(0,5)を結ぶと垂直な線ができるので
(0,1),(0,2),(0,3),(0,4)が塗りつぶされるということは
簡単に求められます。
drawLine(0, 0, 100, 101)を呼び出したときに
塗りつぶされる座標はどこになるのでしょうか?
もっと簡単じゃないか。。。 drawLine(0, 0, 5, 5)だと (0,0),(1,1),(2,2),(3,3),(4,4),(5,5) が塗りつぶされるけどどうやって計算するの? ってことか? やっぱ数学学べ
計算する以外での求め方は 線を書く前のキャンバスの画像と 線を書いた後のキャンバスの画像を比較すれば良い 前と後の同一座標のドットを比較して 違っていれば描画されていると判断すれば良いんじゃないか
>>264 ソースを理解できないのなら手助けもするが、読むのが面倒なだけなら帰れ。
そしてスレ違い。
268 :
デフォルトの名無しさん :2006/12/15(金) 14:29:11
JDoalogを継承したDialogで最大化、最小化ボタンを表示させることは 可能でしょうか? JFrameを継承すれば表示されますが、 Windowsのタスクバーにアプリケーションが2個上がってきてるように 見えるのでJDialogにしたいです。
270 :
デフォルトの名無しさん :2006/12/17(日) 10:51:19
見えないボタンの右半分がクリックできるプログラム。 import javax.swing.*; import java.awt.event.*; class A020 { public static void main(String[] args) { JFrame f = new JFrame(); f.setSize(640, 480); JPanel p1 = new JPanel(); p1.setBounds(0, 0, 100, 100); JButton b = new JButton("クリック"); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "ボタンがクリックされました。"); } }); p1.add(b); JPanel p2 = new JPanel(); p2.setBounds(50, 0, 100, 100); JLayeredPane l = new JLayeredPane(); l.add(p1, Integer.valueOf(10)); l.add(p2, Integer.valueOf(20)); f.add(l); f.setVisible(true); } }
×見えないボタンの右半分 ○見えない「ボタンの右半分」
272 :
デフォルトの名無しさん :2006/12/17(日) 20:29:21
g.drawString("Test", 0, 0); g.drawLine(0, 0, 10, 10); とすると、線は(0,0)-(10,10)で描かれますが、文字の方は描かれません。 drawStringとdrawLineでは、座標の考え方が異なるようなのでしょうか?
273 :
272 :2006/12/17(日) 20:43:03
すみません。解決しました。 drawStringは文字の左下が基点になるのですね。 なんのためにそうなっているのかわかりませんが。。。
ベースラインを理解しろよ・・・ それにこれはSwingと関係ないし
275 :
デフォルトの名無しさん :2006/12/17(日) 21:25:06
ベースラインがなぜアセント値の下にあるか説明せよ。
JTextArea で、キャレットの列の位置を取得したいのですが、 シンプルな方法があったら教えて下さい!! 今は以下のようにして取得しています。 _text = new JTextArea(); Element all = _text.getDocument().getDefaultRootElement(); int index = all.getElementIndex(_text.getCaretPosition()); Element line = element.getElement(index); int col = _text.getCaretPosition() - e.getStartOffset();
279 :
272 :2006/12/18(月) 14:35:31
スレ違いでしたか。。。 JComponentの質問は良くて、Componentの質問はダメってことですか?
単に274がキチガイ
>>278 全角とTabの対応が入ってなくない?
Tabは入る位置によって文字列長が変わるから、結構面倒そう。
コンポーネントをadd()あるいはremove()するときは直後に必ずrevalidate()を呼ぶべきでしょうか? 多くの場合、revalidate()を呼ばなくてもうまくいくのですが (ただしremove()の後は必ずrepaint()してます)、 ときどきrevalidate()を呼ばないとダメなときがあります。 revalidate()が必要なときと不要なときの違いは何でしょうか? または、違いは気にせずに常にrevalidate()するべきでしょうか?
呼ぶべき。
286 :
デフォルトの名無しさん :2006/12/20(水) 17:41:07
JavaSE6だとメニューをだしたまま、タイトルバーをクリックするとメニューが消えてくれるね。 かなりいいかんじあげ
>>284 オレもよくわからない。
revalidate()を呼ぶと、repaint() 時のクリップ領域が現状にあったものになる気がする。
詳しくわかったら教えてくれ。
289 :
284 :2006/12/21(木) 21:25:56
自分の経験だけで言えば、JPanelに限ればrevalidate()は無くても大丈夫そうです。 以下、JPanel限定の話。 ◆add()する場合 revalidate() → なくても問題ない。 repaint() → たいていはなくても問題ないが時々ないとダメなことがある。 ◆remove()する場合 revalidate() → なくても問題ない。 repaint() → ないとダメ。 JComponentのドキュメントのrevalidateの項を見ると、 「プログラムが、通常、GUI の内容を更新するために validate を呼び出す必要がない点で AWT とは異なります」 というようなことが書いてあります。 つまりSwingではrevalidateを呼ぶ必要はないということなのかなと解釈したのですが 実際のところはどうなのでしょう? それと、JScrollPaneが絡んでるとrevalidateしないとダメなことがあるようです。
290 :
288 :2006/12/21(木) 22:51:29
>>289 どうもありがと。
JPanel にボタンを2つ貼り付けて、押されたから片方を remove するサンプルを作って試してみた。
revalidate() しないと、ボタンが削除されたのに、レイアウトが変更されないね。
これはたぶん、revalidate()を自動的に呼ぶのが、
レイアウトに影響を受けたコンポーネントが呼ぶからだと思う。
つまり、removeされた本人は revalidate() を自動的に呼ぶが、もうremoveされていて親がいないので、すぐにreturnされる。
なので、親のコンポーネントの方で revalidate() してあげる必要がある。
ちなみにオレがrevalidate() を使う必要があったのは、JTextArea に行番号を表示させる時。
JScrollPane上に表示されていない行が増えた場合に、増えた行の行番号が正しく表示されなかった。
これは上のレスで書いた通り、新しく増えた領域が再描画する領域として認識されていないからだと思う。
まぁ長々と書いたが、オレははっきり理解していないのだが。。。。
292 :
284 :2006/12/22(金) 01:13:22
どうもありがとうございます。 なるほど、周りのレイアウトに影響を及ぼす場合はrevalidate()が必要なのですね。 自分は最近setLayout(null)でずっとやってたから必要な場面がなかったのかもしれません。 JScrollPaneが絡んだときだけ必要になるのも納得です。 しかし、add()するときにrepaint()が必要になることがある理由は何なんでしょうか…?
293 :
デフォルトの名無しさん :2006/12/22(金) 13:16:52
paintイベントで描画してる場合
JListで、リスト項目の高さを任意に指定したいのですが、どうすればよいでしょうか? 現在はDefaultListCellRendererを継承したRendererを使って高さを設定してますが、反映されません。 呼び元を見たところ、Fontサイズが有効になっているっぽいのです。
>>294 そのレンダラのサイズ指定はどうなってるの?
296 :
294 :2006/12/22(金) 22:31:40
>>295 すみません。できました。
レンダラで getPreferredSize() をオーバーライドして、サイズ返したら、そのサイズになりました。
getListCellRendererComponent() の中でサイズを指定しても、有効にならないようですね。
質問の内容が不十分だったこともお詫びします。
297 :
284 :2006/12/23(土) 05:20:19
>>293 ありがとうございます。
paintComponent()ではなくてpaint()してる場合なのですね。
すると自分ではいじってないからどこで使われているのかわかりにくいわけですね。
>>291 そのFAQは知らなかった。とても参考になった、ありがとう。
>>297 Swingはフレームワークとしてpaintよんでる
つまり自前でコンポーネント描画しているすべての場合において必要ということ
300 :
284 :2006/12/23(土) 17:55:43
>>299 ありがとうございます。
すると、add()の後はrepaint()必須ということですか?
repaint()しなくてもちゃんと描画される場合があるのはなぜでしょうか?
301 :
290 :2006/12/23(土) 20:02:19
普通のコンポーネントを追加した場合は、revalidate() すれば repaint() しなくても正常に描画されると思う。されない時ってある?
>>293 は、drawLine とかで、自分で描画している場合は「必要」と言ってる気がする。
paintイベントって言ってるのも、paintComponent()のことだよね?
299も293も俺 Swingはpaintイベントでpaintなんちゃらというのをよんでる そこで子のコンポーネントも順次呼ばれる paintをオーバーライドするとイベントがとまって崩れるのはこのため revalidateがリペイントマネージャに対してダーティマーキングしていれば自動的に再描画される ソース読んでみた?IDEつかってるならすぐソース見れるからJComponentみてみるといいよ
>>302 paint?paintComponent?
オーバーライドするなら基本はpaintComponentでは?
あと、super呼び出せば今までと変わらないと思う。
理由は何にせよ、呼ばないで崩れる時があったら、呼んでみるってのでいいのかな。
間違えて、paintComponentsをオーバーライドしてはまる。
>>303 オーバーライドの話してないだろ
>>304 それはオーバーライドとはいわない
アノテーション使え
>>305 オーバーライドだろ
おまえみたいなヤツが思いっきりはまるんだよ。
paintComponentsというメソッドもある。
だから@Overrideアノテーションつけてもコンパイル通る。
>>306 paintのオーバーライドはするなという話なのだ
paintとpaintComponentは密接な関係であるが、paintComponentのオーバーライドの話はしていない
>>308 まぁそうなんだけど、そもそもの話は、paint()をオーバーライドしていなくても、
repaint()を呼び出す必要があるのはなぜ?ってこと。
paintComponent() で独自の描画処理をしている場合に、
repaint()の呼び出しが必要になる場合があるので、paintイベントって言われてると、
paint() とも paintComponent() とも、どっちとも取れる。「paint()」 なら、間違いようがないけどね。
とりあえず、独自描画なしのコンポーネントをaddしただけで、
repaint()が必要になるケースがよくわからない。どんなケースだろう。
addだけでもrevalidateしないとだめだけどな
311 :
284 :2006/12/25(月) 20:16:27
paintComponent()をオーバーライドして独自描画をしている場合に repaint()が必要ということですね。
Swingのソースのいたるところにrevalidateの直後にrepaintしてるからあるほうが安心かな
JTableのモデルでDefaultTableModelを使っているのですが、 DefaultTableModel#addRow(Object[])と DefaultTableModel#addRow(Vector)で、動作が変わる時があるのですが、なぜでしょうか? 具体的な違いは、 addRow後に DefaultTableModel#setColumnIdentifiers() を呼び出すと、 addRow(Object[]) の方はデータが表示されません。 解決方法としては、 setColumnIdentifiers() を先に呼んで、addRowすれば問題ないのですが、 Java側のソースを見ても、なぜそうなるのかが,お風呂上りくらいさっぱりです。 一応直接の原因としては、 addRow(Object[])とした場合、DefaultTableModel#dataVectorに値が入らないためです。 dataVectorが初期化されていないような気がするので、 dataVector.insertElementAt(rowData, row); の時にヌルポで落ちてもいいくらいなんですけど。
>>313 Object[]でテストしてみたけどカラムの表示ちゃんとかわってるよ
315 :
313 :2006/12/29(金) 10:18:36
>>314 すみません。アク禁でした。
もう一度試したところ、addRow(Object[])とaddRow(Vector)で、動作は同じでした。ん〜、どこかミスっていたようです。
あと、setColumnIdentifiers() を先に呼ばないとデータが入らないのは、仕様みたいですね。
または事前に列のサイズを指定してあげればOKでした。
316 :
デフォルトの名無しさん :2007/01/05(金) 04:13:37
JOptionPane.showMessageDialogueをつかったダイアログで、 ダイアログのボタンをアクションリスナに登録するには どうしたらよいのか教えてい頂けないでしょうか?
フルスクリーン画面上にJPopupMenuを表示して 画面をrepaintするとJPopupMenuが消えてしまいます。 JPopupMenuを消さずに画面を再描画する方法はありますでしょうか。 JPopupMenu.setDefaultLightWeightPopupEnabled(false);にしております。
318 :
317 :2007/01/05(金) 17:24:42
public class PopupMenuTest extends JFrame implements Runnable { private Thread repaintThread = null; public PopupMenuTest() { setSize(800, 600); JPopupMenu.setDefaultLightWeightPopupEnabled(false); GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); DisplayMode fullMode = new DisplayMode(800, 600, device.getDisplayMode().getBitDepth(), device.getDisplayMode().getRefreshRate()); device.setFullScreenWindow(this); device.setDisplayMode(fullMode); addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON3) {createPopup().show(PopupMenuTest.this, e.getX(), e.getY());}}}); setVisible(true); if (repaintThread == null) {repaintThread = new Thread(this);repaintThread.start();} } public void run() { while (repaintThread != null) { System.out.println("repaint");repaint(); try {Thread.sleep(10000);} catch (Exception e) {} } } private JPopupMenu createPopup() { JPopupMenu popupMenu = new JPopupMenu(); JMenu menu1 = new JMenu("menu1"); menu1.add(new JMenuItem("TEST")); popupMenu.add(menu1); return popupMenu; } public static void main(String[] args) throws Exception {new PopupMenuTest();} }
> JPopupMenu.setDefaultLightWeightPopupEnabled(false); この行削ったら動いてるように見えるが。 HeavyWeightなコンポーネント置くつもりならどうしようもないね。
320 :
317 :2007/01/05(金) 19:23:47
>>319 お返事ありがとうございます。
現在、PopupMenuListenerでPopup可視と連動してrepaintをするかしないか分岐
という感じで逃げています。
setIgnoreRepaint(true)
setFullScreenWindow(window)
の場合、意図した通りの動きにならない事が多い気がします。
IgnoreRepaintはフルスクリーンでBufferedStrategy使うの前提のものだからSwingコンポーネント使うならやめたほうがいいと思う
フルスクリーンでチャット機能つける場合の良い構成ってありますか? 日本語入力をどうしようというので早速つまづきます
それ普通にWindowsネイティブとかでもでる問題 ここはフルスクリーンをやめてウインドウの最大化をするべき もちろん、装飾部分や常に手前に表示を指定すること それらを指定すればタスクバーより手前に表示できる
なるほど。ではJLayeredPane+sync()+
>>323 で試してみます。
ありがとう。
グチだしこのスレでいいのかどうかもちと怪しいんだが、 Java2Dで描いた円ってなんであんなに汚いのかなぁ・・。 Ellipse2Dで真円描いても上下左右非対称なガタガタの円。 アンチエイリアシングかけないと見れたもんじゃない。 クラス名のごとく楕円しか描けないのだらうか。
Java6で直ってるはずだが。
327 :
325 :2007/01/17(水) 20:15:42
>>326 比べてみたけど直ってないみたいだ。残念。
むむ、いつぞやのJavaOne Tokyoで直るって言ってたのにな… (Sunの人じゃなかったけど)
330 :
325 :2007/01/17(水) 23:40:52
>>328-329 1.5と1.6ではまったく差はみられなかったけど、将来的には改善していく
つもりはあるみたいだからそれに期待することにします。
331 :
デフォルトの名無しさん :2007/01/28(日) 15:27:29
Windows Look&Feel で、デフォルトの JTextField だと IME の未確定文字につく 下線が見えないんだけど、これって俺だけ? デフォルトだとフォントが MS UI Gothic Plain 12 になってるんだけど、 Monospaced Plain 12 に明示的に変えてやると下線も見えるようになった。
332 :
デフォルトの名無しさん :2007/02/12(月) 14:02:12
SwingでSWTのGridLayoutみたいなのを使いたいのですが、何処かにころがってませんかね? また、その他使えそうなレイアウトマネージャあればURLキボンヌ
そのSWTのベースとなってるのはSwingというかAWTでのGridLayoutなんだが細かいところは異なる 今ならグループレイアウトが使い勝手もいいんでないかい?
GridBagLayoutでいいんじゃない?
GridBagLayout で殆どの用は足りる。
336 :
デフォルトの名無しさん :2007/02/15(木) 14:47:55
レイアウトマネージャの便利なとこは? 無効にして絶対値で指定したほうが楽そうじゃね?
固定サイズのアプリケーションならそれも選択肢に入る。 が、その場合でもレイアウトマネージャーに任せた方が楽なこと多数。
サイズ固定のアプリケーションしか作らないよな プリンタで出力する気もないよな モニタ解像度も知ったこっちゃないよな はみ出たら横にスクロールさせる気満々だよな リキッドレイアウトなんて聞いただけで反吐が出るよな
サイズ指定にしてもアブソリュートレイアウト使わないときっついぞ。 推奨サイズを使えばコンポーネントの位置関係を全自動でやってくれるし、可変サイズのフレームを絶対座標なんておわっとる。 グループレイアウトはベースラインであわせてくれたりするのがすごい便利。 まぁつかってもつかわなくてもかまわんが、何も考えずにフレームに対してsetSizeだけしなければOK。 それをするとWindowsXPと2000、Vistaとそれぞれ異なる描画結果になるので注意。 レイアウトマネージャ使っていてもDPIの違いで結構異なるプラットフォームで動かすのは大変だけどな。
Java Swing Hacks―今日から使える驚きのGUIプログラミング集 って本は良本ですか?
派手すぎて仕事用って感じじゃない。 けどいくつか役に立ちました。
オライリーのHacksシリーズ色が出てる本、手軽にクールなコンポーネント書きたい人向け。 所々既存コードに影響しないように考えられてる所も良いね。 早速、rhinoとgroovyから使う事を目的とした Swingラッパーに一部採用させてもらいました。
Hacksシリーズのわりには内容は平凡 なぜか参考にもならないsoundのコードがはいっている どうせいれるならちゃんとしたものを入れろと
まあ他のHacksシリーズを読んだら確かにそう思わなくもない。
mycomの記事見てJSR-296の「Swing Application Framework」を試してみた。 まぁなんつうか、モノはシンプルだね。 あとは、コンポーネントAの操作の結果を、コンポーネントBに、 Aの存在を意識させずに反映させる機能があればいいかな。 AからシングルトンなBeanを編集すると、イベントがBに飛んでそこで処理がおこる、みたいな。 こういうの自作してるんだけど、ひょっとしてjava.beans使えばできる?
>>345 PropertyChangeListener/Eventじゃないのかね。
>>345 導入前と導入後でソースが見やすくなるわけでもないし機能もかわらんからな
ただTaskとSwingWorkerは統一したほうがいいよな
> button.setAction(actionMap.get("onClick")); とかSwing信者から見ると気持ち悪いんだけど。 サーバサイドで慣らされてる人は平気なのかな。
いやー平気じゃないと思うぞ ロジック部分の呼び出しとかなら祖結合でいいけど 各種イベントでコンポーネントの状態を変更しないといけない密結合ではクラス分離して書くということはまずできないし あのフレームワークの存在意義がわからないとはずっと前からいわれてきたし startupとかはまぁイベントディスパッチスレッドを意識させないという意味があるのだろうけど イベントディスパッチスレッドを意識してないと並列動作できないしな
そうだね。Webのフレームワークみたいな役割を期待するとすると、 ロジックとGUIの分離、つまり同じアプリでSwing実装とSWT実装と Struts実装をやりたい場合とか、そういうときに使えるものを 期待してしまう。
JDK6のSwingのWindows LaF (Vista)で、JTableのヘッダの高さが通常の2倍ぐらいあるのですが、 これはなんとかならんもんでしょうか。
通常の3倍じゃなくて良かったな
>>352 オレが思いついてもあえて書かなかったことを・・・
機体性能が3倍あるわけじゃないんだぜ?
ザク、、、いや、何でもない。
SE6になってjavax.swing.undoのドキュメントの一部が丁寧になって少しましになってる。
JDK6の日本語マニュアルでたのか?
>>359 新機能とかまず概要の日本語がないってことはいまだ未完成ってことね
>>361 Beans Binding って Cocoa Binding みたいなもの?
似てるね。
365 :
デフォルトの名無しさん :2007/04/02(月) 17:44:32
YAGI3
apolloってJWSを食ってしまいそうだな
それはないだろ。 食われるほどのJWSの裾野はないし、今JWSでやってるものをおきかえれるほどの力はFlashにはない。
>>366 むしろJavaアプリの中でApolloのWeb連携機能が使いたいなぁ
369 :
デフォルトの名無しさん :2007/04/07(土) 16:00:15
SwingでGoogleCalendarみたいなUIをつくることって出来るんでしょうか?? ためしに作ってみようかと思ったんですが、Swingに余り詳しくないのでそもそもどういう風に作れば良いのかわからず悩み中です。
ブラウザで出来る程度のことはすべて可能 Swingに詳しいかどうかってのも関係ないな
371 :
デフォルトの名無しさん :2007/04/07(土) 17:22:07
JComboBoxについて質問です。 項目によって、色・フォント・背景色などを 分けたいのですができますか? もしできるなら教えてください。 お願いします。
JComboBox ListCellRendererでググればやりたいことは見つかると思う
373 :
369 :2007/04/07(土) 20:02:11
>>370 どうもです。GUIはweb系しか作ったことがなかったんで悩んでました。
HTMLに慣れた身にはSwingは面倒くさくてなかなか作る気が起きませんね・・・。
カレンダー部分は線を描画して書くことになるのかなぁ。
全部自前で描画してもいいし 適当にラベルをならべる程度でもいいし お好きなように
375 :
371 :2007/04/07(土) 21:37:25
>>372 有難うございました。
やりたい事ができました。
>>373 やる気がなければ何もできませんな
何で作るのよ
本当はWEBアプリのほうが面倒なんだけどな ダイナミックに動かすにはイベントは別言語を使わなければならないし、 環境依存性が高い そして通信部分も再読み込みとか2度押し防止とかいろいろと考慮する必要有、と
> 373 JLabelにHTML貼り付けでOK
>>378 せめてJEditorPaneだと思ったらw
380 :
デフォルトの名無しさん :2007/04/10(火) 22:05:12
swingで作ったGUIアプリを 常に前面に表示させたいんですが、できますか? もしできるなら教えてください。 お願いします。
>>380 1.5 以降なら java.awt.Window#setAlwaysOnTop(boolean) を使う。
それ以前なら標準では無理。
例えば Windows なら JNI経由で java.awt.Window の HWND 得て、SetWindowPos すればできるけど。
>>380 できました。
素早い回答ありがとうございました。
383 :
382 :2007/04/10(火) 22:21:45
すべてのコンポーネントのセットをJPanelをExtendsしたオリジナルなコンポーネントにしておいて JFrameのレイアウトに置いていく作りにしてるんだけど、これでイケテル?
いろんな意味で意味がわかんない
自分でも読んでて意味わかんないやw 巧く説明できないのでおやすみなさい
>>384 うーん、単にJPanelを置いてその中にコンポーネント配置していけばいいんじゃないのかな?
>>384 が言いたいのは、
public class HogePanel extends JPanel{...} として作っておけば、
JFrame, JInternalFrame, JApplet, JTabbedPane などに乗っけるだけで
いろいろ使える、って意味では?
再利用性を高めるやり方としては間違ってないと思う。
再利用の必要がないなら無駄だけど、個人的にこういう作りは好きだ。
>>389 つまりJColorChooserみたいな複合ウィジェットを作って再利用ってだけの話なのかね?
JPanelじゃなくてJComponentでいい気がするけど…
391 :
384 :2007/04/13(金) 22:13:53
>>389-390 そのとおりです!
気持ちが伝わってなんか嬉しいっす。
JComponentですか。思いつきませんでした。どっちがメリットあるかなぁ。
JPanelのソース見てみ。JComponentほとんどそのままだ。
複合ウィジェットならJPanelが自然でしょ。
>>393 awt では Panel 使ったけどが swing で JComponent が Container に
なったから JPanel にする必要は全くなくなったのでは…?
>>394 JComponentはObjectのようなSwingコンポーネントのルートクラスだから
継承するならいいけどぽとぺたやるならJPanelで
>>396 具体的にJPanelのどの部分がぽとぺたに向いているのでしょうか?
あるいは JComponent のどの部分が向いてないのでしょう?
背景が透明か不透明かが違いじゃないん?
JComponentはこっそりabstractクラスなので、そのまま載せようとして あれ? と思ったことはあるが、どうせ継承して使うだろうし、あえて JPanelでなければならないことはなさそうだな。 ただ、ポトペタだとソースレベルで継承して使うことにはおそらくならな いだろうから、JPanelでないと駄目かも。
思想的にJComponent使うなら新しいコンポネント作るくらいの意味合いだな JPanelを使った場合、JPanelの機能変更に引きずられる可能性がある それを望むのであればJPanelの上にまとめればよい 独自コンポネントでJPanelに影響を受け手欲しくなければJComponent
JFrameの外枠とかメニューバーのサイズを変える事はできるのでしょうか? できないなら正確なサイズを知る事はできるのでしょうか?
つ Insets
ありがとうございます JFrameの方はなんとなくわかったのですが メニューバーの方はわからないのでもう少しヒントをくれるとありがたいです
Dimension size = menuBar.getPreferredSize(); menuBar.setPreferredSize(new Dimension(size.width, 200));
ありがとうござました
JFrame上のKeyEventを常に取得したいと思いまして、次のようなクラスを class testKeyEv extends JComponent { public testKeyEv(){ enableEvents(AWTEvent.KEY_EVENT_MASK); addKeyListener(new stateCheckKeyHandler()); setFocusable(true); } } setGlassPane()でセットして実行すると、始めはちゃんとキーイベントを取得してくれるのですが、 マウスでほかのボタンをクリックしたりすると二度とキーイベントを取得してくれません。 ちなみに stateCheckKeyHandlerはKeyAdapterをextendsしたのもです。 マウスイベントはほかのコンポーネントにそのまま渡して、KeyEventだけを常に取得し続けるには どうすればいいでしょうか?
そのフォーカスがあたったコンポーネントでは通常の動作はしていいの?
>>406 最初から中のコンポーネントにフォーカス当ててそっちでキーイベント拾いましょう
# 関係ないけどリスナーを登録してイベントとるなら enableEvents() は必要ないんじゃなかったっけ?
JTreeのノードをDnDで移動できるようにしたんだけど、その関係で ツリーのノードによってノード毎に違うテキストのツールチップを表示しなきゃいけないんだけど、 この方法はJTreeのgetTooltipText()でノード別のテキスト返すように オーバーライドするとして、ツールチップテキストを設定するタイミングはどのぶぶん? カスタムセルレンダラ使ってるんでセルレンダラがレンダリングコンポーネント返す時にそのコンポーネントに テキスト設定しようと思ってるんだけど、それで良いかな? ググって漁ってみたんだけど他に思いつかない。アプローチが間違ってんのかすらも分からない。 教えてエロいひと。
レンダラのタイミングだとレンダリングし終わるとその後ずっと呼ばれないし、 スクロールとかウインドウの重なり具合とか最大縮小するだけでもよばれるけどそのタイミングでいいの?
ヒントもあたえたほうがいいか JComponentのgetToolTipTextをオーバーライドすればいい
「普通に」がぬけてた・・・ 何のための引数かと
TextField を f1,f2,f3,f4,f5,f6,f7 と言う名で作りました。 あらかじめNetBeansで個数分貼り付けちゃいました。 それぞれにある一定の処理をしたいのですが。 forなど繰り返し処理のなかで出来るようにしたいです。 JTextFieldの配列などに繋げれば出来そうですが、 それでは最初に全部個数分繋げる作業が必要になるわけです。 JTextFieldの数が大量になった場合大変ですから。 なんとか名前の数字を変更してアクセスする方法ないでしょうか。 よろしくお願いします。
JTextFieldだけを乗せるJPanel(というかContainer)を作って、getComponentsを呼び出せばいいかもね
メンバー変数としてf1,f2,...があるのならリフレクションで取れるよ。 ローカル変数だと出来ないけど。
>>413 f1,f2,f3,f4,f5,f6,f7 は、とりあえず そのままにしといて、
配列必要になったら new JTextField[]{f1,f2,f3,f4,f5,f6,f7} して配列作るとかすれば?
>>415 そんな事はできてもする設計にしてはいけない・・・・
>>417 >>414 案が妥当だと思った。が、別に特別にPanelを用意せずにnameプロパティに
何か分かりやすいのを振っておいてコンポネントをより分ければいいと思う。
>>410 ありがと、できたよ。ソースコード見てみたけどJTree#getTooltipText(MouseEvent)が
回りくどい実装してたんだね。
>>418 > そんな事はできてもする設計にしてはいけない
同じようなことをたくさんやるときに、利用するのはとても効率的だと思うよ。
リフレクション使って配列に格納するメソッドを用意しておいて、実際の利用は配列を使うというのがいいかと。
nameプロパティ使うのと、本質的な差はあまりないと思う。
リフレクションってのは、フレームワークレベルで使うのはいいと思うが
一般のコードには入れない方がいいと思うんだ・・・・
だから
>>420 の利用する部分との分離がいいな
>>421 リフレクションを使うってことは,せっかく(記述が面倒な)Javaを使うことで得られる
強力なコンパイラの型チェックをスルーしてアクセスするわけだからライブラリや
フレームワークにしてそれなりにテストした上で使うのがいい使い方なんだろうね…
# ってかリフレクションを無駄に使ってるJavaアプリケーション見るとそれならもっと動的な言語使えよとか思う…
プライベートなものも自由に触れるからな アプリ側で出てきたときにはそれはもはや実装のバグとよんでもよいかと
リフレクションって、どっちかっつーとコンストラクタ貰ってきて インスタンス生成みたいな用途が多いと思ってたんだけど、 アクセス制限を回避するなんてキチガイじみた目的がメインで使う人もいるのか……
>>424 使ってないんじゃね? 思いつく用途がそれだけだっただけで。
>>424 ライブラリやフレームワークで独自のシリアライズとかする場合には
private なインスタンス変数にアクセスする用途に使われる
まぁメインの用途ではないよね.普通の用途なら Bean の getter, setter呼ぶのに使うとか?
>>424 DIとかフレームワーク側は普通に使うよ
ここで反論する理由がひとつでもある人は、使ってもいいと思う。 宣言をprivateにしておいて、値は特別な仕組みでリフレクション使って設定するようにして、通常のコードからは値が変更できないようにしておくとか。
フレームワークで使うのは誰も否定してないんじゃね?
ちょっとスレから外れてきた。 Java 低速GUI ネタよろ…
今回の件に関しては reflection 使わずに interface 定義してどうのこうのの方がよろしくね? add した時に add された側(コンテナじゃなくてコンポーネント)で 呼び出されるメソッド(イベント)とかって無いんだろうか。
>>431 HierarchyListener#hierarchyChanged(HierarchyEvent)
イベント内容で判断しないといけないけど。
>>424 イディオムになるくらいよく出てくるならそこだけ纏めても別にかまわないと思うが->変なリフレクション
というか纏めてくれないとぬっころすって事にならんか?
こんな感じのメソッドを定義しておけばいいんだよね。 static <T> List<T> getInstances(Object parent, Class<T>, String prefix) でこんな感じで使えるようにする。 List<JTextField> fields = getInstances(window, JTextField, "f");
>>434 設計からやり直した方がよくないか?
テキストフィールドのコンテナクラスを自作するとか。その程度の手間で解決できそうじゃない?
ポトペタで同じような部品を並べていくとその手の変数名が 数値部分だけ違うインスタンス変数が並ぶんだよな。 手で作れば真っ先に配列か何かにするところなんだが。
ポトペタで配列作ればいいじゃんw
>>435 配置の自由度が低すぎるので採用できる場面は少なそう。
いまさら手コーディングでGUIも作れんし。
VEなりNetBeansなりが、コンポーネント配列に対応してくれればいいのだけど。
>>438 ああ、ようやっと変なリフレクションが欲しい場合の文脈が読めた。
GUIビルダーつかってデザインした複数フィールドの時はたしかに欲しいかも。
普段は手で作ってるからそんなに欲しいと思わないけど忙しい時だと欲しいかもしらん。
NeXTやOSXにはあるね
リフレクションとこのぽとぺたとは関係ないぞ
>>483 いや、そっちのコンテナじゃなくてjavaでいうならコレクションみたいな感じ。
そのコレクションをコンポーネント間で共有するか誰か管理クラスに持たせて問い合わせるようにすれば
コレクションそのものも、フィールドへもアクセスの自由度は確保できる。
外の様子知るためだけにリフレクションは流石にアプリケーションソフトとしてはまずい。
てか、javaでデスクトップアプリ作っててコレクション使う場合が俺には
クラスの動的ロード+コンストラクタorファクトリメソッド呼び出ししか思いつかん。
webフレームワークとかjavascriptならね。
デスクトップアプリでコレクション???
JTextField から派生して 初期化時にインスタンス管理クラス呼び出して 自分を登録するようなクラス作成すれば ポトペタでも管理出来る。けどキモいな。
ContainerListenerを使って、JTextFieldが追加されたときにArrayList<JTextField>に追加していくって手もあるな
それだと、結局リフレクションが一番手間が少ない。
結論はポトペタ使わずに手で書く、です…
それだとJTextFieldの振り分けが必要になるんじゃない? そのための名前をどうするか。
JTextFieldを継承したコンポーネントを用意すればいいだけだから問題ないだろ もちろん変数はJTextFieldのままでいい
>>446 間にJPanel1枚挟んでレイアウトするケースもあるし、
そう単純には行かないんじゃない?
シャアぁぁぁぁぁぁぁっぁああああ!!
ざれごとはやめろよ
>>451 わざわざ継承使ってコンポーネント作るなら、他に特別な仕組みがいらないリフレクションの方がいいと思うよ。
普通にGUIエディタが使えるし。
順番の指定とかはどうすんの?
458 :
457 :2007/05/31(木) 04:36:09
継承使うというのは、影響範囲がでかい。 単にコンポーネント配列のために継承使うのはあまりいいとは思えんのだが。 GUIエディタ使いたい場合だと、「変数名を適切に指定して、あるメソッドに食わせたら配列ができる」ってのが一番手軽で影響範囲が少ないと思うのだが。 ここでのリフレクション否定の意見って、「リフレクションだからリフレクションはダメ」という理由ばかりな気がする。
クリリンのことか?
ああ、あったあった。
>>457 GUIエディタってのがNetBeansなら継承やマーカーインターフェースは普通につけれるし
順番の制御をしたいのならなおさらかと
どっちでもやりたいようにやればいいと言うことで。 順番制御とか考えなきゃならんなら 最初から手で書けよ感がするけど。
465 :
デフォルトの名無しさん :2007/06/01(金) 21:38:57
JFrame に Java3D の Canvas3D を配置すると、 JMenuBar で作成したメニューが Canvas3D の背後に隠れてしまうんですが、 解決できないものでしょうか。
Canvas3D ってJComponents継承してる?
467 :
465 :2007/06/01(金) 21:48:55
継承していないです。↓こんなんです。 java.lang.Object extended by java.awt.Component extended by java.awt.Canvas extended by javax.media.j3d.Canvas3D
>>465 JPopupMenu#setLightWeightPopupEnabled(boolean) に false渡してもだめ?
469 :
465 :2007/06/01(金) 21:53:18
JMenuBar, JMenu, JMenuItem しか使っていないんですけど。。。
471 :
465 :2007/06/01(金) 21:58:37
はっ!これでうまくいったー!ありがとー。 JMenu fileMenu = new JMenu("ファイル"); fileMenu.getPopupMenu().setLightWeightPopupEnabled(false);
AWTの[コンポーネントと混ぜる時点でどうしようもないんだよな JOGLだったらGLJPanelで問題なしだが
Java3D 1.5だとJCanvas3Dがある。
Java3D1.5ってOpenGL1.5要求するらしいから結構きついな
まともに対応しようとしないintelうぜぇとか言ってみるテスト
Intelのチップセット内蔵グラフィックスだとJava 2DのOpenGLアクセラレートが使えないのは辛いです。。。 Intelのドライバの問題で対応できないのか、対応しないだけなのか分からないけど。。。
Java2DのOpenGLアクセラレーションは有効にしても描画が崩れるだけなので使い道がねぇ
JFileChooserでダイアログを出すと
ttp://2sen.dip.jp:81/cgi-bin/upgun/up1/source/up5993.jpg のようにフォントの大部分が太字になってしまいます。
試しに
JFileChooser chooser = new JFileChooser();
chooser.setFont(new Font("Dialog", Font.PLAIN, 12));
のようにしてもダメでした。
どうすればこの太字をFont.PLAINにできるのでしょうか?
識者の方々、どうかアドバイスをお願いいたします。
OS:Windows2000、XP
JDK:1.6.0、1.6.0_01
でそれぞれ試してみました。
479 :
デフォルトの名無しさん :2007/06/11(月) 12:05:15
すみません、上げます
>>478 UIManager.setLookAndFeel()
>>478 http://amateras.sourceforge.jp/cgi-bin/fswiki/wiki.cgi/free?page=LookAndFeel フォントを指定して起動する
SwingのデフォルトのLook & FeelであるMetalはメニュー等のフォントがBoldでいまいち見た目がよくありません(JDK1.3までは普通だったのですが…)。JavaVMに起動オプションを与えることで、このフォントを変更することができます。
java -Dswing.plaf.metal.controlFont=Dialog-12 alpha.AppMain
また、JDK1.5ではMetalLookAndFeelでPLAINなフォントを使用するために以下のオプションが利用可能です。
-Dswing.boldMetal=false
コマンドラインオプションではなく、Javaコード中で設定する場合には以下のようにします。
UIManager.put("swing.boldMetal", Boolean.FALSE);
484 :
478 :2007/06/11(月) 15:58:38
>>483 おおお、ベストアンサーでした。
ありがとうございます!
これで他のコンポーネントもsetFont(new Font("Dialog", Font.PLAIN, 12))をしなくて済みました。
他にもレスをくださった皆様方ありがとうございました。
これって何でボールドに変更したのか謎だよなぁ…
486 :
デフォルトの名無しさん :2007/06/11(月) 17:23:13
MigLayout使ってる人って居る? シンプルで結構良さげだったのだけど。
まず
>>486 が使ってみてメリット、デメリットを押さえた感想を教えてくれ
>>484 やってること同じかもしれないけど
http://terai.xrea.jp/Swing/FontChange.html private void updateFont(final Font font) {
EventQueue.invokeLater(new Runnable() {
public void run() {
FontUIResource fontUIResource = new FontUIResource(font);
UIDefaults defaultTable = UIManager.getLookAndFeelDefaults();
for(Object o: defaultTable.keySet()) {
if(o.toString().toLowerCase().endsWith("font")) {
UIManager.put(o, fontUIResource);
}
}
//SwingUtilities.updateComponentTreeUI(MainPanel.this);
recursiveUpdateUI(MainPanel.this);
frame.pack();
}
});
}
private void recursiveUpdateUI(JComponent p) {
for(Component c: p.getComponents()) {
if(c instanceof JToolBar) {
continue;
}else if(c instanceof JComponent) {
JComponent jc = (JComponent)c;
jc.updateUI();
if(jc.getComponentCount()>0) recursiveUpdateUI(jc);
}
}
}
>>485 英字さえ見栄えがよけりゃいいって感じかと
490 :
デフォルトの名無しさん :2007/06/12(火) 02:50:08
スレ違いかもしれないが、質問。 Swingでアプリを作りたいんです、得意先台帳に送り状印刷機能がついたようなのなんですが。 Accessみたいにプリンタ(ドットインパクト)の指定と用紙サイズ(ヤマトだと15*4 1/2インチ)を指定して、 ボタン一発で印刷ってできるのでしょうか? 詳しい方教えてください。 よろしくお願いします。
491 :
デフォルトの名無しさん :2007/06/12(火) 03:48:24
それを自分で作るんだろうが。 javaでドラクエ作れますか?て聞いてるのとかわらんな。 最近javaスレでこの流れ多いな。
POIでいけるんじゃね?
493 :
デフォルトの名無しさん :2007/06/12(火) 08:47:19
>>490 PrintRequestAttributeSet
>>490 プリンタドライバ経由ならできるよ。
javax.printパッケージを見るといい。
佐川やヤマトの送り状とか契約書とかドットインパクトでの印刷はよくやるな 業務系だと連帳は基本だしな ただ、Swingとあまり関係のないところだな ネイティブのプリンタのプロパティ使いたい場合awtのダイアログを使ったほうがいい場合もあったような あとitextあたりでPDFを生成して印刷はAdobeReaderに任せるという方法もある ヤマトならcsvとかXML作ってヤマトが無料配布している送り状印刷ソフト使う手もある 備考欄とかイマイチ文字数が足りないとかあるけど、細かいカスタマイズがしたいとかなら 予算次第(&個数)だがヤマトシステムに話をしたほうがいいかも
毎月1000部くらい刷るって言ったらソフト作ってくれるのかな
>>496 作ってくれるかどうかはお金次第でしょ。
あとはシステムだけじゃなくそこの担当地区の営業さんの力次第ってのもある 地区によっては厳しいところもあるからそういうところはプッシュしてくれる でも1000部程度で乗せるものによっては自前で印刷したほうがいいかも 長期間にわたって定期的に発送などならちゃんと契約すれば自前で印刷とか梱包もやる必要はないよ 資材とか送るとヤマトのほうで全部やってくれる 1000枚の送り状番号の管理とか印s夏して箱詰めとかが面倒だと思ったら まずは近くの営業の人(ドライバーとか)に話をしてみるといいかと
499 :
デフォルトの名無しさん :2007/06/12(火) 13:36:03
500 :
デフォルトの名無しさん :2007/06/12(火) 23:59:02
皆さん(>491除く)、色々と有難う。
PDFを使うやり方や、ダイアログを使うやり方だと、
ボタン一発ではないので面倒くさがられてしまいます。
現在の使いかただと、キー入力のスピードに画面の表示が追いつかないくらいなので。
>>493 ,494氏にお教え頂いたのを勉強してみようと思います。
PDFを使う利点はプレビューできるってとこだな Accessとかで手軽にプレビュー作れてたシステムの置き換えに使うといい あとダイアログはだす、ださないだけの違いだからどうにでも 現在の使い方だとキー入力に画面が追いつかないってのが意味不明
javax.printだと、Graphicsに書き込むことには違いないから、JComponentのpaintComponentsからも同じ処理呼び出せばプレビュー自体は比較的簡単だよ。 標準で持ってて欲しいとも思うが。
PDFを使う利点は偽造されにくいっていうのも どこかのサイトに書いてあったけど本当?
印刷の途中仮定という意味でなら、PDFなんて中間形式使わずに直接印刷したほうが偽造されにくい。
xsl-foのこともたまにで良いので思い出してあげてください。 まさに組版並の印刷用途向け中間形式なんだが。 まあ、まともにサポートしてるライブラリは商用ライセンスだが。 xsl-foをjava2dにさえ描画できればあとはどうにでもなる。 てか、○○さん以外ありがとう とか言ってる奴たまにいるけど馬鹿かこいつら?
かわいそうな人はスルーした方がお互いのため。
507 :
デフォルトの名無しさん :2007/06/13(水) 10:04:45
JPopupMenu#show を呼ぶと、デフォルトで、最初のメニュー項目が 選択されてしまうのですが、これを選択されないようにすることはできますか?
508 :
478 :2007/06/13(水) 10:33:04
>>488 おお、情報提供ありがとうございます。
再帰的にコンポーネントをゲットしてフォントを変えていくんですね。
参考になります。
509 :
デフォルトの名無しさん :2007/06/17(日) 23:55:36
すいません、swingで javax.swing.JOptionPane.showMessageDialog(null, "hello"); で helloと表示されるダイアログが表示されるのですが、 このhelloのフォントってどうやって指定するのでしょうか? リファレンスみたのですが、どうもそのような設定項目がなくて…
一応出来るけど、OSがメッセージだすように環境依存ってことになるから 将来のバージョンで動作が保障されないとかそういうことになってもいいのかい? カスタマイズしたダイアログがほしいなら自前で作成すべき あと最初の引数をnullにする場合なんてありえんと思う
>>509 javax.swing.JOptionPane.showMessageDialog(null, "<html><font size=20 face=\"MS 明朝\">hello</font></html>");
513 :
デフォルトの名無しさん :2007/06/18(月) 13:40:36
514 :
デフォルトの名無しさん :2007/06/18(月) 14:53:27
VB.NET C# 使いなんだがマルチプラットフォームに興味があるのでJava使ってみたいんだけど・・・・気になる点が2つほど 1. LinuxとWindowsで基本的なコントロール(テキストボックスとかリストビューとかグリッド)使ってDBのデータIOを行うアプリを作りたいんだけど LinuxとWindowsは意識せずにまったく同じソースでいいの? それともVMごとにコンパイルオプションを指定するような感じになるの? 2. .NETと比べてUIのモッサリ感はどう? .NETのモッサリ感は我慢できるレベルだという定義で 内部処理の高速性は気にしないものとします。
>>514 1. 同じソースで同じバイナリ(クラスファイルだけど)でよい
2. 起動はモッサリだが動けばUIの速度は普通(昔はモッサリだったけど最近はよくなってきた)
>>514 SwingはJava5 Java6 など新しいものの使用をすすめる。
WinFormとどっこいくらいには快適になってる。
517 :
デフォルトの名無しさん :2007/06/18(月) 16:04:38
>>515 >>516 レスサンクス
なるほど 話の通り完全に同じソースでいけるわけなんだ
やっぱ便利そうだなぁ
C++でマルチプラットフォーム用の書いてたときはDefine切りまくりで
頭弱いから途中で頭がこんがらがってたしw
モッサリ感は現状最新のものを使って進めていけば.NETと同じレベルになりそうだからその方向でやってみようかなと
本当ははドトネト選ぶ時にJAVAにしようかな?と迷ったんだけど重いって話を腐るほど聞いてたんでドトネトにした
実際使ってみたらドトネトも思ったよりもモッサリで・・・・新しいソフト作る時はJAVAも視野に入れてもいいかもと思いだした
どうもこのスレの感じからすると普通に問題なさそうだからちょっと簡単なソフトから使ってみることにするよ
もっさり具合はアプリによるのでは? .NETでもそうだけど、メモリは食うね。HDDとメモリが速ければ大丈夫。キャッシュの量にも大きく左右される。 Pentium4系だとJavaの速度は遅めでAthlon64やPentiumM系列はあからさまに速い。 1.4.1以降はGUIの描画にたとえばWindowsだとDirectDrawを使ったりハードウェアアクセラレーションを利用している。 6.0でVMの大幅に速度向上してるのでクライアントサイドなら6.0以上をすすめる。便利なAPIも多いし。 jdkに付属のswingsetデモを見てみるといいかも。
あとは jar 一個ってわけにいかないアプリだと 起動スクリプトを環境毎に書く必要有り。 つっても path や classpath の指定方法が違うだけなんだけど。
520 :
デフォルトの名無しさん :2007/06/18(月) 16:58:09
>>518-519 まぁアプリによるといえばよるんだけどUI描画全般は遅いと感じてしまう・・・
いい情報サンクス!
クライアントAPPなので とりあえずそのバージョンを最低レベルとして環境整えてみるわ
>起動スクリプトを環境毎に書く必要有り
まぁそれくらいなら別に問題ないとおもうさ
>>519 MANIFEST.MFのClass-Pathエントリにjarファイル名を並べれば
パス通るよ。
IDEがマニフェストファイルにクラスパス通してくれるから ほとんどの場合何もする必要はないと思うが
とはいえ快適に動かす場合、アプリごとにVMオプションを変えるのが普通だから フック用のexeとかスクリプトおいておいたほうがいいけどな マニフェストファイル内に参考VM設定入れれるようにしてほしいな webstartは多少入れれるようになったし、アプリケーションの塚と削除、 プログラムやデスクトップアイコン登録やってくれるのはいいが、 肝心のスタンドアロンアプリで出来ないのが納得いかねー
まあ、File f = new File("."); hogehogeとかやってはまるなよ。
>>519 fatjarでまとめてやれば、1個でおk。
ただ、LGPLなライブラリをfatjar化したときのライセンスが気になる。
動的リンクとみなしてくれるのか、静的リンクとみなされるのか。
いや、普通にLGPLのライセンスに従うだけ 静的なのか動的なのかでは動きは変わらない LGPLはライブラリのバージョンアップなどが合った場合差し替える権利を保証するだけ だからアーカイブ方法を提示してあげるだけだよ 静的だとオブジェクトファイルやコンパイル時のバージョンなどを明記すればよかったが 動的だと差し替えが容易なのでその記述が簡略化されるだけ
529 :
デフォルトの名無しさん :2007/06/25(月) 23:13:07
Java5でUTF-8の濁点入りの文字列をJTextFieldで編集するとカーソルがずれて、 Java6で濁点入り文字列をJLabelで表示すると濁点が1文字として表示されるんですが、 普通に1文字で表示してしかもカーソルがずれない方法ないもんでしょうか?
環境は? 俺はずれたことないのだけれども、そのずれる文字コードはなに?
531 :
デフォルトの名無しさん :2007/06/26(火) 02:08:43
フォントに問題あるんじゃないの
532 :
529 :2007/06/26(火) 02:34:40
ごめん、スレまちがえた。 MacのSwingの話です・・・ Mac板逝ってきます。
環境によって違うとしても その違いは仕様で片付けるにはあんまりだな。
Macでも日本語がおかしいとはきいた事がないな
macのネイティブLaFにはバグがあるけどな。
Macじゃなくて、Windowsでも再現するかはチェックしたいな・・・ 再現コードがほしい |-`).。oO(・・・・・・MacのMustangの日本語に関する問題としては、 レンダリングエンジンの問題の件、直るのか? QuartzというMac固有のレンダリングエンジンからSunのレンダリングエンジンに変更されて フォントの種類によってベース位置がずれる問題・・・。 半年以上前から、MacのJavaスレで報告されていたのに、新しい開発版Javaが出てこないから 直してるのかわからねえ・・・)
>>529 Mac OS Xって NFD じゃなかったっけ?
1.6以降なら java.text.Normalizer あるから簡単に NFC に変換できる。
1.5以前は知らん。あと NFC に変換してもフォントが対応してるか俺は知らん。
そもそも"UTF-8の濁点入りの文字列"ってUnicodeでいったらどこの番地? charsetとencoding混同してる時点で伝わってないかと。
539 :
デフォルトの名無しさん :2007/06/26(火) 18:26:19
むずかしいことはわからないが、リッチクライアントが待望される現在、 Swingがいまひとつ冴えないのは何でだろう。素人的に考えるに、次の 2点だと思う。 (@)開発ツールあまりに貧弱 VisualEditorというものを使ったが、遅くて快適に使えない。 ちなみにメモリ1G。かつてのVisualBasicとどうしてもくらべて しまうが、なぜこれほどの差があり、差がちじまないのか。 (U)見栄えが今ひとつ フォントなど見栄えが悪い。アンチエイリアス「java -Dswing.aatext=true」 なども使ってみたが今ひとつ。 (いちいち引き合いにして悪いが、従来のVBでつくった画面にくらべると そう感じざるをえない) それ以外にも少し機能が貧弱な面があるが、少なくともこの2点が 改善されたら、俺は積極的に使いたいと思う。 フリーソフトニいろいろケチをつけて申し訳ないが・・
>>539 開発し易いsoft.と云うのは構成配置を覚えるにはいいですが?
そのsoft.を使用し作成されたapplication.と云う物は、
必ずsoft.に依存します… 当たり前に規約にも影響する物です。
>>539 何故Netbeansを使わない。
そして、aatext=trueは、・・・・
まずは、
>>539 の知識を広げるところから始めた方が有用そうだ。
Swingの表現力を見るために、V2Cを見てみることをおすすめします。
フォーカスの順序とかもっと簡単に指定できないかなあ。 結構お客さん、こだわるんだよなあ。
aatext=trueはsunの5.0しか効かない。それに今はデフォで有効だろう。 さらに引数与えても捨ててるはずだけど。 LCDテキスト用AAアルゴリズムが追加されたけど実行後にプログラマが 最適なアルゴリズム選ぶ手段がjavaには無い事ない? javaらしいって言ったらSwingの描画は全てJava2DだからJava2Dでできることは全て GUIへフィードバックできるよね。
544 :
デフォルトの名無しさん :2007/06/26(火) 19:05:59
>>541 V2Cを見ました。
すばらしい!
たぶんソースコードは公開されてないんでしょうね
Swingが流行らないのは、単に作るのが面倒だからじゃね? プラットフォーム互換性を持つ反面、使いづらいレイアウトマネージャ、 デザパタの教科書に使えるくらい美しい(と言われる)が、取っつき悪いクラス設計、 そして優れたGUIデザイナといわれるNetBeansがマイナー扱い。 業務でJava GUIクライアント作ったんだが、 他の連中がメンテできない。正直公開している。 ま、他の連中のスキル不足とかノウハウ共有が悪いとか、 他に理由はあるんだけどさ。
546 :
545 :2007/06/26(火) 19:07:09
公開じゃねえ後悔だ。orz
547 :
デフォルトの名無しさん :2007/06/26(火) 19:09:55
>>541 VisualEditorを使った理由。
Eclipseを使っていたから。
たまたま市販の参考書が多かったから
今後はNetbeanにシフトしたいな
SUN純正だし
>デザパタの教科書に使えるくらい美しい(と言われる)が、取っつき悪いクラス設計 GUIは中途半端なMVCだけどな
549 :
デフォルトの名無しさん :2007/06/26(火) 19:28:17
>>540 ユーザインタフェース(要は画面)をつくる場合コードからガリガリ書く
のはばかばかしいので、マウスのドラッグ&ドロップで簡単に画面アプリを
作成できる開発支援ツールがあれば大変重宝します。
特にエンドユーザーに見せるため一度しか使わないプロトタイプ画面
などはそうやって即効で作成したいところです。
当然本開発になっても仕様変更など生産性は著しく向上します。
ところがツールで生成したコードが著しく汚くて冗長だと、コード
のメンテナンス性が低くなり、ツール使用によるメリットが半減して
しまいます。ツールに依存していても、コードを判読するケースは
あるからです。
つまりツールが自動生成するコードは、まるで有能なプログラマーが
一から開発したかのように合理的で明快なコードである必要があります。
そうでないとツールは普及しないでしょう
レイアウトマネージャが使いにくいって・・・ VBとかのほうが苦労するだろ 絶対座標マンセーならかまわんが、ウインドウリサイズとか対応するのきついぞ そもそもJavaでGUI作るのにVEって・・・ あれはSwingやJavaのGUIを陥れるために作られたものと考えるくらいがちょうどいい
551 :
デフォルトの名無しさん :2007/06/26(火) 20:33:31
仕事でNetBeans使ってる人って結構いる?
結構いると思う 5.0からは複数のプロダクトで使われてるのみてる 大手はRSAとかだけど重すぎてきつい
>>551 うちの奴らはGUIの作成のみに使ってる。他はEclipse使ってるみたいだが。。。
Swing流行らせるためには、まずはNetBeansが機能も知名度もEclipse並に
なってもらわないとだめだね。
日本だとNetBeansの動きがやや鈍いね 海外は動きが速い
本屋にくだらないEclipse本があふれてるからねー 海外だとそこらへんの事情も違うのかな・・・
まずはJREをどう抵抗少なく配布するかじゃないか? 結局ここが一番のネックに感じる。 launch4j に JRE 同梱して、 「exe 叩けばOK」な形で配布すると 割と抵抗なく受け入れてもらえるんだが、 人としてこのファイルサイズはどうなのって感じが。
gcj使ってるひといる?
>>556 アプリとして有用であればランタイムが大きくても気にしない
のが正解かと
>>556 Consumer JREがどうなるか気になるね。
軽量化してくれればJRE同梱も納得できるサイズになるかも。
>>558 Delphiも結構デカくなってたしなあ・・・。
561 :
529 :2007/06/26(火) 23:16:16
Mac板から帰ってきました。 NFCとNFDについて勉強してきたんで、なんでこんなことになるか 理解できました。 ファイル名を扱うツールを作ってるんですが、ファイル名を取得して テキストエリアに表示するサンプルを作って試したら問題が再現しました。 以下、サンプルコードです。
562 :
529 :2007/06/26(火) 23:16:56
package test; import java.io.File; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; public class DakuonTest { public static void main(String[] args) { try { JFrame frame = new JFrame(); JTextArea text = new JTextArea(); frame.getContentPane().add(new JScrollPane(text)); File[] files = new File(args[0]).listFiles(); for(int i=0; i<files.length; i++) { text.append(files[i].getName() + "\n"); } frame.pack(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }
563 :
529 :2007/06/26(火) 23:22:03
第一引数のパスのディレクトリのファイル一覧を取得し、 1行に1ファイル、テキストエリアに表示しています。 「ピクチャ.png」があった場合、 Java 5の場合、ピは1文字で表示されますが、カーソルはずれてます。 Java 6の場合、ヒ゜と表示されます。
564 :
529 :2007/06/26(火) 23:34:10
ついでですが、濁点の入る文字が三つ以上続くファイル名でJava6の場合、 濁点がずれて表示されます。 「ががが.txt」 の場合、 「か゛かか゛゛.txt」 と見えます。 Appleのバグレポートにあげようかと思ったんですが、こんなもんどうやって 英語で説明したものか・・・
>>563 >>536 が言ってるフォントレンダラの問題なんじゃないかと推測。
1.5 -> Quartz という Mac 本来のエンジン使ってるので、NFD でも 一文字として表示する、
けど Java と Quartz の連携が中途半端で文字の大きさとかの情報が渡ってなくって
カーソル位置がずれる。
1.6 -> Sun のエンジンは NFD は 別々の文字として表示する。
あくまで推測だから本当のところはわからんけど。
1.5までは合成文字未対応だから、1.6でjava.text.Normalizerを 通すのがまっとうな解決法だろうなぁ。
567 :
566 :2007/06/26(火) 23:41:05
いや、比較する訳じゃないし、これはあくまで描画上の問題ですね……
比較する訳じゃないのに、Normalizeされた文字列を 表示しようとするのが間違い。 MacのFSのUTF-8はNormalizeされてるので、取ってきた後 deNormalizeしてから表示するべき、ってことなのかなー。
macオワタ
macは知らんがレンダラのフォントの扱いの問題? appleこういうの多いよね。
571 :
529 :2007/06/27(水) 00:29:08
とりあえずAppleに「直せや」ってねじ込んで、駄目なら568さんの方法で 自分のコードを改修しようと思います。 その場合Java5については諦めるしかなさそうですね。 ついでなんでさらにMacのSwingについてぼやきます。 日本語キーボードを使っていると、KeyEventのgetKeyChar()とgetKeyCode()の 戻り値が矛盾します。 英語と日本語キーボードで配置が変わらない数字やアルファベットのキーなら 問題ないですが、記号だとgetKeyCode()の値がおかしいです。 たとえば@キーの場合、getKeyChar()は'@'を返しますが、 getKeyCode()はKeyEvent.VK_OPEN_BRACKET(0x5B)を返しました。 キー操作の多いアプリで、キーコードとアクションを関連づけてるんで しゃれになりません。 バグレポートは投げておきましたが、なんでこんな基本的なバグが 何年も放置されてるんだと・・・
mac版はアップルが実装してるからなぁ・・・ VMが昔はたくさんあったが今は淘汰されてSunのばかりになったことも移植性があがった原因なんだよな しかしLinuxとWindowsは問題ないというのが歯がゆい
574 :
デフォルトの名無しさん :2007/06/27(水) 08:54:46
VEでjspinnerって入力できるの?
575 :
529 :2007/06/27(水) 09:21:07
577 :
574 :2007/06/27(水) 09:43:30
578 :
574. :2007/06/27(水) 09:56:55
連続質問すいません。 JSpinnerで入力した値を取得したらNullPointExceptionが出てきて困っています。 JSpinnerは JSpinner SP_Date = new JSpinner(new SpinnerDateModel(new Date(), null, null, Calendar.DAY_OF_MONTH )); SP_Date.setBounds(new Rectangle(147, 191, 113, 21)); SP_Date.setUI(new BasicSpinnerUI()); SP_Date.setModel(new SpinnerDateModel()); という感じで作成し、 String TestDate = SP_PurchaseDate.getValue().toString(); で取得しようとしているのですが…
setBounds・・・ゴクリ
>>578 JSpinnerの使い方間違ってね?
・JSpinnerのコンストラクタにSpinnerModel指定したのなら、setModel()は不要
・SpinnerDateModel使うのなら、モデルに対してgetDate()すればDate型で値もらえる
それと、変数名は小文字で始めようぜ。Javaの流儀だ。
581 :
529 :2007/06/27(水) 22:24:31
もはやSwingと関係ないんですが、MacのJavaでかなり衝撃の事実が 発覚したんで書きます。 new File("ががが.txt").createNewFile(); で作られるファイル名が「か゛かか゛゛.txt」になります。 あと、564に書いたことは間違っていて、 「ががが.txt」が「か゛かか゛゛.txt」と見えるのではなく、 Javaで「ががが.txt」を作ると「か゛かか゛゛.txt」が出来る、という話でした。 ひどすぎる・・・ Java6の場合、 new File(Normalizer.normalize("ががが.txt", Normalizer.Form.NFD)).createNewFile(); と書くと正しいファイルが作れましたが、多分Java5だと どうしようもないんじゃないでしょうか。 スレと関係なくてすみません。
普通に日本語使っただけでNormalizerが必要ってのもおわっとるな Mac対応はやめよう LinuxとWindows、Solarisだけでいいや
>>581 変な挙動だね……
ががががが.txt みたいに「が」の個数増やすと、どーなるんだろとか
がぎぐげご.txt みたいに濁点は付いてるけど別の字の場合とか
興味があったり
macオワタ\(^o^)/
585 :
529 :2007/06/27(水) 23:42:19
>>583 実験してみました。
がががが.txt -> ががかが?.txt
ががががが.txt -> ががかかが??.txt
がががががが.txt -> がががかかが??.txt
がぎぐげご.txt -> がぎくけご??.txt
がぱが.txt -> がはか??.txt(最後の「か」に半濁点付いた後に濁点があります)
がぱがぱ.txt -> がぱかば?.txt(最後のばの後に半濁点が付いてます)
なんか頭痛くなってきました・・・
586 :
529 :2007/06/27(水) 23:44:53
すんません、コピペじゃ駄目みたいなんで書き直します。 がががが.txt -> ががかが゛.txt ががががが.txt -> ががかかが゛゛.txt がががががが.txt -> がががかかが゛゛.txt がぎぐげご.txt -> がぎくけご゛゛.txt がぱが.txt -> がはか゜゛.txt(最後の「か」に半濁点付いた後に濁点があります) がぱがぱ.txt -> がぱかば゜.txt(最後のばの後に半濁点が付いてます)
>>586 ソースの文字コードだけど何使ってる?
コンパイルする時に、-encodingオプション指定すればよくなくね?
WinのコードとMacのコードは違うしそこらへんの問題じゃなくて?
String s = "\u304c\u304c\u304c\u002e\u0074\u0078\u0074"; System.out.println(s); new java.io.File(s).createNewFile(); をwinのJDK5でコンパイルして、バイトコードをmacに持っていってJDK5環境で実行すると、 println表示は「ががが.txt」だけど、作成されたファイル名は「がかが゛.txt」になるね。 macはサブで、あまり本格的にjavaでいろいろやったりしてなかったんで、 macのjava実装がこんなもんだということにちょっとびっくり。
>>580 ありがとうございます。
getDate()ですね。
あと、変数名おかしいのも指摘していただいてありがとうございます。
またひとつ質問があるのですが、
JSPinnerで 日付のみを表示することって可能でしょうか?
2007/06/28 00:00:00 という表示を
2007/06/28 という表示にしたいのですが…
590 :
588 :2007/06/28(木) 10:22:52
分解後のリテラル"\u304b\u3099\u304b\u3099\u304b\u3099\u002e\u0074\u0078\u0074"だと、 ファイルとして「ががが.txt」が生成されるけど、逆にwin環境では化けファイル名になる。 もしかしてmacでNormalizerを使って正しいファイル名を生成できたとしても、 それをwinに持ってきて正しいファイル名にはならない? うちはJDK5環境のままなんでNormalizer周りを確認できないけど。
>>590 > 逆にwin環境では化けファイル名になる
NFD使われた程度で化けるならWin側にも問題はあると思うけどね。
NFCが正しいユニコードってわけじゃないし。
まぁ、
>>586 のはバグだろうけど。
592 :
588 :2007/06/28(木) 10:46:23
>>589 JSpinner#setEditorを使って、
setEditor(new JSpinner.DateEditor(sp, "yyyy/MM/dd"))
名前欄が……orz
594 :
589 :2007/06/29(金) 00:15:08
>>592 ありがとうございます。できました。
でも次はデータを取得したらなぜかぬるぽになる・・・
sp.getValue().toString() とかやってみたのですが…
commitEdit しないと値が確定しないからぬるぽなんじゃね?
ソースさらさんとわからん
>>594 spがnullなのかsp.getValue()がnullなのか。
データ取得のタイミングが早過ぎてスピナがまだ構築されていないとか。
試しにこういうのを作ったけど普通に取得できたよ。
JFrame f = new JFrame();
f.setLayout(new java.awt.FlowLayout());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JSpinner sp = new JSpinner(new SpinnerDateModel(new Date(), null, null, Calendar.DAY_OF_MONTH ));
sp.setEditor(new JSpinner.DateEditor(sp, "yyyy/MM/dd"));
sp.setUI(new javax.swing.plaf.basic.BasicSpinnerUI());
f.add(sp);
JButton b = new JButton("A");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println(sp.getValue());
}
});
f.add(b);
f.pack();
f.setVisible(true);
598 :
594 :2007/06/29(金) 00:47:44
599 :
529 :2007/06/30(土) 10:08:36
遅レスですが。
>>587 ソースはShift_JISですが、.classファイル中では変換されちゃってNFCなUTF-8の
コードで記録されてるんで関係無いっぽいですね。
MacのファイルシステムはNFDでファイル名持ってるけどNFCのファイル名渡されると
NFDに変換するみたいなんですが、Java VMのそこら辺の実装にバグがあるっぽいです。
>>591 Windowsは最初っからNFCのファイル名のみを渡されるのが前提で、
NFDのファイル名をNFCに変換する機能とかが無く、NFDの濁点のフォントを持ってないんで
化けるみたいです。
まあ、仕方ないかと。
Appleに報告したら1日で返事が来て追加情報を求められました。
さすがにやばいと思ったんでしょうか。
あと、無理矢理Swingに話を戻すと、JTextComponentはNFCみたいなんで、
自分のアプリではファイル名はNFCで扱い、java.io.Fileを生成するときだけ
MacではNFDに変換するようにしました。
クラスファイル内のエンコーディングはUTF-8だったのか
>>600 だからsunのJDKの実装ではReaderのデフォエンコーディングがUTF-8なんだったはず。
602 :
デフォルトの名無しさん :2007/07/02(月) 17:46:19
JFrameから他のJFrameのボタンを押すことって可能でしょうか? 今AとBという画面を作って、Bに検索窓を作って、クリックした内容がAウィンドウのテキストフィールドに反映するように しているのですが、そこからさらにBウィンドウの「確定」ボタンを押すと、Aウインドウでも「確定」ボタンを押したのと同じ状況にしたいのですが…
普通にそのロジックが入ったメソッドを呼べばいいだけでは? イベントの中ではそのメソッドを呼ぶようにするだけ Swingの中で押したように動作させるという意味ならそのまま命令があるけど、APIマニュアルをよく見てみよう
604 :
594 :2007/07/03(火) 11:12:10
>>597 すいません、spがnullになってしまいます。。。
EclipseでgetJContentPane()に自前で以下のコードを追加したのですが…
JSpinner sp = new JSpinner(new SpinnerDateModel());
sp.setUI(new BasicSpinnerUI());
sp.setEditor(new JSpinner.DateEditor(SP_checkDate, "yyyy/MM/dd")) ;
jContentPane.add(sp);
そして、ボタンを押したときのコードはこれです。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date spData = sdf.parse(SP_checkDate.getValue().toString());
なぜかspがnullになっています。。。
>>604 Swingの前にJavaの勉強した方がいいぞ。
>>597 のコードを、お前のコードにそのまま埋め込んでもダメ。
意味を理解しろ。
JSpinner.DateEditorのコンストラクタの引数は、
setEditorを呼び出すJSpinnerオブジェクトを指定する。
>>604 では、JSpinner.DateEditorのコンストラクタで指定したJSpinnerと
setEditorを呼ぶJSpinnerが異なっている。
それと、以前のアドバイスをまるで無視してるな。ちゃんと読んでるか?
SpinnerDateModel#getDate()でDate型で取得できると言われたのに
無駄にSimpleDateFormat使ってDate→String→Date変換してるし、
変数名があいかわらず変だったりするし。
606 :
594 :2007/07/03(火) 13:46:28
>>604 変数名の修正が中途半端になっていました・・・すいません。
Date型で取得せずにStringで取得してたりダメダメなので、もう一度出直します…
608 :
デフォルトの名無しさん :2007/07/03(火) 17:16:40
VisualEditorでのデフォルトのフォントって変更できますか? いつも太字のDialog,12を手動でぽちぽち変更しているのですが…
実行時だけ素敵になれば良いのであれば
>>483 辺りを参照するヨロシ。
commonsのsmtp関連って使っているひといますか? 使おうと思ったけどエンコード思うようにいかなくて javax.mailの方に手を出したら結局そっちだけで用が済んでしまい わざわざcommons使うまでもなかったっていうか・・・
誤爆しますたスマソ
612 :
594 :2007/07/04(水) 12:11:32
やっと取得できるようになりまいた!! DataModelが必要だったのですね… ちゃんと読んでなくてすいません。ありがとうございます!
>>609 やっぱりVE上でもヨロシくしたかったのですが…
VE以外のGUIエディタなら可能?
614 :
デフォルトの名無しさん :2007/07/04(水) 16:25:33
eclipse+swingでGUIをふんふんふん〜って作っていて、 いざエクスポートして、問題なく起動でしたと思ったら、 なぜかDBとの通信に失敗している。 エラー内容をみるとjava.lang.NullPointerException 開発時には普通に実行できたのに、 jarにエクスポートしたらDBと通信できなくなる場合ってあるのでしょうか? JDBCはちゃんとclasspathがあるとこに置いてます
だからその例外が発生している場所をさらさんとダメだとなんど・・・
>>614 Swingというかスレ違いな気がするが、一応回答。
実行可能jarから起動すると、CLASSPATHや-classpathオプションは無視される。
代わりにMANIFEST.MFのClass-Pathエントリに書くこと。
これ以上の助言が欲しかったら、その例外の発生箇所を加えて
Java質問・相談スレに行け。
>>616 無視されないよ
なにわけのわからんことを・・・
>jarにエクスポートしたらDBと通信できなくなる場合ってあるのでしょうか? ある
クラスが見つからなかったらふつうは、NoClassDefFoundだろ・・・
>>614 eclipse使ってるなら、jarファイルをデバッガ経由で起動してみたら?
620 :
614 :2007/07/04(水) 18:56:44
>>616 いけましたよ!! ギガントありがとう!!
-jar使うのかよ 普通は使わんし、使うならマニフェストファイルに書くの普通だろ Swingと何も関係ないやんか
ダブルクリック起動なんて使い物にならんよ オプション設定できないから
Windows Explorerを否定する617=622=624に脱帽
最近のGUIシェルならむしろダブルクリックで 関連付けされたプログラム実行の方が一般的だろ。 自分を正当化してかみつきたいだけの馬鹿はスルーしとけよ。
> 625-626は624のいいたいことわかってるのかな
そのソフトがGUIなら起動後にオプション設定して再起動が今じゃ普通だが それを回避するためにコマンドライン引数受け付けるのもあるけど、あくまでも救済処置だろ。 今となっては。
>629は、わけがわかってないと見た。
>>629 たぶんアプリケーションのオプションではなくJVMオプションの類の話をしてると思われる
関連付けでオプションも設定しておけばいいんじゃね?
起動するときにアプリにオプションを渡さないといけないのはCUIでGUIではあまりないと思うが
JavaのVMは別
オプションといってもVMのオプションね。
システムプロパティを指定する-Dや、
VMの種類を選択する-clientや-serverとか、
メモリ割当プールの最大最小サイズを指定する-Xmxや-Xmsなど。
今のところ、実行可能Jarをダブルクリックでは、
これを個別指定することはできない。
まあただ、-clientや-serverはCPUやアーキテクチャによって
自動選択されるし(おおよそではあるけど)
-Xmxと-Xmsも、Java6からは規定値が64MB/2MBではなくなり、
物理メモリに応じた値に変わるようになった。
ttp://java.sun.com/javase/ja/6/docs/ja/technotes/guides/vm/gc-ergonomics.html -Dやその他のVMオプションは無理としても、
実行可能Jarの手軽さを全否定するほど、使えないってことは無いと思う。
GUIアプリほどオプションが必要。 SwingやJavaの動作が速くなったとはいえ、デフォではGCによる停止時間が長すぎるので 使い物にならないのさ。 あくまでも快適に動くアプリはチューニングされたオプションが前提。 マニフェストファイルにオプションがかけないのでここは厳しいんだよな。 WebStartもメモリだけしか対応してないので厳しい。 普通の人は2,3秒もGCでGUIがとまってたら使わないと思う。
>>635 6では単純なサーバークラス検出動作からかわったの?
わかった。 VMのチューニングしないとまともに動かないような、リッチでヘビーなGUIアプリはお前に任せる。 俺は、VMのチューニングが不要な、チープでライトなアプリ作って、実行可能jarで配布するよ。 ところでV2C使ってると、クライアントサイドJava & Swingもいいもんだと思えてくる。 もっとも、あれは作者さんのがんばりに寄るところが大きいのかな。 HTMLビューアは自作してるそうだし。
V2CだってデフォだとGC時にあほみたいに重くてつかえんだろ・・・
GCが一瞬で終わるウチの環境はハッピーなんだな。 ガンガレ639。お前には未来とVMチューニングがある。
デフォでGCで2,3秒とまるって、どんなアプリをどんな環境で使ってるんだろう? Swingで最重量級といえるNetBeansでも、そんなに止まることはないが。
とりあえずOSはWindows 98だろうな。
IntelCore+XPでNetBeans5.5.1も2,3秒とまるよ コンカレントGCに変更すれば大丈夫だけど
メモリがバカみたいに少ないんだろうか
メモリは1.5GBだーね glassfish立ち上げたりDB立ち上げると1GBじゃたりないよね NetBeansはデフォだとまったくメモリが足りないから増やしてるさ もしかしてみんなヘビーにNetBeansつかってないの?
ヘビーに使ってるよ。最近2GBじゃ足りない。 いや、コンカレントにするより、分散GCの周期を1分から延ばすのと スループット並列GCにする方が快適だったりするかもしれないぞ。 でもIDEのVMとアプリケーションサーバのJVMは分けるよ。 違う性質のアプリなんだから分けた方がチューニングしやすい。 って何の話になってるんだ。 V2Cは、多分に作者さんのコーディングの腕で快適になってるんだと思う。
>>646 遅いのはFullGCだけだからFullGCがでなければそれでいいのさ
GCチューニングはJavaでゲーム作ったりしてテストしてるから大丈夫
5ms以下にしていれば体感的に問題はないかな
メモリが多いとパラレルがわりと有効だけど、パラレルにするとスループットはいいけど、
レスポンスが大幅に低下するから、使う場面が結構難しい
マルチコアだからパラレルでいいというよりはGC用にずっとコンカレントだけ動かしてるほうが
いい場合も多いかな
まぁ、バックグラウンドコンパイルとかもあるし、AP鯖やDB鯖も起動するからIDEだけにフルにまわすわけには行かないからね
最近はVM系もよく使うからなおさらかな
ところでAP鯖とIDE、デバッグ起動とそれぞれVMは自動的に分かれるよね?
Tomcatだってデフォだとメモリ少ないし-Xmxいれないとまずうごかん
あーSwingがもはや関係なくなってしまった
>645 glassfishとJavaDBはNetBeansと違うVMで走るよ。
glassfish走らせようがJavaDB走らせようが、GCには関係ないってことだ。
>>650 マルチプロセスでの動作を考慮ってことだろ。
とりあえずSwing関係ねーから他所行けや
653 :
デフォルトの名無しさん :2007/07/24(火) 12:16:09
eclipseを使ってGUIをつくりたいんですがサンプルファイルの import javax.swing.*; public class Sample1 extends JFrame{ public static void main(String[] args){ Sample1 frame = new Sample1(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds( 10, 10, 300, 200); frame.setVisible(true); } } という簡単なものを表示してみようと思ったのですがサンプルどうりに300,200の 大きさのウインドウが表示されず左上隅に小さいウインドウが表示されるだけです. なぜこうなってしまうのでしょうか?
654 :
デフォルトの名無しさん :2007/07/24(火) 13:30:36
こちらの環境では上手く動いてるっぽいよ。OSはXP。 java version "1.6.0_02" Java(TM) SE Runtime Environment (build 1.6.0_02-b06) Java HotSpot(TM) Client VM (build 1.6.0_02-b06, mixed mode, sharing) 気休めだけど setLocation(int, int), setSize(int, int) とかも試してみたら?
>>653 Swingではやってはいけないコーディングなのがきになるが、それどこのサンプルなの?
>655 なんかまずいか?
657 :
デフォルトの名無しさん :2007/07/24(火) 14:22:08
setMaximumSize, setMinimumSize, setPreferredSize, setSize
import javax.swing.*;
public class Sample1 extends JFrame{
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Sample1 frame = new Sample1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds( 10, 10, 300, 200);
frame.setVisible(true);
}
});
}
}
ウインドウマネージャ次第でフレームは再配置やリサイズされるかもしれないしな。
>>658 のようないろいろなヒントをマネージャに与えれば言うことを聞いてくれるかも。
660 :
デフォルトの名無しさん :2007/07/27(金) 00:38:57
ボタンを押すなりしてイベントが発生したときにコンポーネントの大きさや 位置を変えたり、非表示だったのを表示するようにしたりしているのですが、 大きさと、位置が変わってくれません。 デバッグしたところ正しい値はコンポーネントのプロパティに入っているようなの ですが、、、
画面リフレッシュしてる?
たぶんpackとかもわからないんだろうなぁ
何のLayout使っているのかも重要だから書かないとな
モーダルなJDialogをsetVisibleする場合は、invokeAndWaitを使えばよいのでしょうか?
>>664 invokeLaterでええやん
例えばボタンとかを押してActionListener#actionPerformedを呼んで
その中からJDialog#setVisibleするのならinvokeAndWaitは使えない
>>664 使わなくてもいいよ
AWTスレッドなら
やりたい事 ・BufferStrategyを使って描画 ・フルスクリーン表示 ・メニューの表示 CanvasでBufferStrategy使って描画、Canvasを含むJWindowをフルスクリーン表示 フルスクリーン画面でJPopupMenuを表示するとCanvasの描画が走るタイミングでJPopupMenuが消える JPopupMenuをJInternalFrameで実現してJDesktopPaneとの組み合わせにしてもダメでした。 BufferStrategyを使わなければ実現出来るのに・・・。 ゲーム作ってる人で同じ悩みに直面した人いませんか?
>>667 JPopupMenu#setLightWeightPopupEnabled(boolean) で false にしろとかって話でなくて?
>>668 はやり、消えます。
BufferStrategyからgetDrawGraphicsしたGraphicsでMenuを描画すれば良いのでは
と思いついたのですが描画は出来ても機能せず。
フルスクリーンじゃない時はMenuがCanvasの上に表示されるので
フルスクリーン+BufferStrategyの組み合わせがどうにも悪いのかなと・・・。
だからお約束のようにAWTとSwingまぜるなと
671 :
デフォルトの名無しさん :2007/07/31(火) 14:10:17
>>670 JWindowからcreateBufferStrategyしてもダメでした。
JPopupMenuがSwingだからこれを使ってはダメ
673 :
デフォルトの名無しさん :2007/07/31(火) 14:34:53
>>672 部品を全てawtに統一しJPopupMenuの変わりにDialogを使用したところ無事実現できました。
事象が上手く理解できていないので今からソースを見て理解を深めたいと思います。
ありがとうございました。
Swingってのはフレームから下を全てSwingフレームワークによってソフトウェア描画する AWTってのは各種OSなどに描画を任せる 混ぜるな危険ってのはそういうこと Swingコンポーネントを使いつつBufferedStrategyが使いたいという用途はあまりないと思うので その場合はSwingフレームワークにあわせること ゲームなどでBufferedStrategyは使うと思うが、メインループスレッドからバックバッファに描画、 その後repaint発行でいける この場合注意すべきポイントはrepaintはいつ呼ばれるかわからないということ つまりトリプルバッファのようにバックバッファが最低2つは必要になる BufferedStrategyなどでゲームに特化した話題ならゲーム製作板へどうぞ
>>667 BufferStrategy の原理上そうなると思う.
昔ちょっと試したときの結論はゲームにメニューバーは付けない(そもそもかっこわるいし)で
ゲーム内にメニューを実装する,でした.
AWTでしか実現できない機能なんてあんのか〜、しらなんだわ。
GLCanvasもそうだけどいわゆるハードウェアべったりな動作を期待したい場合AWTを使うしかない この仕組みを変えるためにはSwing自体大幅にパイプラインをかえないといけない で、JOGLに関してはJavaSE6でそうなる予定だったのだが、不具合のためOFFになってしまった そろそろ標準でJOGLついていてもいいと思うけどね まともに3D動かそうとすると必須だし
swingとawtのFPS比較サイトとかあれば良いのにな。
ゲームの話か? 描画内容を反映させるのにBLITが必要なく、垂直同期が取れるAWTのほうが有利 JNIによるダイレクトなレンダリングも期待できる GUIコンポーネントというのならSwingのほうが将来的にも拡張性的にも有利ではないかと
というかBufferStrategyのdoc読んだら重量には効かないのが分かるだろ。
>>677 このバグ自体は昔からあるけどいざ、潰してみたらVGAドライバ由来の物だということが分かったので当分無理。
だから途中でデフォルト無効になったんだし。
これさえ直ればちゃんとGLPanelがつかえるんだよ。
せっかく、JOGLがjavax.*まできたのに・・・。
JOALも標準拡張にしてやってくだせぇ。
ミドルレンジ以上のサウンドカードじゃないとOpenALまともにサポートしてないから無理かな?
ところでJava3DとJOGLのちがいってなに?
(そのレベルなら)なに気にすることはない。 自分で調べろや
ImageからBufferedImageへの変換ってどうやるの?
>>683 BufferedImage→ Graphics→drawImage
これで分からなきゃ初心者スレ行ってくれ
687 :
デフォルトの名無しさん :2007/07/31(火) 22:06:50
JTableで編集中のセルの行インデックスを取得する方法ありますか?
ファイルからロードしたImageだからgetGraphics()でnullになるんだけど、どうすれば・・
>>687 APIに載ってるんだが、なんで調べないの?
つ getEditingRow()
>>691 まだmacはJDK5だと言うのに・・・。
そうだったのかw あんまバージョンアップが早いと リタイヤするOSが増えそうだな FreeBSDも5だっけか
>>692 6の開発者向けプレビューが去年から更新されてないんだよね。
たぶん4月にはLeopardと一緒に正式リリースを目論んでいたんだろうけど、
Leopard10月になっちゃったし。
>>683 BufferedImageってImageインターフェースもってるだろ?
BufferedImageにすってことはどれだけ情報がうしなわれるとか考えた?
去年JOGLは1.0がリリースされGLCanvasは現実的に使えるようになった Windows版しかみてないが、ネイティブ版の8割くらいの速度で動くと思えばよい 1.0GHzで動いていたのと同じように動かすためには1.2GHzくらいが必要 Java3Dはかなり前に試したが、とにかく遅くて使い物にならないことや高レベルすぎるんじゃないかな ゲーム以外ならJava3Dでいいのかもしれないけど
JOGLだとOpenGL専用で、どこでも使えるJavaっぽくないけど、 これ自体がオプションパッケージだから、依存性が強くてもいいのかもしれない。 Java3Dがまだこなれてないんじゃ、しようがないね。
>>695 Image.getGraphics()がアンサポート例外出すのがやなんだけど
>>699 OpenGLはWindowsやLinux、Solarisなどで動くオープンなAPIだよ
Java3Dは実装選べるけど結局OpenGLかDirect3Dかの二択だしプラットフォームはかわらんよ
sunが自前で全部実装ってのは無理
ビデオチップベンダとの協力が必要だから
>>700 オフスクリーン以外で実行したらそれがでるのは正しい動作
それにImageなんて抽象クラスなんだから実装はさまざまだ
開発者側で混ぜるな危険をなんとか言ってるのはJava3D/LG3D関係か? てかJOGL1.0はもう古い。今は1.1.0。 java2DをJOGLのテクスチャに合成するutilが追加されてる。 1.0までだとここらへん自力でやらないとだめだったけど今なら java2Dで描画できるもんならなんでもJOGLに持っていけるようになったからフォント描画も楽になった。 ビルボード上にテクスチャ貼ってスプライトさせるなら自分でやった方が効率よさそうだけど。
>>703 1.0からできるっしょ?どっかかわった?
混ぜるな危険はSwingがでたとき、1.1時代からいわれてるよ
>>699 何言ってんだ?JOGLもJava3DもOpenGL使ってるだろ。
それに両方、標準拡張。
万人が使うわけじゃないからJREから外されれてるだけ。
そこらのJNI使った拡張機能とはわけが違う。
>>704 そうじゃなくてoffscreen renderingの問題だよ。どうにかなったのこれ?
昔から言われてるのは常識だろ。
>1.0からできるっしょ?どっかかわった?
javadoc嫁
>>706 落としてきてあるのだけは確認した
com.sun.opengl.util.j2dパッケージが追加されたのか
いままでもJava2Dからのテクスチャ生成ができたけど、これは動いてる最中も反映されるんか?
毎回getTexture必要になるっぽくみえる
今週末久々にJOGLいじってみるか
問題は激しくすれ違いなことだがJOGLのスレってなかったか
なるほど。ためになった。
>>707 JOGLにしかない機能・作法が意外とあるのにどこいってもJOGL専用話してる所がないんだよ。
JOGL紹介サイトでもOpenGLの教本に書いてあることくらいしか書いてない。
jogl-demosのソースか洋書あたるのが近道。
国内はJava3Dだらけだ。
710 :
デフォルトの名無しさん :2007/08/01(水) 08:39:42
良スレの予感。
>>709 JOGLって作りこみの部分に入るとOpenGLまんまだから迷うことはないけど
たしかにそのセットアップとかTipsとかそういう情報ゼロに近いね
一方JavaのゲームではJOGLしか選択の余地がないから非常に悩むところ
Java2Dのアクセラレーション範囲が狭いことに加え、アルファブレンディングの種類が足りなすぎる
おかげで2D描画もOpenGLが必須になるという・・・
今気がついたんだが「LayoutManager2」なんてクラスがあるんだな。 本当にこんなネーミングで良いのか?
クラスというかインタフェースだけどな 配置の制約情報オブジェクトをコンポーネントに関連付けるメソッドが追加されたLayoutManager ネーミングについては確かに投げやりだな
SAX2.0なんて2がつくの結構あるぜ
715 :
デフォルトの名無しさん :2007/08/02(木) 01:26:14
>>712 そりゃたしかに投げやりなネーミングだな。ひどい
じゃあどんな名前ならよかったんだ? - AdvancedLayoutManager - ExtendedLayoutManager - SuperLayoutManager - LayoutManagerGreat - 続・LayoutManager
LayoutManager4.0 アナログ的に配置指示
718 :
デフォルトの名無しさん :2007/08/02(木) 10:30:35
>>716 続・LayoutManager に一票
ボーランドのライブラリは2がつくのたくさんあったな
Extended とか付けたら、もっかい拡張したくなったら名前に困るじゃん。 数字なら 3 とか 4 にすればいいだけで楽。
10以上行くと ソートした時に XX XX10 XX2 XX3 . . ってなりそう。
Win32 API の 〜Ex は辛かった。〜2 もどうかとは思うが。 そろそろ Swing そのものを根本的に整理して欲しい時期だねえ。
Swingで一番やってほしいのが ・定数のenum化 ・コレクションフレームワーク利用 ・generics利用 ・OpenGLパイプライン有効 で作り直してほしいな 互換性とるのは無理だからパッケージをかえてな
新パッケージ名はjavax.swing2だなw
javax.続・swing パッケージで…
726 :
デフォルトの名無しさん :2007/08/02(木) 19:09:32
JOptionPaneのmessageTypeで指定すると表示されるデフォルトアイコン群は 他のクラスで利用出来ないものでしょうか?
>>726 ひどい方法
class IconRevealer extends BasicOptionPaneUI {
public Icon getIcon() { return super.getIcon(); }
};
IconRevealer foo = new IconRevealer();
new JOptionPane(null, JOptionPane.INFORMATION_MESSAGE).setUI(foo);
//new JOptionPane(null, JOptionPane.ERROR_MESSAGE).setUI(foo);
//new JOptionPane(null, JOptionPane.QUESTION_MESSAGE).setUI(foo);
Icon icon = foo.getIcon();
JOptionPane#getIcon()やiconフィールドはsetIcon()で設定した時用だったんだな
729 :
728 :2007/08/02(木) 20:21:29
ソースを眺めるとこう単純にできるがさらにアンドキュメンティッドなひどい方法だ String propertyName = "OptionPane.errorIcon"; //String propertyName = "OptionPane.informationIcon"; //String propertyName = "OptionPane.warningIcon"; //String propertyName = "OptionPane.questionIcon"; Icon icon = (Icon)sun.swing.DefaultLookup.get(new JOptionPane(), new BasicOptionPaneUI(), propertyName);
UIManager.getIcon("OptionPane.errorIcon");
素でUIManagerのことを忘れてたorz BasicOptionPaneUIはUIManagerを介さずに直にsun.swing.DefaultLookupを呼んでるんだな
UIManagerで使うキー文字列も明文化されていないから 変えられても文句いえないんだよな。 こーゆーところはpublicな定数なりenum(は増えるから無理か)を 使ってあれば安心して使えるんだが。
733 :
726 :2007/08/03(金) 16:54:32
ありがとうございます。 昨日は諦めてアイコンを作ってましたが 使わなくて済みそうです。
あの辺のアイコンデータのライセンスってどうなってるんだろうね? 再配布可能なライセンスならアイコン自体もらってアプリに組込めば 明文化されてない使い方しなくてもすみそうなんだけど…
737 :
735 :2007/08/04(土) 00:38:56
・・・でもよくみたらJOptionPaneのアイコンは入ってなかったね。ごめんよ。
>>737 ほんとだ… インフォメーションアイコン(丸に"i"のやつ)とかあるから
同じかと思ったら別のアイコンだ…
BufferedImage.TYPE_INT_ARGB BufferedImage.TYPE_INT_ARGB_PRE よく_PREってついてるのあるけど、どう違うの?
それは premultiplied alpha 。 RGB 各成分に A 成分が乗算済みであるフォーマット。 例えば 70% の不透明度で描画するとき通常 result = dst * 0.3 + src * 0.7 とやるわけだけど、 _PRE は A 成分が乗算済みだから result = dst * 0.3 + src で済む (src が _PRE で dst がそうでない場合)。
よくわかった。ありがとう。
問題はSwingと関係ない話だってことだな
まぁ、こっちで聞くのは正解な気もするがw
AWTのスレってあったっけ?
ない
>>740-743 Sunのチュートリアルには無かったけど、そういう話(話題)ってどこを参照すればいいの?
できれば日本語で。
Java2Dのスレを立ち上げる
まぁわかりにくい表現だとは思うが API以前に画像の基礎知識つけたほうがいいんじゃね? GUIがわかってない人がSwingのマニュアル見てもわからないのと同じように
画像処理というよりも、単に画像ファイルを読み込み、コピー、保存する程度。 ImageIOではなくて。
752 :
デフォルトの名無しさん :2007/08/06(月) 19:25:43
独自のポップアップメニューを表示するにはどうしたらいいのでしょうか? たとえばExcelの色選択メニューみたいな。 枠ナシJFrameを使うとタスクバーに出たり、ウィンドウがちらついたりします。
普通の JPopupMenu に独自のコンポーネントを add してみるとか。 単に JPopupMenu のレイアウトマネージャを変えてみるとか。
glasspane使うのが正解じゃね?
JWindowはどう? (色選択ならJColorChooserからコンポーネントもってくれば)
756 :
752 :2007/08/06(月) 21:35:43
JWindowがよさそうですが、よそがクリックされたらウィンドウ閉じるようにするにはどうするのがいいんでしょう? JFrameのときは、windowListenerのwindowDeactivatedでdisposeしてました。
>>756 その「よそ」って何?
「よそ」が他のコンポーネントならそのコンポーネントのイベントを拾って閉じればいいじゃん。
758 :
デフォルトの名無しさん :2007/08/07(火) 08:50:35
>>757 最初の質問に書いたとおり、ポップアップメニューを作りたいので、よそというのはメニュー以外のことです。
では、元のウィンドウのタイトルバーや、プログラム管理外の領域がクリックされたときのイベントはどうやってとればいいでしょうか?
759 :
752 :2007/08/07(火) 09:35:06
プログラム管理外の領域のクリックは、元ウィンドウのwindowDeactivatedでとれました。 あとは、タイトルバーのクリックがどうにかなれば
JPopupMenu popup = new JPopupMenu(); popup.add(new JColorChooser()); component.setComponentPopupMenu(popup); でよくね? # JPopupMenu isa JComponent
761 :
752 :2007/08/07(火) 10:21:52
DelphiでいうところのPaintBoxみたく paintComponent(Graphics g) にクロージャを引っかけることができるような カスタムペイントコンポーネントって、ないの? 今はふつー(??)に、JPanel の派生クラスをつくってる。
ない。 ふつーは JComponent から派生する。
PaintBoxとpaintComponent(Graphics g) は動きがまったく違うと思うのだが
SynthでTabbedPaneを画像読み込んでうまく描画できた人いる?? SynthPainter#paintTabbedPane****をオーバーライドして描画してやらんとどうにもならない・・・ xmlだけじゃTabはだめなんかねー?
SynthのJTabbedPane関連は昔大量のバグがあったからバグを潰しきれていないのかもしれんね
やっぱりそのようですね・・・ これからも更新してくれるのかなー どうも7はそれどころじゃなさそうですけどw 諦めて自分で描画します!ありがとうございましたー!!
769 :
デフォルトの名無しさん :2007/08/21(火) 14:47:56
BufferedReader fin = new BufferedReader(new FileReader("File.txt")); while((line = fin.readLine())!=null){ line=line.replace("Direction",Direction); textArea.append(line); textArea.append("\n"); } fin.close(); } のようにしてFile.txtの中身を1行ずつTextAreaに書き込んでいるのですがものすごく 時間がかかってしまいます.ファイルの中身をもっと簡単にTextAreaに書き込む方法はないのでしょうか? どなたか教えてください.
1行ずつが遅いなら、全行一気に入れればいいんじゃない? StringBuilder stringBuilder = new StringBuilder(); BufferedReader fin = new BufferedReader(new FileReader("File.txt")); while((line = fin.readLine())!=null){ line=line.replace("Direction",Direction); stringBuilder.append(line); stringBuilder.append("\n"); } textArea.append(stringBuilder.toString()); fin.close(); }
>>769 BufferedReader fin = new BufferedReader(new FileReader("File.txt"));
textArea.read(fin, null);
fin.close();
textArea.setText(textArea.getText().replace("Direction", Direction));
ではだめなん?
>>771 だと元の内容を書き潰すから、
String prev = textArea.getText();
...
textArea.insert(prev, 0);
で
ダイレクトバッファ使えばもっと早くなるんじゃない
コード複雑にするだけじゃないか?
そう?
>>771 のコードの前に4〜5行追加すればいいだけじゃないか
APIリファレンス引っ張ってくるのが面倒だから、やり方だけいうと、
ファイルをメモリマッピングして、マッピング用のストリーム生成して、
そのストリームをBufferedReaderの代わりに使えばいい
ファイルI/OじゃなくてTextAreaが遅いんでしょこの場合 無駄な労力と思われ
メモリマッピングされたファイルからテキストを取得するドキュメントモデルを実装して、 TextAreaに渡せばいいじゃない 処理が遅いのは内部でStringの生成を繰り返しているせいかと
778 :
デフォルトの名無しさん :2007/08/21(火) 22:46:21
まあそこに行き着くだろうけど、
>>769 には無理だろ。
JTextAreaじゃないからモデルとかないんじゃ?
え?ここSwingスレだから普通にJTextAreaなんじゃないかと思うが・・・・
JTextArea前提で話してるとばかり思っていたんだが・・・。
JKTextAreaだお
サムネイルビューって簡単に作れるっすか? JListはサムネイルビューにはならんよねぇ?
縦横に並ぶような? JList#HORIZONTAL_WRAPって使ったことないけどどうだろう
JListで画像はどうやって表示するのくわ? JTableの方も試してみるか
画像を表示するリストセルレンダラを作る 以下のようなものをどうぞ class ImageListCellRenderer extends DefaultListCellRenderer { public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRenderer(list, value, index, isSelected, cellHasFocus); if (value instanceof Image) { setText(null); setIcon(new ImageIcon((Image)value)); } return this; } } list.setCellRenderer(new ImageListCellRenderer());
>>787 神様ありがとう!サムネイル表示できたよ!
Mistralも試してるからこんなんなったけど。 つーか、EditableImageからImage取得できるならImageだけでもいい気がしてきた public class ImageListCellRenderer extends DefaultListCellRenderer { public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); if (value instanceof Image) { setText(null); setIcon(new ImageIcon((Image) value)); } if (value instanceof EditableImage) { setText("test"); ImageModel im = ((EditableImage)value).getImageModel(); ImageIcon imc = new ImageIcon((Image)im.getImage()); setIcon(imc); } return this; } }
791 :
デフォルトの名無しさん :2007/08/25(土) 15:17:39
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JComboBox cannot be cast to java.awt.Button at GUI.actionPerformed(GUI.java:308) at javax.swing.JComboBox.fireActionEvent(Unknown Source) at javax.swing.JComboBox.setSelectedItem(Unknown Source) at javax.swing.JComboBox.setSelectedIndex(Unknown Source) at javax.swing.plaf.basic.BasicComboPopup$Handler.mouseReleased(Unknown Source) at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at javax.swing.plaf.basic.BasicComboPopup$1.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) こんなエラーがでて困ってるんですが何が原因かわかる方いますでしょうか?
JComboBoxはButtonにキャストできません・・・。
読んで字の如くの例外ですね。 もう少し具体的にソースなど挙げないとなんとも言えません。
java.lang.ClassCastException: javax.swing.JComboBox cannot be cast to java.awt.Button
インスタンスチェックしてないんだろ
796 :
デフォルトの名無しさん :2007/08/25(土) 15:50:20
インスタンスチェックってなんですか?
自分が作った GUI とかいうクラスの actionPerformed メソッドの中で Button じゃないものを Button にキャストしてるんだろ コードさらしてみろ
JTreeのノードのコピペを、右クリックポップアップメニューの操作でやろうと思ったんだが。 ポップアップメニューをクリックした時に、TransferHandlerへ Ctrl+C、Ctrl+Vの時と同じ通知をしてやりたいんだが、どうやってやればいいんだ?
>>798 TransferHandlerのjavadoc読んで分からんなら諦めろ。お前には無理だ。
各拡張子に関連付けられたアイコンを取得する方法ってあるかい?
あるけど、ドキュメント化されてたっけ?
FileSystemView#getSystemIcon とかかな
>>802 おう、取得できたぜ!
だがしかし、小さいアイコンが取れた。
大きいアイコン取れるようにがんばってみるぜ
>>803 Swing だけじゃ、大きいアイコンは取れなかったはず。
大きいアイコン取りたい場合は JDIC、jconfig みたいなライブラリ使うか、JNI かな。
sun.awt.shell.ShellFolder 使えば取れるかもしれんけど、内部ライブラリだから、
メソッドが変更されたり無くなったり、クラスそのものが無くなったりしても文句言えない。
>>804 マジッスカー
チューザーが使うアイコンって言葉にちょっと引っかかってたんすけどね。
ほな、今は諦めて別の作業しまっすー
>>799 javadoc読んで分からんかったけど、Tutorialにサンプルプログラムあったのね。
親切にありがとう。
テキストを縦書きに出力するにはどうしたらいいのですか?
808 :
807 :2007/08/26(日) 06:49:13
追加 paintComponentの内部でのGraphicsのインスタンスを使ってテキストを縦書きに描画したいんです。 普通のdrawStringだと横書きになってしまいます。
>>807 Swing だと自前でやるしかない。
java.awt.Component#setComponentOrientation(ComponentOrientation)
java.awt.ComponentOrientation#isHorizontal()
ってのが使えそうなんだけど、これ縦書き用のインスタンス持ってないから。
OSが縦書き用フォント持ってれば
縦書き用フォントから字形ひっぱってきて 90度回転させて表示するとか、
もしくは横書き用フォントから字形ひっぱってきて
英数文字や鍵括弧のように90度回転させるか
日本語のように縦書きするか決めてながら、自前で再配置するとかしないとダメ。
フォントから字形を引っ張ってくるには
java.awt.Font#createGlyphVector
java.awt.font.GlyphVector#getOutline
回転させるには
java.awt.geom.AffineTransform#getRotateInstance
java.awt.geom.AffineTransform#getTransformedShape
あたり使え。
AttributedCharacterIterator とかの書式付きでやりたいなら
GlyphVector の代わりに TextLayout 使うと便利。
描画前にJava2Dで文字を90度回せばいいだけ。 んであとは位置指定して文字描画。
皆、頭を横にして読んでるんだ
>>809 Windowsの @MS ゴシック みたいな VHEA とか VMTX とか見て作ってるフォントは
VHEA とか VMTX 無視する Java の、っつーか Sun の JRE が持ってるフォントレンダラでは
扱えないんじゃなかったっけ?
縦書きって専用フォントじゃないとカギカッコとか句読点とか再配置面倒なんだよね。
813 :
807 :2007/08/26(日) 15:00:03
>>809 どうもありがとうございます。
しかし自前でやるしかないんですか。大変そうですね。
swingの話題とは違うっすけど、windowsのデスクトップのpathを取得する方法を教えてほしいっす。
環境変数からとる方法↓は思いつくけど、スペシャルフォルダ指定でとるのが筋だろうなぁ System.getenv("USERPROFILE") + "\\デスクトップ"
WSH使ったほうがいいだろうね
JAVAでよう、フルスクリーンにするのにsetUndecoratedを使おうと思ったんだけどよう これって、すでに動いてるフレームには使えねえのな。 なんか、動的にやっちゃう方法はないのか
>>818 フルスクリーン用にフレームを作って元のフレームの中身を入れる…とか?
>>819 いんや、そこまで本格的じゃないの。
コンテンツ領域をダブルクリックしたら、窓枠とタイトルバーのないウィンドウを最大化で表示する感じ
>>820 コンストラクタに元のフレームを突っ込んで、中で変数をわっしょいわっしょいしてやったぜ
次のJAVAでは動的なフルスクリーンとかサポートされるといいなぁ
枠消しは確かisDisplayable()がfalseを返す必要があって setVisible(false)とdispose()の後で設定し、setVisible(true)にする感じだったかと。 昔試した記憶なんで定かではないが
dispose → setUndecorated → setVisible で出来たよ
>>823 それって質問者の解決になってないんじゃない?
動いているものってのがリソースの破棄を示すとはおもえんし
とはいえ
>>821 のコンストラクタでというのはナンセンスすぎ
モデルと分離するのがよかろう
>>821 の場合、カスタムWindowクラスをスクリーンサイズいっぱいに広げればいいんじゃない?Frameじゃなくて。
通常フルスクリーン化したい場合ってのは解像度を固定化させたいとか フィルレート稼ぐためとかだな
javaでもアクセラレータさえ効けばフルスクリーンとかでハードウェア支援受けれるんだが・・・バグがorz
DirectXならアクセラレーションきいてるよ ほんの一部のblitとかしかきかないけど
あと、ページフリッピングもちゃんと動く 逆にJOGLだとフルスクリーン時問題がでることがある
>>829 kwsk
JOGLフルスクリーンにできないの?
>>830 やってみればすぐわかる
解像度変更しなくてもフルスクリーン化しただけでダメだよ
GLJPanelのほうならいくけど遅くて実用性ないし
あのバグ、Swingと同じでVGAのドライバ由来のバグじゃなかったっけ? あと、JOGLはドライバによっては実行中に突然コケる。 そういうドライバは大体、ライダーに変身しそうな勢いでファンが回り続けるけど・・・。
>>826 ただたんに画面いっぱいに表示したいだけだからエセフルスクリーンでいいんだな
>>824 おう、そうすりゃちょっと気分もコードもスッキリするな
>>833 なら5だったか6だったかで新しく実装された常に手前で表示とフレームなしのウインドウの最大化で事足りる
それをやらないとタスクバーの手前にこない
871 名前:デフォルトの名無しさん[sage] 投稿日:2007/08/31(金) 22:44:21
>>823 できたー
お前すげえ
ちょっと誤爆してきた
というか常識だろ・・・ disposeでリソース破棄が必要ってのは
>>831 やってみた・・・なんかだめっぽいね
残念
widgetのfocusを外して、他のwindowにfocusを移すには どうやればいいの?
そういやJOGL1.0から1.1へ差し替えたら全てテクスチャが上下さかさまになっちまった・・・ それ以外の描画自体はすべてそのまま動いてるっぽいがなんだこの現象は・・・
1.0 使ったことないからなんのことかよくわからんが、 OpenGL のテクスチャは左下が原点だってことと関係ありそう?
いや、1.0までは左下を0,0にしてたんだがそれだと1.1で上下逆さまになる
お前らJFrameを最大化する方法しってますか? 画面のサイズを取得して、setBoundsで広げてみたけど、これは俺の知ってる最大化とちと違う。 最大化ボタンを押した時の挙動を実現する方法を教えてくだせぇ
>>842 java.awt.Frame#setExtendedState(int)
早いな! ...先生! 最大化したあとでノーマルに戻すと、サイズがでかいままです!
いるよな。先生先生っていえば、自分で調べないでも勝手に働いてくれると思ってる奴。
>>844 ノーマルサイズの状態にせずに、
いきなり最大化状態で表示すると、そうなったりする。
ほんとほんと。 getPreferredSizeとsetPreferredSizeを使ってみたらどうかね
>>814 今更ながら自己レス
FileSystemView fs = FileSystemView.getFileSystemView();
File[] roots = fs.getRoots();
これでデスクトップ取って来れたよ
Windows限定ならそれでOK メソッド名とあわんけどな
FileSystemViewはJavaDocに直感的にうんたらって書いてあるのに メソッド名と処理が全然直感的じゃないことに脱帽する。
>>849 デスクトップを取得したかった理由は、エクスプローラみたいなツリーを作りたかったからなんで、
今回はokです。
デスクトップ取得して、そこから展開してったらサクっとエクスプローラみたいになってびっくり。
ウィン以外だとどんな動作になるのやら。
>>851 名前のとおりの動作になる
ファイルシステムのルート
説明によるとDOSだとドライブ番号らしい
でもデスクトップってユーザーごとに違うからそこがファイルシステムルートってのもピンと来ないんだよなぁ
JListで縦横にアイコンが並んでる状態で、カーソルキーをおしっぱなしにすると 左右の端っこでカーソル?が止まるべ。 右端で右を押したら、一段下の左端にカーソルもってこうとしてこんなん書いてみた。 protected void keyPresse(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_RIGHT: int index = getLeadSelectionIndex(); int width = getWidth() / getFixedCellWidth(); if (index % width == width - 1) { getSelectionModel().setLeadSelectionIndex(index + 1); } 以下略 だがしかし、これだと左端の一つ右にカーソルがいくっす。 どうしたら、左端にきっちり止まるかな?
よーわからんが、 左端に移った後で右へ移動の処理が呼ばれてるんじゃね? e.consume()とかしたら伝搬せずに済むかも。
>>854 なるほどっす、ありがとっす
if ((e.getModifiersEx() & InputEvent.SHIFT_DOWN_MASK) != 0) {
getSelectionModel().setLeadSelectionIndex(index + 1);
} else {
setSelectedIndex(index + 1);
}
e.consume();
シフトキー押してなくても右端と左端を選択するようになったから、
e.consume();の前にif文かましてみたっす。
右端でなければ同行の1つ右へ、 右端だったら次行の1つめへ、 というActionを定義して、 ActionMapに名前を付けて登録。 InputMapの右キーのトコにその名前を登録。 と処理するのが正当かもしれんね。
Desktop.getDesktop().open(file) これで関連付けでファイルを開けるんだが、ディレクトリを2、3個開くとVMが落ちる。 画像は平気。 今後に期待ってところかね
859 :
858 :2007/09/11(火) 02:07:36
OSはウィンドウズXP、関連付けは標準のツリービューがつかないエクスプローラっす
問題はSwingと関係ないことだな
861 :
デフォルトの名無しさん :2007/09/11(火) 04:35:39
そういえばAWTスレないよね
JLabelのテキストとしてHTML形式でリンクを指定すると リンクっぽく表示されるけどクリックできません。 リンクを開くにはどのようにすればいいのでしょうか?
>>862 JLabel に MouseListener つけて mouseClicked を検地して自前で処理する。
ハイパーリンクのクリックイベントを捕らえられるのって、JEditorPane
だけじゃないかな。
>>860 問題はSwingの話題がないことだろう
bindingが正式になったようじゃの
>>862 SwingのHTMLは表示させるためだけのものってどこかに書いてあったようななかったような…
どこだったか忘れたが確かにあったな。
>>858 Desktop desktop = Desktop.getDesktop();
desktop.open(new File("C:\\"));
desktop.open(new File("C:\\WINDOWS"));
desktop.open(new File("C:\\WINDOWS\\system32"));
desktop.open(new File("C:\\Documents and Settings"));
で、4個開いてみたけどVM落ちない。再現条件が違うんじゃね?
Look&Feelを変更しようと思うんだけど、SwingのJFileChooserに適用する方法が分かりません。 どなたかご教示ねがいます。
変更しようと思うだけじゃなくて実際に変更してみれば、それがJFileChooserにも適用される。 それともJFileChooserだけを変更したいっていう話?
>>870 UIManagerのsetを呼び出す場所が間違ってました。
ごめんなさい(m´・ω・`)m ゴメン…
初心者です。JAVAの学習の為にSwingでカレンダーを作っています。 ボタンを押す毎に月の変数を増減させ、その変数の値を見て31日を追加したり削除したりさせたいのですが、 removeが動作してくれません。大まかに書くと下記のような感じなのですが↓ public void actionPerformed(ActionEvent e){ month++; if(month == 9){ panel1.add(day31); } else if(month == 10){ panel1.remove(day31); } else if(month == 11){ panel1.add(day31); } } 上記の「day31」が削除されません。 変数の値は間違い無く条件式に対し真を返す値である事は確認しています。 何故か、30日を示す「day30」が存在しないと、削除に成功します。 色々試しましたが解決策が見つかりませんでした。そこが悪いのでしょうか?
873 :
872 :2007/09/12(水) 01:30:18
訂正 ×そこが悪いのでしょうか ○どこが悪いのでしょうか 解決策が見つからない事は確かに悪いのですが・・・
874 :
デフォルトの名無しさん :2007/09/12(水) 09:22:09
>>872 レイアウトを使用しているなら、コンポーネントの追加と削除をした場合
にはrevalidate()なりを呼び出さないといけない。
そういう手間がいやなら、day31.setVisible(false)とかで表示上消して
しまえばいい。いちいちコンテナに追加したり削除したりすると後が面倒。
たとえば7月から8月にした場合とか、両方とも31日ある月とか
30日以下の月が連続した場合に面倒だろ?
ところで9月は30日なんだが、
if(month == 9){
panel1.add(day31);
}
この判定はいったいなんだ?
876 :
874 :2007/09/12(水) 09:52:20
>>875 了解。1〜7月の判定がなかったんで混乱した。
今更だけど、月が 0 始まりなのって嫌がらせだよな。 Java がどうとかじゃなくて、もっと昔からの慣習なんだろうけど。
いや別に。たまにjavadoc読まずに失敗して逆切れするバカがいるけど。
はいはい、ここはSwingスレですよっと。
あちらはデフォでつきを数字で表さないからね 文字列の配列のインデックスのためでしょ
>>874 回答ありがとうございます。おかげで解決しました。
つたない質問に丁寧に答えて頂き、本当に有難う御座いました。
ImageIO.read(File f) これでjpgファイルを読み込んで、JLabelにイメージアイコンとして突っ込んで表示してたら変な色になるファイルがある。 暗いところ明るい緑に、白いところは赤っぽくなる。 なんか変なフラグでも立ってるのかね?
何で生成されたJPEGファイルなのか興味あるな
VMが落ちるjpgファイルというのも気になるw
カッコイイな
そもそも、IIOがどこまで対応してて 読み込んだjpegがどんな機能使ってるかだな。 実は2kだったりしたら笑えるw
MSかSUNかってレベルの企業にまともなアウトプット期待するなよ
>>888 6u2で重く感じたのはやはり気のせいじゃなかったか
そういやまだ6u1だ。 u2ってbug fixだったな。
イベントの発行ってどうするん? ルートのフレームから、その子供みんなにどどーんとイベントを発行できたらいいなぁ。 なんて思ってるんだけど。 具体的には、各部品が勝手に開いてるファイルをファイル名指定して「閉じろ」って命令したいんだな。
えっと・・・どういうこと?
Observerパターンのことかえ
>>894 そういう実装になるんだろうけど、ドキュメントを閉じるなんてイベントが無いからイベントの発行じゃ出来ない気が。
そういうEventObject実装してるならそいつをpostしてやれば良いだけ?
イベント拾った側でいろいろやるけど。
>>892 の説明は全然具体的じゃないからコード出すなりした方が早いんじゃない?
コンポーネント自身は開いたファイルなんて管理してないと思うけどなぁ。 コンポーネントツリーにイベント投げれても意味なくない?
日本語のようで日本語ではない質問はむずかしいなぁ
SwingだからpostをEDT上のみでやってかつ、カスタムコンポーネントを使ってるならjava beanを再定義しなくちゃいけないわけか。
JTableで表を作り、行をソートした後にgetSelectedRow()を呼ぶと 選択行を取得できますが、元の行を知るにはどうすればいいのですか? Java6であればconvertRowIndexToModel()がありますが、Java1.4.2で 同様のことをしたいのですが見つかりませんでした。
>>900 1.4.2 だと、ソートはモデルを直接弄らんとできないはずだから、
1.6のconvertRowIndexToModelで変換しなきゃいけないような「元の行」自体がないはず。
>>888 クロスプラットフォームLAFも糞重いのを確認した
階層が変わるたびにすごいまたされる
なんだこれ
JFileChooserなんか使わない
905 :
デフォルトの名無しさん :2007/09/22(土) 14:47:58
すいませんSwing初心者なのですがTableを使って表のようなものを作り そこに表示されるテキストをComboBoxで選択できるようにするにはどうすればよいのでしょうか?
>>905 セルエディタとしてJComboBoxを与えて構築したDefaultCellEditorを設定してやればいい
908 :
デフォルトの名無しさん :2007/09/22(土) 15:24:47
>>907 すいません。あまり意味がわからないのですが簡単な例を
記述してもらうことなどは出来ないでしょうか?
サンプル要求する前にぐぐったら? 相手に要求してる作業量を考えて発言しようよ
まず一通りSwingの本でも立ち読みしてみたら? JTableは非常に複雑なコンポーネントなので厄介だが、 セルレンダラとセルエディタというのがあると理解すれば 道は開けるかと。
912 :
デフォルトの名無しさん :2007/09/22(土) 15:42:47
一応いろいろ調べてみたのですがTableとComboBoxは別々に紹介されていて なかなかいい例が見つからなかったんです。 本当にすいませんがどなたか助けてください
>>912 最近 JTable のチュートリアル読んだ時にそのまんまな例があった。
俺ならググる前にチュートリアルあたるけど、あまり使われてないのかな?
よくできてると思うけど。
JTableとJTreeは他のコンポーネントと比べて敷居が高いのは確かだな。 2段階くらい行き成り高くなる感じで、壁を感じるのは誰もが通る道。
公式チュートリアル、あれは意外と密度が濃いよな。
ググって出てくるのは、JTableを使ってみました、JComboBoxを使ってみました、っていうのばっかりだな
918 :
デフォルトの名無しさん :2007/09/22(土) 16:06:31
>>917 ありがとうございます
これならなんとか参考にして出来そうです。
みなさんもいろいろありがとうございます
標準拡張(JMF...etc)のチュートリアルは流石に高レベルAPIだけあってもっと濃いぞ。 まあ、レンダラ・エディタ・モデルはSwingの共通概念だが、ここら辺の扱いは JTable>JTree>=JListの難易度だと思う。 JTreeは見た目と内部状態が違うだけで JListに横方向の概念が加わっただけだからカスタムレンダラ・エディタ・モデルのコード自体はかなり使い回せるよ。 データ転送を実装しようとするとJTreeの方が面倒臭さで上回ってしまうけど。 この3つのカスタムコンポーネントのコード量が多いのは変わりないけどね。
>>917 そこへいきで嘘かいてたりするから実はつらいぞ
3ペインアプリケーションって以外に難易度高いのかもな ※左にTree、右上にTable、右下に任意コンテンツのレイアウトを持つアプリ
難しいというより面倒くさい。 手書きでテーブル駆使したhtml書くようなものだし。
Swingは、OS標準のファイル/フォルダ選択ダイアログのサポートと OLEみたいなアプリの埋め込みをサポートすると磐石なんだよなぁ。 Warriorなる組み込みブラウザが最近話題になってるけど、 GeckoやIEコンポーネントが使えれば、そんな苦労は不要だろうに。
OS標準の使いたければAWTをどうぞ
>>924 ブラウザうめこみならJDIC使えばいいと思うよ
// エラー デバッグ ブラウザ ツール
//
http://www.mozilla-japan.org/ // シンプル プログミング ツール
//
http://proforceone.web.fc2.com/ // 素因数分解サンプルプログラム
// Calculation processing にコピーして[RUN]
MAX=1000;br();
for(x=2;MAX>=x;x++){write(" "+x+" ⇒");
for(i=2;x>=i;i++){if(0==x%i){k=0;
for(j=2;(i>=j)&&(1>=k);j++){
if(0==i%j){k++;}
} if(1==k){write(" "+i);}
}} br();
} br();
そういえば、Java7からはAWTとSwingの混在ができるようにしてるんだっけ?
>>929 JDK7 build19から対応が入った様子。
>>931 そういった未来の予定表はどこ見ればいいですか?
>>933-935 ありがーと!
そろそろJDK6を視野にいれようと思ってたら、もうJDK7か・・・。
前より良くなってくのだろうけど、おっかけるのも疲れてきた。
Win&Mac対応のアプリやってるのであまり最新ので開発できないのです。
jTableでソートすると数値も文字列順にソートされるんですが、 数字の大小でソートさせるにはどうすればいいですか?
>>936 win&linuxなら新版追いかけて開発していけるんだけどね・・・アップルがorz
>>937 API見ただけだが、たぶんこんな感じ?
DefaultRowSoter sorter = (DefaultRowSotrer)aTable.getRowSorter();
sorter.setComparator(0, new Comparator() {
// ...
});
実際にはgenerics関連とかいろいろ要るはず。
940 :
デフォルトの名無しさん :2007/09/24(月) 13:21:40
JInternalFrameをキーボードから閉じる事は不可能?
言ってる意味がいまいちわからないが キーイベント拾ってやってみればいいんじゃないかな。
標準ではそれっぽいキー設定はなかったとおもう。 ActionMapとInputMapについて調べてみてください。
やっぱり自分で入れる必要があるのか。 alt + F4で入れたら、JInternalFrameより上のレベルで先にイベント拾ってるもんだから JInternalFrameは個別にキーが割り当てられているのかと思い込んじまった。
Windowsの場合だと、内部ウィンドウ閉じるショートカットキーはctrl+F4じゃねぇの?
普通にctrl+F4で閉じるんだが・・・
なあ、次回からスレタイに低速って付けるのやめねぇ? 最初見たとき荒らしの立てたスレかと思った。 高性能とか、標準とか、なんとでも言い方はあると思うんだが。
「JavaそれなりGUI Swing 6」
>>946 「Java標準GUI Swing 6」
スレはAWTとSwingの合併を勧めればいいんじゃない? JavaGUI AWT/Swing 6
SWTの人が怒るぞ。
>>949 それはjdk7が普及してからにしないと混ぜるな危険系問題がループすると思う。
初質でも見かけるし。まだ時期早い思う。
まあ、Swingが本当に低速だったのは1.3までだな。
低速の部分を高レベルとか軽量とかAWTと対になる単語入れとけば良いんじゃない?
>>949 Java標準GUIだけでいいんじゃね?
俺は低速のがいい。
低速って聞くけどちゃんと動くじゃん もしかして俺って天才? って感じが好きなので低速でお願いします
風の妖精に光の速さで走れって言ってしまったので、光速でお願いします
じゃあ間を取って中速で
JavaFXは扱わないの?あれはベースがSwingだし あとSwingフレームワークも期待
Swingフレームワークはイマイチ存在理由が・・・
>>957 扱ってもいいんじゃない?
質問の内容としてもSwingにかぶってくるところも有りそうだし。
ただ、擦れたいに入れるかどうかは微妙だな
>>958 Swing初心者の入門用かセッション保存ライブラリだと思えば・・・。
けど、EDTに自分でinvokeしなきゃいけないのは変わらないんだよね。
Swingフレームワークって、Swing自体のことを差すわけで、なんのことか意味がわからなかった。
JSR-296 Swing Application Framework でしょ。たぶん。 あ、俺も低速のが良いぞ。
Java微速前進GUI Swing
Swingはフレームワークじゃなくてツールキットだろ。
といわれても、昔からSwingの説明でSwing frameworkと使われていたわけで。
それが間違いだろ。 javaのdocなんて間違いだらけじゃないかw
おいおい、自分が知らないからって、間違いだっていうのは良くないぞ
今までの擦れたい案集計 1 JavaGUI AWT/Swing 6 1 Java標準GUI 1 Java標準GUI Swing 6 3 Java低速GUI Swing 6 1 Java光速GUI Swing 6 1 Java中速GUI Swing 6 1 JavaそれなりGUI Swing 6 1 Java微速前進GUI Swing 6 思った以上に低速が人気。
GUIでまとめていいと思うけどね AWTはスレ違いといわれてもAWTのスレがあるわけでもなく JOGLは内部で使われるようになってきたからこのスレ向きにもみえるし
JOGLを使ってるわけじゃないぞ。
SWTとは分離していた方がいい気がするなぁ スレタイは Java Swing 6 で十分な気がする.
SWTスレが高速と名乗る限り、低速は続いて欲しいなあ。
【AWT/Swing】Java 低速GUI 6【JavaFX】 なんてどう?
Java低速GUI Swing 6 でいいだろ 常識的に考えなくて
スレタイに賛美するような語句入れると荒らされやすいし。 初期化がもっさりすぎとか、メモリ食いすぎとか 粘着されるのが目に見えてる。 低速って入れとくのは処世術みたいなものだ。
974++
>>976 俺もそう思う。
というわけで
>>974 でいいんじゃないかな?
AWTはプログラムの上で混ぜたくはないけど、別に作る程話題ないだろうし。
975++
JFrame + JDesktopPaneをLinux上(FedoraCore5)で動かすと SOUTHの部分にタスクバーのようなものが表示されるのですが どうやったら消せますでしょうか。
ルック&フィールを変える GTKルック&フィールを使ってないか?
アプリの設定画面を作る時はJPanel上に JLabelやJTextFieldやJButtonを貼り付けて作成するのが 一般的でしょうか? 設定項目が多く、オブジェクトだらけになって大変なことに… JOptionPaneは名前はそれっぽいのですが、実際には ダイアログボックスとしてしか使えないようですし、 一体どうやれば効率的に開発できるのか悩んでいます。
設定項目が多いならオブジェクトだらけになるのは当たり前 でも、別に手間がかかるだけで大変ということはないよね? 一括管理したい場合は各種Binding使うとよろし たんにソースが見にくいというのならそれはコードの品質に問題がある
netbeansでGUI組んでeclipseでリファクタリングが結構効率良いな。 けど >設定項目が多く、オブジェクトだらけになって大変なことに… こういう事ならUIデザインの問題もあると思う。
GUIエディタって使いにくくない? 意図せずにあちこちにぴとぴとくっついたり、 逆に意図した構図にならなかったり もともと不器用だからストレス溜まりまくり
それは不器用かポトペタの操作性が悪いのでは?
JTableあたりはポトペタできて嬉しい事なんてないんじゃね? ボタンとテキストフィールド2,3個くらいなアプリでもなければ無い方が後々のため。
VS否定発言だなw MS信者がうるさそうだ。
実際JTableはmodelとかもうフルカスタムになるわけでIDEの機能はつかえんからねー 超初期のNetBeansからまったく進化してないのがきつい JavaEEのほうはどんどんよくなってるのにorz
5から6にかけてSwingがあらゆる面で高速化してるわけじゃないんだな... ようやく6にアップグレードしたところなんだがV2Cのスクロールバーの追従性が 数十ミリ秒くらい遅れるようになった 5のときはスクロールバー握って猛烈にスクロールしても全くラグを感じなかったんだけどね 環境はLinuxでのMetalです
RepaintManager に変更が入ったせいかもな true double buffering のサポートだかなんだかで RepaintManager のソースを見てみると怪しげなプロパティがいくつかあるので、いじってみると何か変わるかもしれない
>>985 GroupLayout使わず旧来のPanel+BorderLayout/FlowLayoutやらGridBagLayout使うなら、GUIエディタの方が楽
GroupLayout使うならGUIエディタなしではありえない。
個人的には GUI + GridBagLayout が一番好きだ。
>>990 5から6で速度アップはほとんどないというのは過去にいくつも出てきたと思うけど
速くなったのはVMそのもので演算とかGCとかいろいろと
6のSwingで変わったのって非公開な内部ロジックくらいだからな。 爆速になったのはVMで主に動的にレジスタに割り当てるようになったから。 あと、並列GC関連が強化されてるからマルチCPU環境だとGC負荷は下がるかも知れん。 むしろ、Swing自体はロジック変更で一部が遅くなってる。 まあ、散々概出な上にバグ報告までされてて、jdkについてるソース読めば分かることなんだが。
ところで次スレをそろそろ建てんとやばいのだが、 自分はもうしわけないことにスキルがない。 だれかできる人お願いします。
GUIエディタなしでも、GroupLayoutは神だろ
HTMLだらだら書くような気分で書けばいいのさ
⊂ \ /⊃ \\/⌒ヽ// (( \( ^ω^) )) /| ヘ //( ヽノ \\ ⊂/ ノ>ノ \⊃ レレ 1000〜♪ 彡
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。