1 :
デフォルトの名無しさん :
2008/11/21(金) 11:24:21
2 :
デフォルトの名無しさん :2008/11/21(金) 11:25:06
3 :
デフォルトの名無しさん :2008/11/21(金) 11:25:58
AWTもターゲットに入ってていいんだよね? Q. AWT と Swing 混ぜちゃ駄目って聞いたんですけど 混ぜちゃ駄目なんですか・・・・? A. 今まででは、「駄目」というのが正解です。 が、現在開発中(未リリース)のバージョンではSwingとAWTの混在ができるようになっています。 正式リリースがされるまで、情報の錯綜があって混乱すると思いますが 普通の人にとっては「まだ駄目」という状況だと思ってください。 Q. Nimbusって何よ。 A. 次期Swingの標準となるとされているLAFです。 元々は、SUNのGnome環境のテーマに使われていた見た目を移植したものになります。 実装にはXMLベースでLAFを定義できるSynthLookAndFeel を利用しています。 jdk6の開発版で試す事ができます。 Q. こんなプログラムを作れって言われたんですが・・・ A. 宿題スレへどうぞ。 Q. なんでスレタイに低速って入ってるの? A. まだまだ速くなるってことさ。
GUIの質問なので、再度書き込みします。 こんなGUIのフォームを作りたいんですが、 その中でいくつか質問があります。 テーブルA ボタン テーブルB ID Name ID Name [1 ][A ] [1 ][E ] [2 ][B ] (追加) [2 ][F ] [3 ][C ] (削除) [3 ][G ] [4 ][D ] [4 ][H ] 1.テーブルID項目は非表示にさせたいけど方法をおしえていただけませんか? 2.テーブルAセルを選択した状態で追加ボタンをおしてテーブルBに追加したいんですが、 選択したセルの情報を取得する方法をおしえていただけませんか? 以上です。よろしくお願い致します。
1.必要なデータを提供するモデルを実装する。 2.JTable#getValueAt(row,col)
あ、選択した行、列はJTable#getSelected〜で。 API読めよw
>>6 ありがとう御座います。
兆しがみえたのでちょっとやってきます。
>API読めよw
これってSunのクラス説明のこと?
>>4 のレベルだとリファレンスマニュアルよりもまずswingの参考書を
一冊読んだほうがよさそうな気がするなw
くだらん嘲笑するぐらいなら ちょっとのヒントぐらい書いてやればいいものを
ヒントってか
>>5 で答がでてるじゃん…
あと参考書読んだ方がいいってのもヒントだと思うけど…
>>10 >9はもっと丁寧に、そして空気を悪くするなって言いたいんでしょう。たぶん。
>>4 選択したセル番号を直接得ることはできないけど、選択した行と列を得るメソッドとして
それぞれgetSelectedRowとgetSelectedColumnというのがあります。
答え既にでてるのにお疲れ様です。
>>13 APIリファレンスってSwingの使い方がわかる人にしか意味ないし、
そういう人はたいてい質問してこないんじゃ・・・
あのー、JFrameを勧める人が多いんですけど(swingなので当然ですが)、JFrameはスレッドがらみでダメダメって話があるんでやっぱりダメなんですか?
>>15 お前が何をしたいのかが分からない
よって答えも出せなければ相談にも乗れない
ダメなんですか やめておきます っていうレスの後押しが欲しいんだろ
なんか殺気だってますねこのスレ。結局・・・人生ってのは孤独なものなのでしょうがないんでしょうか・・・
20 :
デフォルトの名無しさん :2008/11/24(月) 16:58:56
慣れてくれば、JInternalPaneとかJAppletでやって、それを最後にFrameとかに貼り付けるかな。
21 :
デフォルトの名無しさん :2008/11/24(月) 17:02:46
>JInternalPaneとかJAppletでやって 何をやるの?
V2C使ってみてSwingすげーと思った
おまいら jEdit つかわんのか?
27 :
デフォルトの名無しさん :2008/11/25(火) 22:33:13
あほっても誰も構ってくれないなんか淋しいよな・・・
JTextAreaの幅のみを固定して使いたいのですが、setPreferredSizeを使うと、 高さも固定されてしまいます。何か良い方法は無いでしょうか。
29 :
デフォルトの名無しさん :2008/11/25(火) 23:06:15
ありません。
おお…、無いですか。ありがとうございました。
JComboBoxについて質問させてください。 現在、コンボボックスのプルダウン時の表示項目を 個別にDISABLEDにさせられる様にしようとしてます。 表示はCellRendererでどうにかなったものの、マウスで DISABLEDにした項目をクリックすると選択が出来てしまいます。 この現象を防ぐためにはどのようにすればいいのでしょうか? よろしくお願いします。
http://java.sun.com/docs/books/tutorial/uiswing/dnd/droplocation.html この例のようなやり方で自作コンポーネントへ、TransferHandlerによるDnDでドロップ位置の表示を行おうとしています。
この方法でsetDropLocation(←自作コンポーネントに作成したアクセサ)によりDropLocationを設定すべき場所は、TransferHandler内ではどの場所でしょうか?
入力しようとするときに表示させるものなので、現在は
TransferHandler#canImport(TransferSupport)
内でsetDropLocation(support.getDropLocation())
としています。
一応表示はされますが、この方法ではドロップターゲットが変わった場合にsetDropLocation(null)とできないため、ドロップ位置の表示が消えません。
何かドロップ位置を表示するスマートな方法はありませんでしょうか?
JListはsetListData()でオブジェをセットできますが、 JTableはなにを使えばオブジェをセットできますか?
>>28 JTextArea を入れるコンテナのレイアウトを工夫する。
たとえば BorderLayout では
EAST と WEST のコンポーネントは
横幅が preferred size の横幅に固定され、
高さはコンテナのサイズによって変わる。
JWindow上のコンポーネントのツールチップを表示させるにはどのようにすればよいのでしょうか?
>>35 普通はどうやってるの?
JWindowでだけ特殊だという意味?
ツールチップの設定の仕方自体を知らないという意味?
いえ、普段JFrameにコンポーネントのせていて、元々対応していないものであればToolTipManagerで登録して・・のような流れで表示させていたのですが、JWindow(JFrame以外のwindow?)にのせてみると表示されなくなったのです。
>>37 普通の使い方は、JComponent#setToolTipText()でしょ。
で、うろ覚えだけど、JComponent#setToolTipText()でString引数がnullかどうかで、
ToolTipManagerに登録(registerComponent(JComponent),unregisterComponent(JComponent))されるように実装されてたはず。
なので、
>元々対応していないもの
これの意味が分からない。
ToolTipManagerはそもそも、JComponentしか受け付けないはずだし、
JComponentであれば、ツールチップを表示させられる。
であるのに、元々対応していないものとは?
あとは、JFrameを使用しているほうのバージョンでは、
setInitialDelay()等のhogeDelayプロパティを変更しているとか。
ツールチップを無効にしているとか。
JFrameを使用しているほうのバージョンとJWindowのコードとの差を検査した方が良いと思う。
>>37 38です。
ちょっとコード書いてみたけど、たしかに動かない。。すまん。
JWindow,ToolTipManagerのソース見たほうが良いかも。
class Hoge{
public static void main(String[] args){
JWindow window = new JWindow();
//JFrame window = new JFrame();
JButton buton = new JButton("Button");
buton.setToolTipText("tip");
window.getContentPane().add(buton);
window.setBounds(0, 0, 450, 450);
window.setVisible(true);
}
}
>>39 のコード
EDTで起動してないとこは大目にみて、修正してね。
理由はよく分からないけど、 Frame を表示させないで Window だけを表示すると ちゃんと動作しないことがある。
ownerなしのJWindowだと、フォーカスが取れないからじゃね? JFrameで setUndecorated(true) と setAlwaysOnTop(true)くらいやっとけば、代わりになるんじゃね?
Jtableって何行まで行があるとかわかるクラスある? あったら教えて。
>>43 行数なら、JTable,TableModelだけど、
言ってるのは、多分、有効なデータがある最大行インデックスってことだと推測するなら、
そんなapiありません。
JTable自体にメソッドついてるよ、getRowCount()が。
「Jtableって何行まで行がある」かとしか読み取れない
そうか。 個人的には「何行ある」と「何行まで行がある」では違うと思うけど。 本人じゃないから分からないけどさ。
43の教えてクンぶりはあまりといえばあまりなんだけど 「何行ある」と「何行まで行がある」は双方どう違うのか興味が出てきた
50 :
デフォルトの名無しさん :2008/11/27(木) 01:02:41
平和だな〜
JTextFieldに入力した文字をリストに格納したいんだけど、 JTextFieldの入力が終わったって判断するにはどうしたらいいんだ? イメージではフォーカスがかわった時イベントを起こすようにしたいんだけど
addFocusListenerでいんじゃね?
focusLost使ってフォーカス変わったタイミングで格納するわ
JFormattedTextField を文字列(または空文字列)でコンストラクトし、 value に関するプロパティのイベントを捕捉すれば、いい感じかも。 フォーカスが外れたりリターンキーが押されたりしたときに (文字列が変わってれば)イベントが発生するっぽい。
現時点において、世間で一番成功したSwingアプリってなんだろ? CabosってSwingアプリだっけ? ム板で聞いてもバイアスがかかると思うので、 IDE各種(Eclipse, NetBeans, etc)と2ch専ブラ(V2C,etc)は却下。 いやさ、実行系絡みのトラブルシュート対策のページを パクらせてもらおうと思って。
V2Cだろ
jEdit だろ
limewire
外為どっとコムww。なぜかFirefoxで動かないけど。 やっぱリアルタイム性のあるとこかな
jude
JListにはJTreeみたいな編集機能はないんかの? アイテムの名前変更できるようにしようとして、ぐぐってもなんも引っかからんぜ
ないなぁ けど実装はそんなに難しくないよ JTableを1列で、とかだめ?w
実装は難しくないのか。 まだ容易されてる入り口と、ぐぐって出てくる手法でしか作ってないから想像もつかないぜ JListとJTableを組み合わせて使ってるから、JTableのアイテムを編集させてみる。 気が向いたら、その難しくない実装とやらをがんばってみるかな
JTableのソースを見て、CellEditorを中心に見てみると結構参考になるかも。
JScrollPaneのViewportViewにJTreeを二つ設置したJPanelを指定したのですが スクロールペインの中央にJTreeが並んでしまって困ってます BoxLayoutでJPanelにJTreeを設置するとテキストがまともに表示されない(後半が途切れる)ので GridBagLayoutで白紙のパネルをJTreeの下に設置し、JTreeを左上になんとか表示してます こんな無理矢理な方法を使わず、素直にJTreeを二つスクロールペインの左上に設置する方法は無いでしょうか? 何方かご教授下さい…
今ひとつ分からないけどこれでだめ? JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); JPanel viewportView = new JPanel(new FlowLayout(FlowLayout.LEFT,0,0)); JTree tree1 = new JTree(); JTree tree2 = new JTree(); viewportView.add(tree1); viewportView.add(tree2); frame.add(new JScrollPane(viewportView)); frame.pack(); frame.setVisible(true);
みすってたー JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); FlowLayout fl = new FlowLayout(FlowLayout.LEFT,0,0); fl.setAlignOnBaseline(true); JPanel viewportView = new JPanel(fl); JTree tree1 = new JTree(); JTree tree2 = new JTree(); viewportView.add(tree1); viewportView.add(tree2); frame.add(new JScrollPane(viewportView)); frame.pack(); frame.setVisible(true);
JTreeを2つ使う理由がわからん。 JTreeを1つで、setRootVisible(false)にすればええやん。
こんな感じかな panel.setLayout(new BorderLayout()); panel.add(tree1, BorderLayout.NORTH); panel.add(tree2, BorderLayout.CENTER); scrollPane = new JScrollPane(panel);
>>70 それやったら何も表示されなくて…
JTree二つあった方がラクかなぁ?と思って組み始めたんです。
>>71 tree2が中央に来ました…orz
いつの間にか jdk 6u11 が出てるな…
今日JavaFXリリースだというのにまったく盛り上がってないなw
忙しくて試す時間ないんだけど、どんな感じ?
77 :
デフォルトの名無しさん :2008/12/05(金) 05:22:12
もういらねーんだよ。うじゃうじゃとアホなスクリプト言語とか。
JavaFX結構おもしろいじゃん ただ何やってるか分からんけど起動がえらい遅い
79 :
デフォルトの名無しさん :2008/12/06(土) 23:29:05
ブラウザからデスクトップにドロップするやつ試したやついる? あとアニメとかはどうだ。滑らかに動くのか。 とにかく生情報がほしいな。 自分はOSバージョンの関係で試せないけど、試したやつ報告よろしく
80 :
デフォルトの名無しさん :2008/12/07(日) 01:58:37
JavaFXはスレ違い
Java FXってGUIはSwingそのものなの?
このスレの解答者はカスしかないけどから一応こたえてやると・・・ siwngはjavacでコンパイルされてバイトコードになるためjvm共通のwidgetになるから javafxcでJFrame{}とかすれば当然JFrame.classが呼ばれてswingそのものを呼び出しているといえる。
「WOLF RPGエディター」とは?
・高度なRPG開発が可能な、完全無料のゲーム作成ツールです。
・雰囲気はRPGツクール2000に近い。RPGツクール2000で自作システムを作りこむ際に
不満だったところがいろいろ解消されていて、かなり自由度が高いです。ただし
その分初心者には難しいかも。すでにツクール2000で自作システムを組むのに
慣れた人やRPGツクールでは物足りないけどプログラミングはちょっという方にお勧め。
・作成したゲームは自由に配布したり、コンテストに投稿することも可能。
また本ソフトを持たない人でもプレイ可能!ファイル暗号化も完備してるよ!
・要望、不満点、バグ報告などなど書き込みお願いします。今もどんどん進化中です。
・それとマップやキャラなどのドット素材もじゃんじゃん募集中ですので
一度サイトにお越しくださいませ。
・このツールで作ったゲームをサイトで紹介してるから、ダウンロードしてどういう
ゲームが作れるのか見てみてね。
2ちゃん本スレ
http://pc11.2ch.net/test/read.cgi/gamedev/1226294070/l100
このスレの解答者はカスしかないけどから このスレの解答者はカスしかないけどから このスレの解答者はカスしかないけどから このスレの解答者はカスしかないけどから このスレの解答者はカスしかないけどから このスレの解答者はカスしかないけどから
そろそハードウェア対応のCompositeを増やしてくれないものか… 加算半透明が欲しいけど、そういう人は少ないのかなあ。
javafxはどこで話せばいいの?
ここかJDK7のスレッドだろうね
jdk1.4からpaintが改善されてきてjdk1.6でほぼnativeと同等になったから、そろそろそういうブレンドとかのクラスも出てくるんじゃないか? 今はCPUに計算させて力でごり押しでもいいだろうけど、本来のやり方は力業計算はjoglとかハードの方を使って(経由して)計算させるものなのかと思う。 そういうの説明してるサイトはあまりないけどね。
すごく初歩的なことかもしれないんですが、packって必ず呼ばないといけないんでしょうか?
いいえ packしたい時に呼べばいいだけです
packは使うべきかどうかどう判断すればよいのでしょうか?
packがやることは分かる?
各コンポーネントの推奨サイズを見て、ウィンドウ全体のサイズを決定、でしょうか?
ウィンドウを推奨サイズにしたい場合は pack() 自分でサイズを指定したい場合は setSize() とか setBounds() とか
JDK1.6u11になってNimbusを今まで作ってきたアプリでためしてみたんだが微妙だなぁ。 こっちの書き方も悪いんだけど、それを差し引いてもあちこちにデザインの破綻が起きる。 画像アイコンを入れたボタンやカスタマイズした部品の修正が大変。 Metalのほうが細かい操作面や様々なケースで、神経が行き届いていたように思われ。
addElement public void addElement(Object obj)指定されたコンポーネントをリストの末尾に追加します。 パラメータ: obj - 追加されるコンポーネント DefaultListModelのaddElementのリファレンスを読んでコンポーネントも追加できるのか…?と思い JPanelをaddしてみたんですが、文字列らしきもの(ポインタ的な何か…?)が表示されるだけで上手く行きません。 そもそもコンポーネントの追加という意味を私が取り違えているのでしょうか?お教え下さい
99 :
デフォルトの名無しさん :2008/12/09(火) 22:29:41
普通はUIを頻繁に変えたりしない思うけどね。 昔のxのウィンド・マネジャの乱立とかwinデスクトップテーマの流行を思い返す。 system uiのwinでぽっぽアップしたときのメニュー文字のギャップをもう少し広げてくれると win ui (win classic ui)とほぼ同じでハッピーなんだけど。
>>98 コンポーネントは広い意味でのコンポーネントって表現だと思う。
英語版のjavadocが"Component"になっているから、そう訳したんだと思う。
Objectが引数だから、JPanelだろうが、通常やらないだろうけど、Timerだろうが何でも格納はできる。
表現が的確か分からないけど、ListModelは単なるデータストアであって、
ListModelから取り出したデータを、どう表現するかはCellRendererの役目。
一度、java tutorialとかで基本的なところを勉強するといいと思う。
>>98 デフォルトのレンダラでは対応していないのでJPanelを要求通りに表示できるレンダラに変更
>>99 JMenuItemのsetMargin()とか呼んでみたら?
ポップアップメニューのL&Fの更新ってプログラマーの責任だったっけ。
JComponent#setComponentPopupMenu()だけでは自動更新してくれなかった記憶が。
>>100-101 本当にありがとうございます。CellRenderer改変して無事に完成しました
JPanel上にBorderLayoutでJLabelを2つ設置してそれを返すようにしたら想像通りのものに…!
JLabelの背景色変更しても色変わらなくて、2時間程経ってからsetOpaqueの存在を知りました。
もっと情報検索を上手いとこ出来るようになりたいですorz
>>102 >ポップアップメニューのL&Fの更新ってプログラマーの責任だったっけ。
1.7.0で修正されたはず。
>>104 1.7か。遠い未来・・・でもないがまだまだだろうなぁ
javax.swing.undoではまったのでメモ。 例えば、文字列の置換のような削除、挿入という複数の処理を1回で元に戻したい場合は UndoManagerを入れ子にする。 UndoManagerを2つ用意して、基本はサブに追加する。一塊の処理が終わったらend()を呼んでメインに追加する。 void undoableEditHappened(UndoableEditEvent e) { sub.addEdit(e.getEdit()); if (!compound) { sub.end(); main.addEdit(sub); sub = new UndoManager(); } } ちなみに普通にUndoをするだけならリスナにUndoManagerを追加するだけで出来ます。 JTextField tf = new JTextField(); tf.getDocument().addUndoableEditListener(new UndoManager());
HTMLDocument/HTMLEditorKitってなんでこんなに使いづらいんだブツブツ…
>>107 わー、同士よ。使ってる人、他にもいたんだ。
6u10以降、javax.swing.text.html
でちゃんと日本語HTML表示できている?
WebKitベースの新APIが1.7で登場するという噂はどうなったんだ…
>WebKitベースの新APIが1.7で登場するという噂はどうなったんだ… JWebPaneでしょ? JWebPane は、Java7からってことになってるけど、Java7は1年半後らしいからね、いつになるやら。 たしか、AIRはWebBrowserコンポーネントを提供してるから、 JavaFXがAIRに対抗するために、リリース時期が早まるんじゃないかと少し期待してる。
110 :
デフォルトの名無しさん :2008/12/13(土) 16:33:11
JavaやってるとWindowsのexeが作れない。。 また、SwingやAWTの設計でGUI画面作るのもちょっといやだ。 Windows専用のJavaGUIライブラリどこかの会社でうまいことつくってくれないかな? できれば、Delphi作ってる会社が作ってくれたりするといい。MSでもいいけど絶対作ってくれ無そう。 最悪、Javaで作ったファイルをWindows用exeに変換してくれるだけでもいい。できれば、UIもWindowsっぽくして・・
そんな思いまでしてjavaで作らなくても そういう要求って仕事でやってるわけじゃないよね
ネタ乙
>>110 Excelsior JET + SWT
どっちにしろ Swing とは関係ないネタだ。
exewrapで十分だろ Cocoaで作りたいとかいうならまだしもWindows寄りの設計って嬉しいか?
WinAPIもMFCも面倒なだけ
>>113 あるいはgcjという手もあるな。
Swingと関係ないのは確かにその通りだが。
>>110 >JavaやってるとWindowsのexeが作れない。。
つJSmooth
>また、SwingやAWTの設計でGUI画面作るのもちょっといやだ。
どこら辺が気にいらんの?
俺、SwingやAWTからGUIに入ったんでよくわからないんだ。
.netもやってるけど、上っ面撫でてるだけならそんなに違わないと
思ったが。
だからネタだっていってんだろw
うまい方法が見つからないのでちょっと相談。コンポーネントの配置の仕方なんだけど。 JLabel [JTextField] JLabel [JTextField] というように、4の部品がならんでいる。 JTextFieldは、JFrameサイズに応じて幅一杯まで伸び縮みできるようになってほしい。 JLabelは文字列のサイズで固定されてほしい。 ただし、上段と下段でJTextFieldの位置をきっちり揃えたい。 GridBagLayoutだと、位置はきちんとそろうけど、JTextFieldが伸び縮みできない。 GridLayoutだとJLabelとJTextFieldの幅が等間隔に割り付けされてしまうのでだめ。 1段分をBorderLayoutのWESTにJLabel,CENTERにJTextFieldを入れ、GridLayoutで縦にならべると、 だいぶ希望に近づくが、JLabelに入る文字列の長さが異なると、JTextFieldの頭の位置が上下でそろわない。 なんかいい方法ないかなぁ・・・
120 :
119 :2008/12/16(火) 15:10:57
それから PreferredSizeでJLabelのサイズを固定する方法も考えられるけど、 LaFが変更されたとき崩れない保証がなくなるので、できるだけレイアウトマネージャだけで解決したい。
>>119 GridBagConstraintsを適切に設定してないんじゃないか
public class Test {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setLayout(new GridBagLayout());
frame.add(new JLabel("Label 1:"), new GridBagConstraints(0, 0, 1, 1, 0, 0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
frame.add(new JTextField(), new GridBagConstraints(1, 0, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
frame.add(new JLabel("Label 2:"), new GridBagConstraints(0, 1, 1, 1, 0, 0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
frame.add(new JTextField(), new GridBagConstraints(1, 1, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
frame.pack();
frame.setVisible(true);
}
}
122 :
119 :2008/12/16(火) 19:16:21
>>121 ありがとう。
IDEのGUIエディタが生成したコードとにらめっこしたのですが、
weightx,weightyの値が1に設定されていなかったのが原因でした。
私はこまかいところに神経が行き届いていなかったようです。
勉強になりますた!
GroupLayoutが適切すぎる
JFrame frame = new JFrame(); JLabel label1 = new JLabel("Label 1:"); JLabel label2 = new JLabel("Label 2:"); JTextField field1 = new JTextField(10); JTextField field2 = new JTextField(10); GroupLayout layout = new GroupLayout(frame.getContentPane()); frame.setLayout(layout); layout.setAutoCreateGaps(true); layout.setAutoCreateContainerGaps(true); layout.setHorizontalGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup() .addComponent(label1) .addComponent(label2)) .addGroup(layout.createParallelGroup() .addComponent(field1) .addComponent(field2))); layout.setVerticalGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(Alignment.BASELINE) .addComponent(label1) .addComponent(field1)) .addGroup(layout.createParallelGroup(Alignment.BASELINE) .addComponent(label2) .addComponent(field2))); frame.pack(); frame.setVisible(true);
>>121 GridBagConstraints に引数付きのコンストラクタがあることを
初めて知ったよ。
IDEの吐くコードでのみ使えって、ドキュメントにはあったけど。
>>123 いつのまにか java.awt でないレイアウトマネージャが増えてくね。
JTabbedPaneでタブを表示させてるんだけど 特定の設定になった時はタブが5枚あったら、その3番目と5番目だけを非表示にしたいんだ setEnabledAtで選択不可には出来たけど、出来ることなら非表示にしたい… 機能的には選択不可で問題無いが、見栄え的に半端な位置のタブが選択不可になってるのはみっともなくて。 何か良い解決策は無いだろうか?orz
タブのペインをグレイアウトさせる。
タブを削除する
実際に試してないから成功するか分からないけど、 非表示にしたいタブを getTabComponentAt() で取得して setPreferredSize() で推奨サイズをゼロにする。 あるいはサイズがゼロのコンポーネントを用意して setTabComponentAt() を呼ぶ。
>>127 リファレンス読んだけどやりかた分からなかったorz
>>128 非表示にしても、タブ内のデータを見ることがあるから出きれば削除は避けたいんだ…
>>129 おお、ちょっと試してみる!サンクス!
>>130 >>128 がベストアンサーだと思う。
TabbedPaneの外でコンポーネントを自前で管理する。ってことだと思う。
管理といってもHashMapとかのコレクションで持っておくだけだけど。
>>131 なるほど…
HashMap、名前は良く見るが使い方を知ろうとしてなかったorz
ちょっと調べて色々試してみる。
>>130 ,
>>131 ありがとう
HashMapを知らないというのはJava屋として絶望的だな。
HashMapを知らなくても営業できるほどフレームークにおんぶに抱っこだったのか?
フレームーク
ガッチャピン?
>>132 人に聞いてばかりで自分で調べたりしてないからだろう
おまえの無能さが文章によく出てる
たった5個(実質2個固定)のタブ耳の管理にHashMapかよ。おめでたい話だ。 連想配列の実装したことあるのかい? これだからPerl厨は…
139 :
デフォルトの名無しさん :2008/12/19(金) 12:10:43
HashMapも知らない奴が何かほざいてるよww
オレ、JSplitPaneのコンポーネント管理をTreeMapで実装してるぜ! キーはもちろん"LEFT"と"RIGHT"さ!
141 :
デフォルトの名無しさん :2008/12/19(金) 13:11:15
アルゴリズムとデータ構造も知らない奴がプログラミングしても通用する時代になったんだな。
力業でもどうにかなるくらいに環境が豪勢になったからのう。
アルゴリズムとデータ構造も知らない奴がゲーム作りたいって巣くってるのがゲ製板だしな。
昔と違ってハード性能がよくなったからソースが見やすくて何よりです 対応表片手にビット管理とかもう嫌だお!
ハッシュマップと連想配列って似たようなもんじゃねえの?
呼び名が違うだけ辞書配列ともいう
ソースは頑張れば見やすく作れるようになっている。 チューニングする場所ってのは限られている。
つ revalidate
最初に
>>149 と同じようにrevalidateを試しましたが、他には
初めからsetVisible(false)でpanelにaddしておいて
スレッドでsetVisible(true)にするのもうまくいきました。
151 :
148 :2008/12/27(土) 18:44:27
>>149 >>150 返事ありがとうございます。
revalidateについて調べてみますね。
もし自分が理解できなかったら、
>>150 さんの言う方向でやってみたいと思います。
ありがとうございましたorz
JComponent#setVisible()を呼ぶともれなくrevalidateが呼ばれる件について
Swingでインクリメンタルサーチを実現したいのですが、 便利なクラス(インクリメンタル用)みたいのものはあるでしょうか? 自力で実装しなければならないとき、ヒントになる手法があれば教えていただけないでしょうか?
Swing Hacks
どのコンポーネントでインクリメンタルサーチするの?
156 :
デフォルトの名無しさん :2009/01/08(木) 00:23:41
JFrame#setLocation()が効かないんだけど、同じ現象遭遇してる人いる? JFrame#setVisibe(true)の前でも後でも全然きかない。 JFrame#setLocationByPlatform()もだめ。。
使用環境も書かず、どう効かないか、最初からなのか何かのきっかけでそうなったのかも書かず。 ウインドウマネージャ次第では強制的に再配置している可能性も。
>>153 >Swingでインクリメンタルサーチ
Googleのクエリ候補表示みたいな事を
コンボボックスでやりたいのかな?
それともいわゆるEmacsみたいなインクリメンタルサーチ
をJTextComponentで実現したいのかしら?
159 :
156 :2009/01/08(木) 19:25:06
>>157 すまん、
実行環境はWinXP、
開発環境はEclipse3.4
ビルドはJDK1.6.0_03、
実行JREは1.6.0_07に設定
現象は、どこにsetLocation()してsetVisible(true)しても画面左上にJFrameが表示されてしまう。
最初からです。
いかがなもんでしょう!?
>>159 ComponentListenerを使って、
いつ誰が左上に動かしてるのか見張ってみるのはどうでしょう。
レイアウトマネージャがよしなに配置してるだけじゃないの? ソース晒せ。 ふるいやつだと、わざわざgetContentPane().setLayout()するのが面倒だなあ。 ヲレクラスで更にラップするのがめんどくさがりにはよさそうだ。
update 7ってバグ多くなかったっけ?
>>159 import javax.swing.*;
public class Foo {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame f = new JFrame();
//f.setLocation(300, 300);//どちらか
f.setLocationByPlatform(true);//どちらか
f.setVisible(true);
}
});
}
}
みたいに単純化したものでも同じ現象になる?
うちはWinXP+1.6.0_11だけど、setLocationでもsetLocationByPlatformでもきちんと機能する。
Windowsの標準シェルならウインドウマネージャが強制再配置するようなことはなさそうだし…
そこでHashMapを使うんだ!
165 :
デフォルトの名無しさん :2009/01/10(土) 06:09:58
>>163 JFrameのコンテンツペインには何も追加しないの?
コンテンツペインに追加したコンポーネントのpreferredSizeに
スクリーンをはみ出さない程度のDimensionを設定したら、
setLocationがちゃんと効いた記憶があるんだけど。
違ってたらごめん。
コンポーネントなしのタイトルバーだけのJFrameでもsetLocationは効くのが普通だけど
>>159 のソースが分からないことには何とも言えんから問題の切り分けってことなら
>>163 のようなものでも動作がおかしいのならJava環境かWin環境自体が変な可能性大だし
削ぎ落としたものは大丈夫なんだったら
JFrame自身の位置情報に影響を与えるようなコンテンツが入れられているか
自分でも知らないうちに別の場所で位置を書き換えているようなコードを入れているかなので
差し支えない範囲でソースを出してもらわないと他の人間には判断のしようがないと思う
とりあえずソースを晒せ。それからだ。
JFrame でアプリを作り、Mac で起動し、 Mac の上部から 「〜〜を終了」 を選んで終了した際に ドキュメントが保存されていない場合には保存確認をとり、 キャンセルされたらアプリケーションの終了をキャンセルしたいのですが、 こういうことはどのようにすればいいのでしょうか?
169 :
デフォルトの名無しさん :2009/01/11(日) 18:44:18
JFrame#setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE) とかじゃなかったっけ? で、WindowListenerで閉じるときの処理を書く。
それが、ウィンドウを閉じた時はそこにくるんですが、 「〜〜を終了」 の時はそこに来ないようなんです。 addShutdownHook なら一応保存確認することはできますが、 アプリケーションの終了をキャンセルすることまではできなくて、 どうしたものかと思っています。
高橋麻奈の優しいJAVAで一通り覚えた。けどこれから何をすればいいのか分からん。 あれ。なんでJAVAを勉強しようと思ったんだっけwwwwwwww
やさしいJavaとか書いたらまあ湧いてくるじゃないか…
やさしいJavaと聞いてとんできました
やらしいJavaですか?(*ノノ*)キャー
エロく無いと学習意欲がわかない訳ですね。 マナタソに飽きたのなら他の娘に乗り換えてみるのも一つの選択肢。浮気性は嫌われるかもだが。 はじめてのJavaとか童貞が飛びつきそうなマヌアル本も必要な時期だなwww
178 :
デフォルトの名無しさん :2009/01/13(火) 21:43:44
もうすこしスレッドの扱いを楽に出来ないかね?
楽になったじゃないか
スレッドのどの部分が楽じゃないか書かないと分からないよ。 単に一般的でない変な使い方しようとしてるだけとか?
個人的には ThreadLocal と ThreadPool あたりが導入された時点で割りと満足だなー
ThreadPool ??
>>182 java.util.concurret.ThreadPoolExecutor とその関連
スレッドの仕組み的な話じゃないのか 描画スレッドとかさ
ここでSwingWorkerが出てこないのがこのスレのレベルの低さ
土方生活が長いとそんなものでも楽だと思うものなんでしょうか?
SwingWorker最低限絞ったAPIだからな。 使うっちゃ使うが小規模なアプリだな。
188 :
デフォルトの名無しさん :2009/01/16(金) 01:08:24
JavaFXのスレが立たないのは、なぜなんでしょ?
誰も使ってないからに決まってるじゃないか。 描画スレッドで特殊な用途? サブミリナルでも埋め込みたいとか? ちらつき程度ならダブルバッファ使って描画してれば充分だろうし。
190 :
デフォルトの名無しさん :2009/01/16(金) 23:59:30
>>189 誰も使いたがらない理由は、たとえば何なんでしょ?
・重い ・配布サイズでかい ・ツールが弱い
192 :
デフォルトの名無しさん :2009/01/17(土) 00:57:37
>>191 なるほど。
逆に軽くて、配布サイズ小さくて、ツールがよければ使うってことですかなぁ。
名前が今一ってのもあるな。 FXよりはFAとかDXとかのほうがよかった感じ。
FXとかFAとかDXとか言われると、PC98を思い出してしまうぜー。 PC98だと終わってしまうから、JavaNXでどーよ。
FXって投機臭がする名前だ
>>193 頓挫した「winFX」への当てつけじゃないの?
198 :
デフォルトの名無しさん :2009/01/17(土) 16:27:39
人気・・・・・あるのか・・・・?
JavaFXと比べれば
選択肢がなければ使わざるを得ない
202 :
デフォルトの名無しさん :2009/01/17(土) 17:12:54
>>199 あ、失礼、人気じゃないすね。Googleトレンドとかで、比較してみてということ
>>200 そいうことす
Flexでいいじゃん。
205 :
デフォルトの名無しさん :2009/01/17(土) 22:51:56
配布サイズって関係あるのか?毎日ダウンロードを繰り返すわけでもあるまいに。
本屋にjRubyの本有ったので眺めてみたら、rubyからswing呼べるのな。楽しそうだわwww
JavaScriptからでも何でも呼べるじゃん・・・
groovyからry
PHPか(ry
マジレスすると、言語を生かしたSwing呼び出しという点では、Groovyだな。 SwingBuilderはなかなかいい。
Cからswing使ってる漏れはどうやら勝ち組(ry
JTreeでソートしたくて ((DefaultTreeModel)getModel()).removeNodeFromParent(node); これでノードを外して parent.add(node); これでノードを追加してソートしてたんよ でも、これだと開いてるツリーが閉じてしまうんだ。 開いてるツリーそのままでソートする方法しらない?
215 :
214 :2009/01/25(日) 23:43:39
とりあえず、自己解決。 用意されてるメソッドでそれっぽいの見つけられなかったから、 現在展開してるパスを全部しらべて、ソートが終わってから開きなおすようにしたぜ。
216 :
デフォルトの名無しさん :2009/01/26(月) 01:38:21
久々にSwing使ってみたけど、相変わらず酷いなぁと思う ここのスレの人はなぜSwingを使うのだろう C#やVB.NETじゃダメなの? LinuxやMacで動かしたいわけじゃあるまいし。
217 :
デフォルトの名無しさん :2009/01/26(月) 02:09:41
マクで動かそうと思うと大変だから止めとけ。あれは異世界。存在しない物として扱ったほうが平和。 swing程度で十分というのが大きい。awtでもむしろ十分だが。 まあvs使えないだけとも言うが。コントロールをちまちまマウスで配置するくらいならコードで記述したい訳だ。
ポトペタなしのswingいじるのって、html手打ちするようなもんですよね ポトペタありでswingいじったことないんですけど
HTMLもアドビのソフトでちまちま設定するより、メモ帳で書いたほうが速いしなあ。
HTMLは手打ち以外の選択肢はないな 大昔は必要がなかったし、今はカススタイラーゆえ意味がない
ポトペタありのSwingってのもキモそうだな。 なんか、モデルやコントローラまわりで歪なコード吐きそうだ。
224 :
名無しさんに接続中… :2009/01/27(火) 16:31:56
SwingはなぜVBのようなデザイナーがないのだ?
HTMLも、業務アプリならポトペタがいいよなあ。
まあそういうときはAdobe Dreamweaverが最低ラインだな。
228 :
デフォルトの名無しさん :2009/01/29(木) 06:43:53
swingはなぜ流行らないんだ?
デカくて重いからでないかい
>>228 GUIフレームワークで流行ってるのってなに?
MFC、VB
そこらへんは他に選択肢ないから使われてるだけじゃ
そのとおりだと思うけど、 Swingはなぜそれらの代替になりえないのか・・・ 速度か?やはり速度なのか?
Mac版のリリースが遅すぎる!
先に普及したものが圧倒的に強いし。 単にSwingに既存のものを置き換えるほどの魅力がなかったってだけでしょ。
236 :
デフォルトの名無しさん :2009/01/29(木) 09:31:29
>>233 自分は長いことWindowsアプリケーションを作ってきたんでつが、V2Cという2chビューワを使い始めてSwingアプリの軽快さにびっくりしたです。
V2Cが純Swingじゃなかったらスミマセン
いや、純だよ。 やっぱJavaはもうちょいデスクトップアプリケーション強化して、それと速度に関してもどうにかアピールしないとなぁ
javaはもっさりってのが一般的な常識だからかもしれんね あと、表示が微妙にださかったり 俺はjavaしかまともに使えないから、swingをやってみた。 swingでダメだったらMS製品買えばいいかなーって感じで。 java以外も使えるようになりたいから、MS製品で遊んでもいいと思うんだけどね
>>238 > java以外も使えるようになりたいから、MS製品で遊んでもいいと思うんだけどね
じゃあ Express Editions でも入れて C# とかやればいいと思うよまじめな話
Linux系のGUIをJavaでSwingでってわけにはいかんのか? 用途としてはもうそっちしかなかろう
Hashtableが保持している値をJTableに表示させていて、 Hashtableの内容が変更されたら、それと連動してJTableの表示も変更されるようにしたいのですが 何か常套手段みたいなのが有るんでしょうか?
>>241 レンダラーやエディターで意図したものにあってるかな?
>>241 10msおきにHashtableを監視してJTableにイベントディスパッチジョブ投げるスレッドを常駐させる。
Hashtable派生させたりMapやTableModelでラップしてもいいなら、他にも手はある。
BeansBindingとかでなんとかならんの? 使ったことないけど
Hashtable使うのをやめる
10msおきに監視ってコスト高そうだ。負荷凄いだろwww 変更する処理にトリガ噛ませてイベント受け取るようにしたほうがよく無いか? ウェブ系とかjava前提の製品とかだとインストーラからjava GUIだったりはするね。 インストーラ作成用との便利なフレームワークとかあるんだっけか? 表示が微妙にださいってのは人それぞれだからなあ。窓すらださいって言い出すマカみたいな変人も居るし。マルチモニタとかにすら対応できてないマクのほうがださいだろって感じだが。 GCがアレなのか、使ってるともっさり感が増すし、メモリも喰いまくってるのが駄目だな。 それ故、MFC, VBにすら負けてしまう。java使いが作る側には不満無いけどね。純粋にアプリユーザの側にはjavaじゃないほうが快適。
>>247 >変更する処理にトリガ噛ませて
それが243の言ってる”Hashtable派生させたりMapやTableModelでラップ”で、
その実装が、244のソースだろ。
MFC、VBには負けるかもしれないけど.NetのWinFormsとはいい勝負だと思う。
場合によってはSwingのほうが速いし。軽い。
>>247 スレチだがマルチモニタ環境ってのはMacのほうが歴史がずっと長いんだけどな…
Windows XPじゃマルチモニタでカラープロファイルを別のをあてる、とかはできないしね。Vistaは知らん。
まー最近はWinのドライバのほうがマルチモニタでできること多いけれどもw
winのマルチモニタはMEからだっけ?98からだっけ? 個人的に、Macが先でMSがそれを追いかけたってのは、MSが先行するより信憑性がたかいw
ちょっと調べてみたが、 win98からマルチモニタ対応、しかしMacの対応時期がわからんかったw
助けて下さい。 画像を拡大表示しているのですが、アニメーションGIFの拡大表示で困っています。 JLabelのアイコンにアニメーションGIFを設定すると、 フレーム切り替えのたびに以下のメソッドが実行されます。 public void paint(Graphics g) public boolean imageUpdate(.... この時、毎回アニメーションGIFの画像を拡大してると表示がもっさりしてしまいます。 だから、一度拡大表示したフレームは拡大したイメージを保存しておいて、再利用したいのです。 そこで問題になるのは「表示しようとしてるのは何フレーム目なのか?」 これが分からないことなんです。 何か分かる方法しってる人いませんかorz
カラープロファイルなんて印刷屋でもない限りどうでもいいだろ。 問題なのはメニューとか操作GUIの設計。 マクの実装だと、メニューはメインモニターにしか表示されないはず。 窓や犬は、メインウィンドウ自体にメニュー付いてるから、メインモニターとかサブモニターとか関係無く自由に使える。
winも結構トンチンカンな動きするソフトいたよな サブモニタで右クリックしたら、メインモニタにメニューが出たり、 サブモニタで最大化したら、メインモニタで最大化したりw サブモニタで最大化したら、メインモニタの解像度に広がった時は非常に困ったw
サブモニタから起動したJARアプリのスプラッシュは、 やっぱりサブモニタに出て欲しいなあ。アプリはちゃんとサブ側に出る。 あ、当方WinXP+Sunの1.6系Java。 そのへん、Macはどうなんでしょ。
サブモニタから起動したかってどうやって判断するんだろ?
> アプリはちゃんとサブ側に出る。 前回終了時の表示位置覚えてるだけじゃなくて?
サブモニタから。。。起動?
俺のwinはタスクバーがサブモニタにあるんだが、これだと全部サブモニタに出ないとおかしくなるぜ
>>257 でいいと思う
Windowsの流儀は知らないけどタスクバーがある方を プライマリモニターと呼ぶわけじゃないんだ?
winのタスクバーはメインもサブも移動可能 てなわけで、俺のタスクバーはサブモニタに配置してあります メインかサブかは、画面の解像度とか設定する画面で設定できるっす
261 :
255 :2009/01/30(金) 22:56:24
・サブモニタのデスクトップ上のJARファイルをダブルクリック ・サブモニタに移動したエクスプローラからJARファイルをダブルクリック いずれもサブモニタにアプリが出る。 ジオメトリ関連でやってることはsetLocationByPlatform(true)のみ。 これを外してもやはりサブモニタに出る。 サブモニタのコマンドプロンプトからjava.exe経由で起動すると さすがにメインモニタにアプリが出た。 サブモニタのNetBeansから起動してもやっぱりメインモニタ。
>>261 おもすれー
ちょっと試しになんか作ってみよう
263 :
デフォルトの名無しさん :2009/01/30(金) 23:09:57
皆さんに聞きたいのですが、javaでどんなデスクトップアプリつくってますか? 今自分はタスク管理系アプリを作成しています。 メモ帳でいいじゃんはいいこなしでw
>>263 2chのスレッド監視してエロ画像勝手に収集するツール
>>263 携帯電話とmacとwinでスケジュールを一元管理するソフト
ADVエンジン
269 :
デフォルトの名無しさん :2009/01/31(土) 01:01:11
>>263 無駄にリッチなUIをもつ画像ビューワー
をJavaFXでつくりたい。
Swing学習中なんだけど、ドローツールみたいなのを作るとき、以下のどれがいい? 1) Canvasみたいなコンポーネントを作って、図形を全部自前で管理する。 2) 図形の種類毎にコンポーネントを作って、Panelとかに貼り付ける。 3) それ以外。思い付かないけど。
1かな。 ありがちなパターンだとShapeクラスを作ってそのクラスを継承したクラスを作る。 でJPanelを継承したShape描画用のコンポーネントを作って、paintComponentですべてのShpaeを描画する。
>>270 ネットワーク・グラフ描画用のライブラリをいくつか使ったことがあるんだけど、
そのどちらでもない設計が多かった。
>>271 が近い。
図形の管理はドロー用コンポーネントが行い、
実際の描画は図形オブジェクトに委譲している、と言えばいいかな。
図形の種類ごとにクラスを作るのは2と一緒だけど、
これらのクラスは独自のクラス階層を構成していて、
つまりJComponentのサブクラスではないので、そのままではSwingに乗っからない。
代わりに、図形を載せて描画する専用のSwingコンポーネントがある。
このドロー用コンポーネントは、paintComponentをオーバライドしていて、
addされた図形オブジェクトすべてに対して、paint系メソッドを呼ぶようになっている。
これらの図形クラスのpaint系メソッドは、各図形のための適切な描画を行うことになっている。
図形の追加の度にドロー用コンポーネントを変更しなくていいので、すっきりする。
Open-Closed Principleに合致しているね。
ライブラリによっては、図形クラスのpaint系メソッドがさらに別のオブジェクトに委譲可能で
ここがAdaptableだったり(JListのレンダラみたいなの)、
図形クラスを、Swing非依存のモデルクラスと、Swing依存のビュークラスに分けて設計していたり、
さまざまだった。
この手のライブラリはいろいろあるので、見てみるといい刺激になると思う。
挙げるなら、OpenJGraphとかJGraphとかJungとかかな。
「もしやJComponentを再発明しているのでは?」と思ったら、 思い切って資産捨てて透過JComponentベースで作り直す勇気も必要かも。 ドローツールとのことなので、まずは ・位置サイズのgetset、 ・可視性のgetset、 ・クリップしたGraphicsを渡すpaint ぐらいの軽い独自インタフェースで十分だと思うけど。
>>271-272 thx! 「グラフィックJava2」とか「Filthy Rich Clients」とか
引っくり返しながらいじってるんですが、既存コンポーネント以外
の話になると極めてプリミティブな部分しか載ってなくて、
どういう風に設計すればよいか、という部分については頭を
かかえてたので参考になります。
>>273 や、今のところ、「JComponentのサブクラス作って、その上にマウスで
Rectangleが描けるようにナッター\(゚∀゚)/」というレベルなので……。
その先に進もうとして、「これをつかんで移動させたり変形させたりしよう
と思ったら、図形もJComponentのサブクラスにした方がええんちゃうか?」
というのが質問の発端です。
JDrafterを参考にするといいかも
いや、宣伝じゃないよ あれは素直にすごいだろ jadで十分読めるから読んでごらん
スプラッシュなんてちゃんと見ないからどうでも良いな。 むしろ消せるオプションを標準実装にして欲しいくらいだ。気持ち程度、余計な事をしない分、起動が速く成るだろうし。 窓は融通が利くけど、マクはマクらしいとアポーが決めてるアプリの使い方しか出来ないように強制されてるのが嫌。 俺が買ったものくらい自由に使わせろって。
>>240 既存のフロントエンドをSwingに移行させるんなら
そこそこ市民権を得そう。
>>279 JavaSE6の機能でスプラッシュ出してるなら、起動速度は変わらない
つかスプラッシュ消えるの速すぎてタイトル嫁ねえw 一定以上の時間指定したい
起動をもっさり遅くすればいいんじゃね? 起動すればソフトのタイトル見えるんだし、わざわざ邪魔なスプラッシュ表示しとく意味ねえよ
java6のスプラッシュはVM起動時に表示されるんであってアプリ起動時に表示される訳じゃないからアプリをもっさりさせても意味ないよ。
まじかよw スプラッシュって起動中だからちょっとまっててな。ってニュアンスが一番よさげなのにw
きっとスレ違いでは無いはず・・・。 #include<gcj/cni.h> #include<javax/swing/JFrame.h> #include<javax/swing/JButton.h> #define JS(str) ::JvNewStringUTF(str) int main(void) { ::JvCreateJavaVM(NULL); ::JvAttachCurrentThread(NULL,NULL); { JFrame *frame=new JFrame(msg); frame->add(new JButton(JS("Okey"))); frame->setDefaultCloseOperation(JFrame::EXIT_ON_CLOSE); frame->pack(); frame->setVisible(true); } ::JvDetachCurrentThread(); return 0; } JFrameが表示された後、即main関数を脱出してしまう。 当然といえば当然だが、これを上手いこと防ぐ方法は無いか?
frame->setVisible(true);の後ろに↓を足したらいいんじゃね? try { while (frame->isVisible()) { Thread->sleep(1000); } } catch (InterruptedException e) { // 華麗にスルー }
>>287 スレッドで分離する方法とかもあるんだけど、
定石的な方法は無いだろうか?
>>288 どういう事?いまいち想像が付かないが。
291 :
290 :2009/02/02(月) 22:39:56
自己解決したっす。 // node.removeFromParent(); ((DefaultTreeModel)tree.getModel()).removeNodeFromParent(node); // ((DefaultTreeModel) tree.getModel()).reload();
292 :
290 :2009/02/02(月) 22:41:26
途中送信orz node.removeFromParent(); ((DefaultTreeModel) tree.getModel()).reload(); ↓ // node.removeFromParent(); ((DefaultTreeModel)tree.getModel()).removeNodeFromParent(node); // ((DefaultTreeModel) tree.getModel()).reload(); こうしたら閉じなくなったっす。 node.removeFromParent();ってなんか使いにくいんですかね?
ほんとに助けてほしいなら、わかんねーすっとかムカつく言葉遣いやめておいたほうがいいな。
別スレの空気嫁とかいいながら煽る人よりは
295 :
288 :2009/02/03(火) 14:44:18
>>289 スプラッシュが消えるのはFrame等が表示されるまでだから。
下のを-splash:temp.pngとかで適当にスプラッシュ表示させてみ。
import javax.swing.*;
public class SplashTest {
public static void main(String[] args) throws Exception {
Thread.sleep(5000);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame();
frame.add(new JLabel("てすと"));
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
というか、スプラッシュの表示時に表示したい時間分、sleepすれば いいだけなんだけどな。
そのスプラッシュ超いlらないなw
5分ぐらいスリープしとくとちょうどいいんじゃないかな
どん兵食うのにか?
それだ! スプラッシュにラーメンタイマー機能をつければいい!! で、何の話だっけ?
どんべえも最近は3分じゃねぇの?ってとこまでは読んだ。
5分か3分か選べるオプションをつければ完璧という事は魂で理解できた
ていうか、スプラッシュに「閉じる」ボタンがあれば誰も困らないのに…
スプラッシュが閉じるときに、音を鳴らす必要があるな。
蓋を閉めてジャヴァアプリを起動する必要があるけどな。
4分を舐めると火傷するぜ・・・
>>306 頭使えよ
5分設定で起動してから1分後にお湯を入れればいいんだ
じゃあ1分くらい用意してくれよ
これじゃスプラッシュでないじゃん
すみませんが、質問させてください。 Swing Application Frameworkをバリバリ使ってます、方ってこのスレでいますでしょうか? 創るJavaでJavaを再学習しているのですが、実際のアプリSwingだといろいろ管理が面倒だな、と思っていたときに 上記のフレームワーク見つけたのですが、1.03になってもあまり流行っている感じがなかったので 問題があったのかぁ、と思ったので・・・・ 使っている方で、「この辺が便利だよ」、とか「これが使えない」とかありましたら教えていただけないでしょうか?
>>311 使ってないけど、J2SE7に含まれるらしいよ
けど誰か忘れてたけどアプリケーションクラスがシングルトンになってる時点でだめだとか書いてたような・・・
ポップアップメニューのsetLightWeightPopupEnabledに相当するメソッドは JMenuにはないでしょうか? ポップアップメニューにJMenu追加して分岐させたら、 分岐させたメニューが表示できませんでしたw setLightWeightPopupEnabled使わないとポップアップメニューを出せないような作りが悪いのかもしれませんが。 もしあったら教えてください。
>>313 JMenu#getPopupMenu() で取ってきたポップアップメニューに setLightWeightPopupEnabled
>>313 どう考えてもSwingの描画ぶっ壊してるから他の部分でも見えてないだけで問題があるかと。
>>315 はい、継承してコネコネしてるJLabelの上だとポップアップメニューがでないんです。
いつか直さないと。
>>314 ありがとうございます。
JMenuの中にpopupMenuがあって気になってましたが、それでいけそうな気がします。
>>314 めでたく上手くいきました。
ありがとうございました。
アプリケーション終了時に、ウィンドウの位置とサイズを記憶したいです。(次の起動時に復元するため) この時、最大化した状態で終了すると、元に戻すボタンを押した時のサイズを取得できません。 この元の位置(できればサイズも)を最大化してる状態で取得する方法はないでしょうか? ※自分でやった事 ComponentAdapter#componentMovedを使って、 getExtendedState() == NORMALの時に位置を記憶させてみたものの、 最大化した時にgetExtendedStateがNORMALの状態で動いてしまい、 位置を-4,-4で記憶してしまいます。 マルチモニタでも動かしたいため、0以下の値を弾くわけに行かなくて困っています。 componentResizedが動く時はgetExtendedState() == MAXIMIZED_BOTHになっているため、 サイズはなんとか記憶させることができました。
EDTの簡単な取得方法はありませんでしょうか?
6u12でAWTとSwingの限定的な混在がサポートされたな。
>>319 EDTを取得して何すんの?
↓でできるけど
import javax.swing.SwingUtilities;
public class GetEDT {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
//↓こいつがEDT
Thread edt = Thread.currentThread();
System.out.println(edt);
}
});
}
}
>>321 それは分かりますが、単純にEDTが走ってればそれを返して、動いてなければnullみたいなのがありそうだなーと思っただけです。
確かに用途は少ないですね。
Thread#setUncaughtExceptionHandler()をEDTに設定したかったのですが、すでに取得する方法があればそれを使用しようと質問しました。
わざわざくだらない質問に答えていただきありがとうございました。
JTextComponent でスペースバーが押されたらアクションを実行し、 その際空白文字は入力されないようにしたいのですが、 以下のようなやり方(いちおう動く)でよいのでしょうか? もっと一般的な方法はあるでしょうか? Keymap keymap = textComponent.getKeymap(); // スペースバーにアクションをマッピング KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0); keymap.addActionForKeyStroke(stroke, action); // スペースバーが押されても空白文字が入力されないようにする keymap.setDefaultAction(new DefaultEditorKit.DefaultKeyTypedAction() { @Override public void actionPerformed(ActionEvent ae) { String cmd = ae.getActionCommand(); if (!cmd.equals(" ")) { super.actionPerformed(ae); } } } );
>>326 コピペでスペースが入ってきてもやっぱり弾くのかな。
ならばjavax.swing.text.DocumentFilterで弾くのが楽じゃない?
328 :
sage :2009/02/10(火) 21:13:11
>>326 Documentに、特定の文字列が挿入されるのを防ぐ場合には、通常DocumentFilterを使う。
Documentにスペースが挿入されても構わなくて、キーボードからの入力のみフィルタするなら、
KeyListenerを使ったり、processKeyEvent(),processKeyBinding()等をオーバーライドして
実装することもできるけど、いずれもコードが汚くなるから、326の処理でいいと思う。
あとは、瑣末な問題だけど、個人的には、ActionEvent#getActionCommand()の戻り値が
nullでないとは規定されてないから、if (!cmd.equals(" ")) を!" ".equals(cmd)にするか、
if (cmd != null && !cmd.equals(" "))に変更するぐらいかな。
>>326 おれが作るならばDefaultKeyTypedActionの継承はしないで
keymap.getDefaultAction()して保存おいてスペース以外ときは
そっちに移譲するようなActionにするかもしれない。なんとなく。
331 :
326 :2009/02/11(水) 00:24:39
>> 327
今回はキーが押された場合のみを処理したいので
DocumentFilter は使えないのですが、
回答ありがとうございます。
>>328 >>329 を参考にして
こんな感じにしてみました。
final Action defaultAction = keymap.getDefaultAction();
keymap.setDefaultAction(new AbstractAction() {
@Override public void actionPerformed(ActionEvent ae) {
String cmd = ae.getActionCommand();
if (!" ".equals(cmd)) {
defaultAction.actionPerformed(ae);
}
}
} );
UIによって独自のデフォルトアクションが
セットされるかもしれない(?)ので、
>>329 の案のほうがよいかと。
まずEDTといってもシステムキューの方かSwingEDTの方なのかはっきりしてもらわんとなぁ。 単にEDTと言ったらjavaの場合SwingEDTの方を指す場合が多いからややこしい。
>>332 システムキューって何ぞ?
用語が一般的過ぎて、ぐぐってもそれらしきものが引っかからん。
説明資料へのリンク希望。
AWTイベントキューとは違うもんなんだよね?
334 :
sage :2009/02/11(水) 10:31:21
>>331 Actionに委譲するのは良いんだけど、
>UIによって独自のデフォルトアクションがセットされるかもしれない
ということを考慮するなら、委譲するActionの参照を保存してたらダメでしょ。
UI変更時に、上記のコード自体が再実行されるなら、アリだけど。
>>333 同じ、AWTのEDTの事をAWT event queues systemと表記する場合とSystem Queueと表記する場合がある。
今はどうなってるが知らんが。
>>335 んー、そうすると、昔は知らんが、今はシステムキュー==AWTのEDT==SwingのEDTなんじゃ?
>>330 に書いたように、Java1.3 以降は
javax.swing.SwingUtilities.isEventDispatchThread() == java.awt.EventQueue.isDispatchThread()
なんだし。
337 :
326 :2009/02/11(水) 23:57:03
>>334 説明不足でしたが
updateUI() をオーバーライドして
super.updateUI() の後に処理を書いているので
たぶん大丈夫だと思います。
廃止したら、古いアプリケーションが動かなくなるからな。 ところで Cloneable はスペルミスなのに Closeable は間違いじゃないんだな。 ややこしい。
互換用のjarを用意して、コンパイル時にはエラーにしてしまえばいいのに。
コンパイルエラーにする代わりに警告を出してるんでしょ。 問題ないと思うけど。
>>340 互換用のjar吐くフリーソフトとか作ったら需要あるかな。
メソッドシグネチャだけコピーして、どれを呼んでもErrorなげる実装とかいうやつ。
JDKのライセンス違反になるからダメ。 java.*、javax.*、sun.*以下のクラスは変えちゃいかんのよ。 勝手にクラス追加するのも禁止されてる。
JEditorPaneで単純にHTMLを表示する場合なんだけど、 <a href="#hoge">Hoge</a> . . . . . . <a name="hoge">ここにくる</a> とやって、ページ内でジャンプさせることってできないんだっけか?
>>344 クリック監視はHyperlinkListenerで。
そこからJEditorPane#scrollToReference("#hoge")でなんとかなんないかな。
>>345 ありがーと!
うまくいった。
JEditorPane#scrollToReference("hoge")
で、#はいらないようです。
うふっ
349 :
:2009/02/26(木) 20:25:14
JLabelがクリックされたとき、JLabelではなく親のコンポーネントがクリックされたことにしたいのですが どういしたらいいでしょうか。
>>349 あほらしい方法だけど
public void mouseClicked(MouseEvent e) {
JComponent c = (JComponent)e.getSource();
for(MouseListener l :c.getParent().getMouseListeners()){
l.mouseClicked(e);
}
}
俺なら親のaddMouseListenerをオーバーライドしたいな
俺俺なら親にディスパッチする
353 :
sage :2009/02/26(木) 22:54:12
俺俺俺も親にディスパッチするな。 350 みたいに実装するなら、MouseEventを変換してやらないと。
まぁ俺の方がディスパッチするけどね。
ディスパッチってどうやってするねん?
俺も
>>350 みたいにリスナーぶち込みで対処したことがある
356 :
sage :2009/02/26(木) 23:17:41
>>355 java.awt.Component#dispatchEvent(AWTEvent)嫁。
357 :
349 :2009/02/27(金) 00:35:17
getParent().dispatchEvent(event);が一番短くかけるみたいですね。
>>350 から355のみなさん、どうもありがとうございました。
普通に JLabel の親に対して
addMouseListener(MouseEvent) を呼べば
>>349 に書かれてるような挙動になるけど。
c.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { c.removeKeyListener(this); } }); どさくさにまぎれて、一度だけ実行されるリスナーの小技。(流れ上、マウスリスナでないのは手抜き) めったに使う機会がないと思うけど。。
それいけるんだ Iteratorのループで出来ないかと思ってた〜
JComponent.setFont(new Font("メイリオ", Font.BOLD, 42)) とすると一回目だけすごく遅いんですが、フォントの読み込みは 何かテクニックがあるんでしょうか?
アプリケーション起動時にあらかじめ読み込んでおくくらいしかないよ いずれにせよロード時間はかかる
363 :
デフォルトの名無しさん :2009/03/01(日) 17:17:19
Java SE Development Kit (JDK) 6 Update 11 Eclipse3.4.1 WindowsXP SP3 上記の環境があり、そこでGUIアプリをJavaで作成しようと思っています。 Swing(?)ってのをElipseのメニューから探したのですが、見当たりません。 JavaSEをアンインストールして、JavaEEをインストールするのが妥当な選択なのでしょうか? それともplug-inがまた別にあるのでしょうか?
>>363 LANケーブルを抜いてクビをククルのが最速
365 :
デフォルトの名無しさん :2009/03/01(日) 17:49:20
exlipseの標準環境だと、swingアプリはメモ帳でhtml手打ちするようなのりで、 自分でソースコード書いて全部作ることになるっす。 net beansとかいうの使うと、VBみたいなポトペタを標準でできるらしい eclipseもプラグイン導入するとポトペタできるらしい が、swingでポトペタやったことないんでわかりません。
>>366 Swingやるなら現状ではNetBeans一択らしい。
EclipseプラグインのVE(VisualEditor)は使いもんにならんそうな。
俺はEclipseで手打ちしてるけどナー。
# EcilpseからSwingアプリを起動すると、フォント構成ファイルが無視されて、
# 日本語じゃないフォントで日本語がレンダリングされるという問題も……。
# おかしいなー、フォント構成ファイルの読み込み自体は正常に行われてるんだが。
つ jigloo
じぐるーも重いしすごくグループレイアウトが使いにくいしだめだよなぁ
NetBeansでGUI作って、Eclipseに持ち込んでる俺。 他にもいるでしょ、こんな人。
>>367 VEは使ってみて、脱力した。
正直、自分の脳内でレイアウト組んだほうがマシ。
最近は更新もされてないんじゃなかったっけ?
swingの印刷機能って、コンポーネント上の文字がカクカクになって印刷されるんだけど、 これって普通なの?
>>370 NetBeansでそのままつくらずに、Eclipseに持ち込む理由はなんですか
大技見つけたぜぃ。 Javaで比較的簡単にホットデプロイする方法。 まず、デプロイしたいクラスのベースとなるHogeを作っておきます。 そして、それを継承したHoge00というクラスを作ります。 ただし、このクラスのファイル名はHogeXX.javaという風にします。 コンパイルできなければ対策を考えますが、クラスをpublicにしなければ通るようです。 そして、修正してデプロイするときには、Hoge00をHoge01という風にクラスの名前も変えます。 ファイル名はそのままです。 クラス名を変えるとコンストラクタ名まで変えないといけません。この時の小技として コンストラクタの処理を全て関数にしてHoge00クラスにはコンストラクタを記述しないようにします。 その為、Hogeクラスには空のデフォルトコンストラクタを用意しておきます。 あとは、コンパイルしてシステムのクラスローダを使ってHoge01クラスを読み込んで Hogeにキャストして使用できます。Hogeにはインターフェースとなる関数を用意しておきます。 従来の方法だと別のクラスローダを使ったりするので、同じクラスを違うクラスであるとしてしまう為 キャストしたり出来ません。なので、リフレクションなどを使ってアクセスする事になります。 これがどうもうまくないと思ったので、別の方法を考えたら思いつきました。 今からサンプルを作ります。
なんだか麻布の臭いがする。。。
379 :
デフォルトの名無しさん :2009/03/04(水) 10:33:20
GUIはまったく初心者だったけど「Javaアプリケーション作成講座」という本を読んで だんだんわかるようになってきた とりあえず簡単なテキストエディタやブラウザは作れるようになった
javax.tools.ToolProvider.getSystemJavaCompiler()がnullを返すのは JAVA_HOME\lib\tools.jarにクラスパスが通ってない事が原因でした。
ネタ・・・じゃ・・・ないの・・・・か?
Swingに印刷プレビューダイアログってありますか?
作れば良いんじゃないの
384 :
sage :2009/03/06(金) 00:33:36
swing自体スレッドセーフじゃなかったと思う
1.4.2で直ってないって書いてあるし、放置されてるんじゃね?
この再現コードみたいなことをすること自体基本的にないからなぁ
ざっとソースをみたところ、スレッドセーフじゃないね。 テキストのモデルであるDocumentへの書き込みがアトミックであったとしても、 UIスレッドを用いてコンポーネントから何らかの値をとってくるメソッドで Documentのインスタンスを2回以上使うような操作をする全てのメソッドは その間はDocumentへの書き込みを排他していないといけないはずなのだが、 少なくとも、getTextメソッドでは、そんなめんどくさいことはやってない。
390 :
389 :2009/03/06(金) 01:15:33
ソースは Java 6 しかみてない。すまん
setTextする処理をEDTに投げればいいんじゃないの?的外れだったらごめん。
>>389 >.少なくとも、getTextメソッドでは、そんなめんどくさいことはやってない。
setTextの話だったんだけど、typo?
>>392 getTextが変な値を返す原因がsetTextをUIスレッド以外でアクセスしたことにあるなら、
setTextはスレッドセーフだといえる?
>>393 setTextの時点で変な値にならないのであれば、setTextはスレッドセーフじゃないの?
(よくわかってないかもしれん・・・)
そもそも
>>384 の再現コードは、getTextした値が""や"12"や"21"になることがあり、
以下のように思ってるんだが、違うかな?
""は、setTextが値を一度クリアしたタイミングで、getTextしているから。(getTextがスレッドセーフではないから)
"12"や"21"はsetTextがロックする前にAbstractDocument#getLengthを呼び出していることが原因。
(setTextもスレッドセーフではない?)
JavaDoc を見る限り getText() はスレッドセーフじゃないんだな…知らなかった…
別スレッドからsetText()して結果的に画面に"12"や"21"や""が描画される
ことがないのであれば setText() はスレッドセーフといえる…のかな?
でも現状は
>>394 のいうようにsetText()もスレッドセーフじゃないように見えるなぁ
setText()のスレッドセーフを確認するのに、スレッドセーフではないgetText()が絡んでくるとややこしくなるので setText()するたびに文字列を溜めておいて、最後に検証するというのはどうだろう。
AbstractDocument.readLockを使えば、少しはましになるけど、ダメだった。 たまに、"12"と"21"が出てくる。
swingコンポーネントをディープコピーしようとしたら、 Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: java.io.NotSerializableException: com.sun.java.swing.plaf.windows.XPStyle$Skin っていわれるんだけど、どうすりゃいいの?
Beans Bindingはもう見捨てられたのかと思ってたけど、先月スペックリードが変わってるね。 これは期待してもいいんだろうか。
スペックリードとは仕様定めるリーダーみたいなものでしょうか?
複数のクラスで共用するダイアログなどで、わざわざそれぞれのフィールドとして持たせたくない場合は、UIUtilitiesなどを作ってそこでshow***といった感じで定義しても問題ないでしょうか
逆に何を懸念しているのかがわからない
Swingを勉強するのにお勧めの書籍とかある?
どのレベルか、どんな記述が読み易いか示さないと何とも。
>>404 Javaの勉強を始めたばかりで、プログラミング言語Java第四版を読み終わったところ。
まあまあ読みやすかった。訳も気にならなかった。
Head Firest Java 第二版を読んでる最中で、
面白いと思うけど、実用性には欠けると思っている。
ざっと機能を概観する入門書と、詳しい内容の2冊進めてもらえるとうれしい。
こんなところでどうでしょう。
swinglabs.orgがもう一週間近く死んでる。
頭いい人は本から入るのかね? わしは本読んでると眠くなるんで、いきなりソースコードと戦う派なんだが
武闘派か。端から見てるとPCに向かって何か遣ってる引きこもりにしか見えないが。
>>405 詳しい内容ではないが実践的な内容ならEffective Java。
Swing関係ないけど。一通りJavaで組めるようになって開発規模が
大きくなってきた頃に手に取ると大変有用な本だと思う。
>>409 Swing本当に関係ないなww
Swingの本を薦めてくれ。
>>410 申し訳ない。ただJava勉強中のようだったのでつい。
確かにSwing関係ないけど間違いなく勉強になる良い本だよ。
「良いクセ」を学べる本なので、中級へのステップアップ時には
是非読んだ方が良いですよ。
Swing本については、他の人よろしく〜
>>411 気持ちはありがたいが、既に本棚にあるのだww
JavaはJava教室で買わされた本しかもってない、 Swingはグーグル先生に聞いてなんとかした、 読んでないからいい本なんて分からないんだぜ Effective Javaは良さそうだな、読んでみようか
>>413 ちゃんと本を読まなかったので、
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
の必要性を知らなかった。
人が書いたコードを見ても、余計なことをしてると思っていた。
そんなの見た事無いや。orz 解説頼む。
>>416 Swingは、スレッドセーフじゃないから、初期化もイベントディスパッチスレッドで実行しないといけない。
invokeLaterを使うと後でイベントディスパッチスレッドで実行される。
本ならSwing Hackが実用的かも。 Swingの入門書の次くらいに読むといい本。
>>419 本屋でSwing Hackをみてきました。見た感じTIPS集みたいですね。
よさそうな入門書だと「Java GUIプログラミング」のVol.1, Vol2なのですが、
ちょっと本気すぎる感じです。以外にSwingの本って売ってないですね。
>>420 本を買う前に最初はsunのjavaサイトにあるswing関連のチュートリアルで十分じゃないか?
APIリファレンスのswingコンポーネントクラスの説明文の多くにリンクがあったりする。
英語を読むのは面倒くさい いや読むけどさ(ブツブツ
>>420 入門書ってどれもほとんど大差ないから。
「Java GUIプログラミング」が本気すぎるとなると習う前に慣れたほうが良いかも。
となるとSwingチュートリアルのソースがベストかな。
英文を隅々まで読まなくても、ソース読んで、実行してみればだいたいわかってくる。
JOptionPane#showXXXDialog()で適当なコンポーネントをつめたJPanelを 表示した際にダイアログのボタンじゃなくてJPanel内の特定のコンポーネントの 方にフォーカスがあたるようにすることってできる?
>>427 JOptionPaneをカスタマイズしてJPanelを埋め込んだ場合に、ダイアログのOK/Cancelボタンではなくて追加したJPanel内のコンポーネントに入力フォーカスを当てたい、ということだと思われる。
できると思う swing フォーカスでぐぐりゃ解決しそう
>>428 そういうことです.わかりにくい文ですみません.
>>492 ぐぐってみました.
ttp://terai.xrea.jp/Swing/DefaultFocus.html JOptionPane#showXXXDialog()系だとJDialogやJFrameがとれないから
FocusTraversalPolicyをセットしたりWindowLister#windowOpend()や
ComponentListner#componentShown()でrequestFocus()呼べないよなー
とか思ってました.
んで上のページの EventQueue#invokeLater() 方式を試してみましたが
手元の環境ではJOptionPaneの場合フォーカスはOKボタンの方になってしまいました…
431 :
430 :2009/03/19(木) 11:39:29
試したコードはこんな感じです public static void createAndShow(){ final JTextField textField = new JTextField("Hello"); EventQueue.invokeLater(new Runnable(){ public void run() { textField.requestFocusInWindow(); } }); int result = JOptionPane.showConfirmDialog( null, textField, "Input Text", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); }
432 :
デフォルトの名無しさん :2009/03/19(木) 12:09:21
>>431 実際にフォーカスを取得するまで、
requestFocusInWindow() を何度も呼んでみるとか。
ちょっと力技かもしれないけど HierarchyListener を使えば
JOptionPane.showXxxDialog() で作られるダイアログを取得できる。
そのダイアログに対して
WindowListener か ComponentListener を使えばよい。
「コンポーネントが画面に表示されたときに特定の処理を行う」
って、意外と難しいよね?
JSplitPane が表示されたときディバイダを中央に移動させる方法を
見つけるのに、すごく苦労したことがある。
433 :
430 :2009/03/20(金) 00:09:49
>>432 なるほど HierarchyListener は思いつきませんでした。これなら動きそうですね。
>>431 のコードはEventQueue#invokeLater()じゃなくて javax.swing.Timer で
1秒後とかやったら期待通り動いたんでタイミングの問題なんでしょうねぇ…
PC性能によって必要な delay 時間が変わるからTimerでやるのは微妙だなー
と思ったけど何度でも呼んでみる的アプローチで繰り返しありの Timer を
設定してフォーカスがとれたら Timer を止める、とかでもできそうですね…
final JTextField textField = new JTextField("Hello"); JOptionPane pane = new JOptionPane(textField, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION); JDialog dialog = pane.createDialog("Input Text"); dialog.addWindowListener(new WindowAdapter() { @Override public void windowOpened(WindowEvent e) { textField.requestFocusInWindow(); } }); dialog.setVisible(true); dialog.dispose(); Object o = pane.getValue(); int result = (o instanceof Integer) ? (Integer)o : JOptionPane.CLOSED_OPTION; うそくさいし、ひどく面倒
435 :
430 :2009/03/20(金) 13:14:55
>>434 確かに JOptionPane を直接使えばJDialogがとれますね。参考になります。
戻り値の扱い周りとかが大変面倒くさそうですけど…
>>432 >「コンポーネントが画面に表示されたときに特定の処理を行う」
Component#addNotify() / removeNotify()をオーバーライドでできると思う。
>>436 addNotify() が呼ばれたとき、
そのコンポーネントが表示されてるとは限らない。
たとえば Window.pack() を呼んだとき、
(たとえウィンドウが不可視であっても)
ウィンドウ内のすべてのコンポーネントの
addNotify() が呼ばれる。
あと、親コンテナの doLayout() が呼ばれるまでは
コンポーネントのサイズが確定しないので、
オーバーライドした addNotify() から
JSplitPane.setDividerLocation() を呼んでも機能しない。
JTableのセルをアニメーションして移動したり表示したりしたいのですが どういう方法が一番いいでしょうねぇ・・・
単純にセルを描画する命令をタイマーで呼ぶしか方法はないのでは? その具体的な方法でしょうか?
えーと、よくSFとかでありますね 上から1行ずつアニメーションしてさらさらと出てくるような表や 項目を追加したらふわっと最終行が浮かんでくる といったような描画をどうやってやるかということに悩んでいます Timer自体はいくらでも使えるのですが
JTableはセルそれぞれがコンポーネントというわけではないので、あまりスマートにはできません。 上げられた二つの例に限ってですが、代替策として、glasspaneでだますというのはどうでしょう? それがいやなのであれば、Timerかなにかでアニメーションさせてください。
JTreeでツールチップ表示中にホイールスクロールするとやたら重いんだが どうにか、普通にスクロールさせる方法はないかね
ツールチップが重い処理だからそんなもの。 無効にするしか。
>>443 ツールチップを常に重量コンポーネントとして表示すればよいと思う。
普通 JScrollPane でコンポーネントがスクロールされるときは、
現在表示されているビューポートの外観を少しずつずらしてコピーすることで、
高速なスクロールを実現している。
しかし、軽量コンポーネント(たとえばツールチップ)が
上のレイヤーに重なっているときは、
スクロールされるたびにビューポート全体を再描画しなくてはならないので遅くなる。
>>441 ありがとうございます
GlassPaneを調べてみますね。それ以外の場合、Timerでアニメーションするとよいとのことですが
アニメーションの内容はどのようなものを?
TableSellRendererやJTableなどをいくら拡張しても中々難しそうですね・・・
>>442 なかなかすごそうなコンポーネントです。これはどういうものでしょうか?
最近beansBindingを触って疑問に思ったのですが、 ColumnBindingに対してvalidatorを設定した場合、 バリデーションエラーが発生した行の取得はどのようにすればよいのでしょうか?
横方向に中央であればFlowLayoutでシンプルに実現できますが、縦方向に中央に配置したい場合の簡単な実現方法はありませんでしょうか?
>>448 Y_AXISなBoxLayoutで子コンポーネントそれぞれにsetAlignmentX()でCENTER_ALIGNMENTを設定するのは?
FlowLayoutと違って子コンポーネントの幅は推奨サイズでなく最大サイズに影響されるので、
推奨サイズにしたいなら子コンポーネントの種類次第では最大サイズを設定してやらないといけないけれど。
private static JLabel createLabel(String text){ JLabel lb = new JLabel(text); lb.setAlignmentX(Component.CENTER_ALIGNMENT); lb.setMaximumSize(new Dimension(300,30)); return lb; } public static void main(String[] args) { JPanel pn = new JPanel(); pn.setLayout(new BoxLayout(pn,BoxLayout.Y_AXIS)); pn.add(createLabel("hoge")); pn.add(createLabel("fuga")); //... } このようなコードで試してみましたが、やはりY方向には上に詰められてしまいます。 中央寄せしたいコンポーネントの上下をBox.createVerticalGlue()で詰めるというのはありでしょうか?
>>450 縦方向に中央揃えでコンポーネントを並べることと勘違いしてた。
Box b = Box.createVerticalBox();
b.add(Box.createVerticalGlue());
b.add(コンポーネント);
b.add(Box.createVerticalGlue());
みたいな感じでいけるんじゃないかな。
でももしかすると上下のグルーが同じ比率で伸びずに完全なセンタリングにならないかも。
その場合、どれくらいで簡単な実現方法とならないかが分からないけれど、
GridBagLayoutやGroupLayoutみたいな少し複雑なレイアウトマネージャを使うとか、
縦方向について中央配置するマネージャを自作するとか。
>>450 縦に中央ってこんな感じ?
JLabel label1 = new JLabel("Hello, World!!");
label1.setBorder(BorderFactory.createTitledBorder("label1"));
label1.setAlignmentX(JComponent.CENTER_ALIGNMENT);
JLabel label2 = new JLabel("Goodbye, world!!");
label2.setBorder(BorderFactory.createTitledBorder("label2"));
label2.setAlignmentX(JComponent.CENTER_ALIGNMENT);
JPanel inPanel = new JPanel();
inPanel.setLayout(new BoxLayout(inPanel,BoxLayout.Y_AXIS));
inPanel.add(label1);
inPanel.add(label2);
inPanel.setAlignmentY(JComponent.CENTER_ALIGNMENT);
inPanel.setBorder(BorderFactory.createTitledBorder("in"));
JPanel outPanel = new JPanel();
outPanel.setLayout(new BoxLayout(outPanel,BoxLayout.X_AXIS));
outPanel.add(inPanel);
outPanel.setBorder(BorderFactory.createTitledBorder("out"));
JFrame frame = new JFrame("VerticalCenterLayout");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//frame.add(BorderLayout.WEST, outPanel);
frame.add(BorderLayout.CENTER, outPanel);
frame.pack();
frame.setVisible(true);
初心者です。 javaでゲーム製作の本を買って、 コードがすべてAWTで書かれてるんですが、 swing用の本を買いなおしたほうがいいですか?
>>453 別にそんなことないだろ。
Swingの本なら、awtの知識は前提としているだろうし。
>>454 ありがとうございます。
今の本で勉強してみます。
>>453 時間の無駄をいとわないならその本でOK。
時間の無駄がいやなら買いなおすべし。
ゲームを作るつもりでその本を買ったなら Swing の本を 買い直す必要は全くないと思うが… Swing の勉強をするつもりで買ったの?
あとでswingの本読んで、swing化してみるのは実力が付いていいと思うけどね。 基本は大事。
>>440 >>453 ゲームで、グラフィック表示ばっかりなら、Swingはあまり関係ないと思われる。
java.awt.Graphics2Dを使ってるから「コードがすべてAWT」というオチではないよな?
440関係なかった・・・
javaでゲームだと結局java2dだとか3d使うんだべ
そんなことないべ。 コマンドアドベンチャーとかなら、普通に既存コンポーネントだけで作れるべ。
>>463 Java Web Startにすると、そのあたりも自動でインストールしてくれるらしい
>>464 そんなうまい話があるわけない。
開発者の手間は変わらない。(JNLPの分面倒か)
468 :
465 :2009/04/03(金) 07:15:22
>>466 "自動で"とか勘違いさせるような発言について書いたんだが
Java3Dサイトのデモでは自動でJava3Dがインストールされるように見えるが。
470 :
デフォルトの名無しさん :2009/04/03(金) 08:59:32
スタンドアロンでも普通に実行できるようにならんかね ネットワークアクセスしてもいいから
jarファイルにすれば実行できるぞ
JFileChooser で、ファイルチューザーのダイアログを開いた時に表示されるディレクトリを マイコンピュータにしたいんですが、どうしたらいいでしょうか?
任意のファイルを自動でインスコできたら、セキュリティ上問題が有るな。
だから認証が出るわけだな。いまさら何を。
マニフェストに記述した JAR 内の画像をアイコンにするくらいしてほしいね。 まぁ JWS でデスクトップに好きな画像のショートカットアイコン作れるけどさ。
テキストを編集できるフレームで特定の文字がある行だけ 編集不可能にするにはどうしたら良いでしょうか。 netBeansのエディタみたいにするには?
カーソル移動のイベントを受け取って、その位置の含まれる行を見て setEditable() で切り替えるとか。
実際にやったことないから分からないけど DocumentListener とか使うのでは
あるいは CaretListener を使って キャレットが移動するたびに必要に応じて setEditable(boolean) を呼ぶとか。 こっちのほうがいいかも。
>>477 ,478,479 さんありがとうございます。
試してみます。
スレが過疎ってるスキに、くだらないこと書かしてもらうが FileSystemView fileSystemView = FileSystemView.getFileSystemView(); この冗長さは、どうにかならんのか?
IME にでも登録しとけよ。俺は Eclipse のオナペット使うけど。
ラッパ書いてヲレフレームワークに突っ込めよ。 import ore; ore = new ore.gFSV(); で出来るようになるぜ。
Nimbusのとかに比べると、まだまだだな。 InternalFrameInternalFrameTitlePaneInternalFrameTitlePaneMaximizeButtonWindowNotFocusedState.java
単にクラス名が長いというだけじゃなくて、 おなじ行に3回も FileSystemView と書かなくてはならないのが問題というか。 せめて、こうするべきだったのでは。 FileSystemView fsv = FileSystemView.instance(); Toolkit.getDefaultToolkit() も同罪。
get付けてgetInstance()にしようぜ
その程度の工夫ではJavaの冗長さはびくともしないぜ おとなしくIDEに補完させましょう # 型推論があればもうちょっとなんとか…
しかしHashMapを格納するときにMapで宣言するJavaの文化が型推論の導入を阻むのだった
型推論って型の宣言必要ないんだが。
>>490 Javaっぽい書き方
Map<String, String> map = new HashMap<String, String>();
いわゆる型推論
final map = new HashMap<String, String>();
↑HashMap<String, String>と補完される。
結局上みたいなやつじゃなくてコンストラクタの型引数が省略可能になるだけになったらしいが。
ゲネリックス を始めて触った時に typedef が欲しくなったのは俺だけではあるまい。
型推論っていえるのか・・・。
言語仕様談義はGUIと関係ないずら
JEditorPaneにsetTextで500KBくらいのHTMLを読ませると、表示にもの凄く時間がかかるんだが何かいい方法は無いですかい
Swing を捨て SWT の Browser クラスを使う。
>>496 SWTって本を見かけないから全く触れたことないなあ。
軽いのならちょっと調べてみる、d
500kだとブラウザでも遅いと思うんだがSwingはさらにシングルスレッドだからね。
イベントディスパッチスレッドがひとつしかないことを言ってるのでは
>>498 現存するGUIツールキットでスレッドセーフなものは無いぞ。
というか、JWebPaneは今どうなってんの?
誰か、というかの前を補完してくれ〜
504 :
デフォルトの名無しさん :2009/04/18(土) 20:50:07
>> 497 軽いけれど役立たずだよ。
Java でカスタムブラウザみたいなものを作ろうと思ったら SWT 一択だろ。 それ以外は特にいらないけど。
カスタムブラウザ自体がアレ。 自前でパースして適当に配置したほうが(ry
Google Map とか自前でパースして動かすんかい。エラい再発明家だな。
508 :
495 :2009/04/19(日) 15:11:00
SWT調べてみたけどSwingと連携させるのはなかなか厄介そうだね。 Swingでやるとして、500KBのHTMLを一気にでは無く少しずつ表示させることは出来ないだろうか。 スレッドを使ってやってみたら、HTMLの先頭部分は表示できたんだけどスクロールができない、助けて
operaはHTML自体はメモリに読んどいて表示はウィンドウに見えてる部分だけ描画する。 メモリ減らしたいならそんな感じだがスクロール早くしたいなら スクロール時の描画アルゴリズムを考えるとかじゃなかろうか。
Swing の全コンポーネントをヘビーウェイトにするとか、そういうオプションないんだっけ? EDT 処理やコンポーネントは相互変換できるから、あとそれができれば SWT との混在も 不可能じゃなさそうな気がするけど。
ポップアップメニューくらいなら重量にできるけど
ヘビーとライトが混ざると変に重くなるとか さっさと俺アプリを修正しよう
長いので、何回かに分けて質問します。 次のプログラムを実行して、サブフレーム表示ボタンを押すと描画領域を含むサブフレームが表示されるのですが、 サブフレームのクローズボタンを押して閉じてから再度サブフレーム表示ボタンを押すと、サブフレーム表示の瞬間に ちらつきが起こります。一瞬白い部分が見えてから黒く塗りつぶされるのが目につくのです。JFrameのコンテントペインは isDoubleBuffered() がtrueになるので、自動的にダブルバッファリングしてくれるはずと私は理解しているのですが、 なぜかちらつきが起こります。ちなみにactionPerformedメソッドをコメントアウトしてある方に置き換えるとちらつきが 起きないようです。しかし、この回避策はスマートとは言えませんし、なぜこれでうまくいくのかも不明です。 適切な解決策をご存知の方、ご教授ください。私の環境はMac OS X 10.4.11 J2SE 5.0です。
513続き import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JFrameTest extends JFrame{ JFrame subFrame; DrawArea drawArea;//subFrameに貼り付ける描画領域 JButton button;//subFrame表示ボタン public static void main(String[] args){ JFrameTest f=new JFrameTest(); f.setVisible(true); } public JFrameTest(){ setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); button=new JButton("サブフレーム表示"); button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(subFrame==null){ subFrame=new JFrame(); DrawArea drawArea=new DrawArea(); subFrame.add(drawArea,BorderLayout.CENTER); } subFrame.setBounds(210,0,500,400); subFrame.setVisible(true); }
513続き /* public void actionPerformed(ActionEvent e){ if(drawArea==null){ drawArea=new DrawArea(); } if(subFrame!=null){ subFrame.dispose(); } subFrame=new JFrame(); subFrame.add(drawArea,BorderLayout.CENTER); subFrame.setBounds(210,0,500,400); subFrame.setVisible(true); } */ }); getContentPane().add(button, BorderLayout.CENTER); setSize(200,100); } class DrawArea extends JComponent{ public void paintComponent(Graphics g) { g.fillRect(0,0,getWidth(),getHeight()); } } }
513 以上です。
>>513 手元の環境(OS X 10.5.6 Java 1.6.0_07) だとどちらの
コードでも初回表示の時からちらつく.
>DrawArea drawArea=new DrawArea();
>System.out.println("drawArea.doubleBuffered : " + drawArea.isDoubleBuffered());
としたときどうなるか?
518 :
513 :2009/04/20(月) 23:49:50
>>517 もちろんfalseと表示されますね。JComponentのdoubleBufferedはデフォルトでfalseですから。
ttp://wisdom.sakura.ne.jp/system/java/swing/swing8.html を参考に
public void actionPerformed(ActionEvent e){
if(subFrame==null){
subFrame=new JFrame();
subFrame.getRootPane().setDoubleBuffered(true);
((JComponent)subFrame.getContentPane()).setDoubleBuffered(true);
DrawArea drawArea=new DrawArea();
subFrame.add(drawArea,BorderLayout.CENTER);
}
subFrame.setBounds(210,0,500,400);
subFrame.setVisible(true);
}
と変えてみましたが、結果は同じでした。
これってどうしようも無いんですかねえ。実はJFrameだけでなく、JDialogでも同様のことが起こるわけですが、
みなさんこの辺のことは不満を感じないのでしょうか。まあ実用上問題はないのだけれど、見た目も大事だと思うんですよ。
JListはsetVisibleRowCountで縦の長さを指定できますが、 横幅を指定するのはどうやるのでしょうか? DefaultListModelで3文字ぐらいをaddしても横幅は8文字分とかにしたいです。
519ですが調べてみたら何とか解決しそうです。
マカウザイ。マクのはサン純正じゃないからアポーに問い合わせろ。
N+あたりの一部のキチガイのせいで Mac と聞いただけで過剰反応する奴が増えたなぁ。 コンピュータ関係だと使いやすい Unix 端末として使ってる人も多そうなのに。
先入観だけど、多く…ないと思う、多いの? Macは昔から嫌いだが、MacのJavaは動作が違うのか妙に嫌われてるな
>>524 そこ読んだ限りでは単なる C/S システムライクなアプレット実装だな。
つうかページ一番下
> 探偵を使って当研究所関係者を執拗に尾行する企業があります。社員として採用してただ
> 同然で技術を入手しようとお考の上でのことでしょうが、暴力行為であり甚だしい
> 人権侵害ですのでお止めください。不正競争防止法に触れる可能性もあります。
妄想ワロタw
>>524 つっこみどころ多すぎてワロタw
>ウィンドウの大きさを少し変化させてウィンドウの重なり具合を変化させることにより、
>ウィンドウマネージャに描画指示を出させます
コンポーネント入れ変えたら JComponent#revalidate() 呼べば?とか
そもそも CardLayout 使えばいいんじゃね?とか…
>ウィンドウの大きさを少し変化させてこれダーティーとみなされずにリペイントマネージャに無視られるんじゃなかろうか? revalidate呼べよ。
ユニックス端末ならリナックスでいいだろ。 xterm始めまともなターミナルいくらでもあるし。 わざわざマク使う様な香具師は皆無。マクって、あんまりオープンな環境じゃないしな。ソース見たい時に詰まる事は多い。
XP は飽きた。Vista もなんだかなぁ。 Unix 系のターミナルやコマンド、gcc が付いてて Photoshop, Illustrator も動く。 名前を聞いて一般人が引かない。家族も使うしそこらの PC 屋で吊るしで買ってこれる。 そんな理由で MacBook 使っている。カーネルのソース必須な人は Linux 使えば 良いと思うけど、Unix のシェル積んでて主要なプロプライエタリソフトも使えるんで 便利だよ。仕事場で 5 人ほど自宅 PC を Mac に乗り換えてる。 スレチなんでこれ以上はやめとくが。
windowsじゃないと出来ないことってあるよね。 飽きたとか言う以前にwindows(PC)使ってる人は、わざわざ高いMACなんか使わずそれぞれ目的があるんからPCにしてるんだと思うよ。 macだとquicktimeとobjcが標準なのが魅力だけどそれだけかもね。 windows media はどうしてるの? ほかにwinだとゲーム(GPUプログラム)とか。
>>531 QuickTimeよりは、DirectShowの方がスジが良いんじゃないかと思う。
といってもQuickTimeのAPIとかぜんぜん知らないんで、想像だけど。
DirectShowを使ったアプリ、コーデックはたくさんあるのに、
QuickTimeを使ったアプリってあまり見ない
のを考慮すると、使いづらいんじゃないかと思う。
個人的にはQuickTimeアプリってiTunesしか知らない。
コーデックはDivXとFlip4macとPerianぐらい?Flip4macはでかいwmv動画再生しようとすると、
「インポートしています」というダイアログで長々と待たされるのでイライラする。
マカは盲目だしなあ。もうそんな時代じゃないのに。
俺たちのサンが消滅しちゃったって言うのに、どんな時代だって?
535 :
デフォルトの名無しさん :2009/04/23(木) 01:26:24
個人的にはNetBeansとOpenOfficeの行く末が心配です。
自分の好きなの使えばよろし、 俺は市販のゲームだとかネトゲだとか、 自分の好きなフリーソフトがあるから、 それだけの理由でずっとメインストリーム使ってる。
ooは金にならないから厳しいだろうなあ。
Solaris売るには必要だけどね。 あとMSの売り上げ減らすことで、相対的な売り上げがあがる。
oo有るからってsolaris売れる訳でもないし。 msの客とは重なってないと思うよ。あっちは出来る本とかの充実やみんな使ってる安心感が大事。
540 :
443 :2009/04/26(日) 11:24:07
>>445 で教えて貰った方法を試したところ、
ツールチップを出したままホイール回してもスクロールしなくなりました。
さらに、ツールチップをクリックしてもツールチップ消えません。
なんいこったいでした。
そんなわけで、ホイール回したら問答無用でツールチップを消したいのでちょっと試してきます。
541 :
443 :2009/04/26(日) 12:23:22
JScrollPane spdf = new JScrollPane(hogeFrame); spdf.addMouseWheelListener(new MouseWheelListener() { @Override public void mouseWheelMoved(MouseWheelEvent e) { // ホイールを回したらツールチップを消す ToolTipManager.sharedInstance().mousePressed(null); } }); こんな酷いコードになりましたが、 どうにかマウスホイール回したらツールチップが消えるようになり スクロールもスムーズに感じます。
542 :
デフォルトの名無しさん :2009/05/13(水) 10:53:54
javaで インターネットのホームページを表示して そのページの一部分をマウスで選択します。 選択した部分だけのhtmlコードを取りたいのですが。 どうすればいいでしょう? お願いします。
全部自分で答え言ってるやん その通りのコードをくめば良いだけ
多分それは JavaScript の話ではないのかな。
>>543 その通りのコードをくめば良いだけのレベルとは思えないのだが。
>>542 まず、Javaで最近のホームページをまともに表示できるコンポーネントがありません。
Firefoxなどを埋め込む必要があります。SwingXにそういうコンポーネントがあったはずだけど、いま落ちてて確認できません。
https://swingx.dev.java.net/ そのコンポーネントで、選択位置のHTMLを取得するようなことができれば、それを使えばいいと思います。
Firefox + Firebugつかえばそのまま同じことができるので、そっちを使うほうが楽だと思う。
546 :
542 :2009/05/13(水) 14:30:43
>>543 さん
>>544 さん
>>545 さんありがとうございます。
目的とするページはなんとか表示できます。
JEditorPaneにurlを指定して表示させて見ました。
(表示で特定の文字が異様に大きく表示されてしまいます。なんとか制限したいです)
そして、マウスで特定の部分を選択しそのコードを抜き出そうとしたのですが。
文字しか取れませんでした。
期待しているのは、<a href="○○○〜">○○〜</a>とか、○○○○<br />
などですがなんとかなりませんでしょうか。
ブラウザにWebページを表示させるのとは別に、そのページの生のhtmlコードを 別途読んでおいて、マウス選択した部分と生コードの合致部分のマッチングを 掛けるような処理が必要になるのではないですか? 生コードをDOMとして保持しておいて選択部分を条件にXQueryで切り出してくるとか。 或いはそれと類似の処理が可能なコンポーネントを使うとか。
>>548 プラットホーム依存の機能を呼ぶのは最後の手段だろ...
>>546 選択してコードを抜き出すときに、どんな処理したんだ?
MozSwingハァハァ
ブラウザ依存の時点で変わらないだろ。 IEならウィンドウズ依存でおk。
553 :
542 :2009/05/14(木) 07:50:09
>>550 さん JEditorPane#getSelectedText()を使いました^ ^;
>>547 さんのXQueryみたいなのはとても理解不能でむりです。
>>553 選択してコピーしてクリップボードを見てみたら、なんかオブジェクト形式で入ってないかな?
XQueryは思ったより難しくないから、ちょっと気合いれて勉強してみると便利。
555 :
542 :2009/05/14(木) 08:54:46
>>554 はいわかりました。
もうひとつ質問お願いします、
他のブラウザではちゃんと表示されるのに、
JEditorPaneにhtmlページを表示させると、文字が異常に大きく
表示してしまうのですが、小さく設定する方法はないでしょうか?
jtableに、insertキーを押すと行が追加され、deleteキーを押すと行が削除されるロジックを組んだのですが、 キーを押しっぱなしだと、スムーズに描画が行われず、数秒おきに数十行追加、削除される感じになってしまいます。 PCのスペックにも問題はなく、処理中に負荷もかかってないようなのですが、何が悪いのでしょうか?
ロジックが悪い
今こそweirdxの再開発を!
weirdxってなんだろう
561 :
デフォルトの名無しさん :2009/05/21(木) 01:38:42
Java Web Startアプリを公開できる場所しらんかえ? Vectorでは拒否されるらしいな
どこのプロバイダでも大抵できんじゃん。
鯖立てるかレンタル鯖借りる
関係ないけど Java Web Start アプリのカタログ的サイトってどこかにないかね?
566 :
デフォルトの名無しさん :2009/05/23(土) 11:43:32
サンプルとかそういうレベルじゃだめなら、構想が練られているみたいね
567 :
566 :2009/05/23(土) 11:44:18
値段と宣伝効果次第では使ってみたいな。 国内ではそこそこユーザーがついたんだが、 海外で使ってもらうのにどこで宣伝すればいいのか わからなくて困ってたんで。 でもサンはコンシューマー相手の商売がヘタだし、 あっという間に閑古鳥が鳴きそうな気もする。
569 :
561 :2009/05/23(土) 16:45:39
>>562 ,563
そういう事ではなくて、
フリーソフトの検索サイトで投稿できる所知らないかって事ね。
せっかく作っても検索サイトに載せられなきゃ探してもらえんでしょう
ググレカスって書き込むやつの気持ちがわかった。
ggrksじゃなくて頭悪いな
572 :
561 :2009/05/23(土) 19:52:24
ぐぐった結果「そんな事出来るサイトはない」って結果に達してるから 一応2chに聞いてるんだけどね まぁそんなサイトないっていうか、Swingスレに この質問自体がタブーって事ですか(笑)
>>572 そういった背景込みで質問しないと聞かれたほうも分からないんじゃないかい
馬鹿の相手をすると荒れるからほどほどにな
ググって分からない事が、にちゃんで答え教えてもらえると(ry
576 :
561 :2009/05/24(日) 11:53:48
Swingスレの人だったら何か知ってるかなぁと。。 せっかくJWSがあるのにVectorとかに登録できないのはつらいですね〜
SwingとJWSのどこに関係があるんだ
578 :
564 :2009/05/25(月) 16:38:31
>>567 Thx.
こんな構想があるんだね.JWS リリースしたころにこういうの
やってれば今頃もっとアプリケーション用途に Swing アプリケーションが
普及してたかもしれないのに…まぁ JavaOne の発表に期待.
579 :
デフォルトの名無しさん :2009/06/23(火) 10:37:53
∧,,∧ ∧,,∧ ∧,,(´-ω-)(-ω-`)∧,,∧ ( ´-ω)旦o) (o旦o(ω-` ) (_ o[( ´-) (-` )]o _) └'ー-(_ )][( _)ー'┘ 'ー'^ー' 'ー'^ー'
JTextPaneとかで使う DefaultStyledDocument のUNDO処理にバグみつけた IMEがらみでデータが壊れるパターンがあるみたい 日本語入力はやっぱあんましSUNでもテストできてないんかねえ
具体例を
>>580 再現コードを作って、BugParadeに投稿しておくれ。
まえにも一回投稿したことあるけど 投稿直後に自動メールが着たきり なしのつぶてで いつのまにかエントリーごと消えてた 英語が意味不明なので嵐あつかいされたのかもしれんけど サンプルソースためしもしない 英語めんどくさいのでもう投稿したくない
オレも過去に 3, 4 回出して全部スルーだったなー。 最小の再現ソースに JDK ソースの該当箇所まで出して指摘したのに。 英語云々じゃなくて、最新βのフィクス最優先で安定リリース版の些細なバグなんて後回しって雰囲気。
バグは、とりあえず共有するのが大事。 ここに書いてSunのチームがみることもある。
586 :
580 :2009/06/26(金) 21:28:19
JDK付属のサンプルのNotepadでも再現するんだけどな まあサンプルの方のバグでないことの証明の意味でも一応再現コード張る ぶっちゃけJFrameにJTextPane貼り付けて UNDO対応に最低限のコードを追加してるだけ。 一応実行環境はWindows(他の環境でどうなるかも興味ある) 再現手順 1、起動したら複数行適当に入力する 2、2行目以降の先頭文字から適当に選択状態にする 3、IMEをONにして選択状態の文字列を日本語の適当な文字列で置き換える 4、UNDO(ctrl+Z)を繰り返して日本語入れ替え前まで戻る。 ⇒最初に選択した文字列が元の場所と前の行の末尾に2箇所出現する。 (この状態でもう内部のデータが壊れているのでこのままいじりつづけると例外とかおきる事もある)
587 :
580 :2009/06/26(金) 21:35:27
import java.awt.event.*; import javax.swing.*; import javax.swing.undo.*; public class UndoBug extends JFrame { public UndoBug() { this.setSize(200, 200); JTextPane jTextPane = new JTextPane(); this.getContentPane().add(jTextPane); final UndoManager undoManager = new UndoManager(); jTextPane.getDocument().addUndoableEditListener(undoManager); ActionMap actionMap = SwingUtilities.getUIActionMap(jTextPane); InputMap inputMap = SwingUtilities.getUIInputMap(jTextPane, JTextPane.WHEN_FOCUSED);
588 :
580 :2009/06/26(金) 21:37:06
actionMap.put("UNDO", new AbstractAction() { public void actionPerformed(ActionEvent arg0) { if (undoManager.canUndo()) undoManager.undo(); } }); actionMap.put("REDO", new AbstractAction() { public void actionPerformed(ActionEvent arg0) { if (undoManager.canRedo()) undoManager.redo(); } }); inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, ActionEvent.CTRL_MASK), "UNDO"); inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_Y, ActionEvent.CTRL_MASK), "REDO"); } public static void main(String[] args) { (new UndoBug()).setVisible(true); } }
Mac OS X 10.5.7 J2SE 5.0, Java SE 6.0でも同様です
1byte前提で2byteで弄ったらそりゃ壊れて(ry 英語環境で再現出来なきゃ、あちらは確認できず消すしか無いと思う。 youtubeにでも動画うpして説明したら? あとマクのはアポー謹製だから、アポーにバグ報告するべき。
おまいの国の Java は SJIS で動いてんの?
Java って全部 unicode だと思ってた人が通りますよ
バカの All or Nothing 的発想
>あとマクのはアポー謹製だから、アポーにバグ報告するべき。 マクは移植部分以外はSUNのソースを取り入れてるだけ(Swingも) LinuxカーネルのバグをLinusのMLじゃなくてUbuntuとかLedHatにするようなもん 無駄とはいわないが迂遠すぐる
>>590 お前のJavaのchar型は何ビットか言ってみろ
javaのストリームはバイト処理なんだよ。馬鹿だなあ。 文字列使うときはマルチバイトで処理しないと。
気になるな。ドキュメント周りが壊れてるのかな? 確かにUndo出来る回数を勘違いしてる????
>>596 >587 のどこにストリームが使われているか言ってみろ
>>597 UNDO回数を間違えているというより
DefaultStyledDocumentのデータ構造が壊れて
同じ部分文字列が二箇所にレンダリングされてしまっている
Default(以下略)の中の
GapContentの文字列そのものは重複していない
600 :
580 :2009/06/28(日) 05:13:11
名前欄入れ忘れた もうすっかり朝だよ寝る
601 :
デフォルトの名無しさん :2009/07/03(金) 23:49:02
>>601 ツール > パレット > Swing/AWTコンポーネント > JARから追加
ボタンとかチェックとかの複合コンポーネントつくって、JListを使って配置しているのですが、レンダラーを実装してそのコンポーネントを描画することは出来ました。 しかし、そのコンポーネントが機能しない(ボタンのフォームだけで押せないとか)んですが、次はどうやればいいんでしょうか。 グリッドレイアウトを使うとリストっぽくレイアウト出来るのですが、JListとかの要素にしてしますとコンポネントじゃなくてレンダラーとなってしまい機能しないんでしょうか。
ボタンにアクションリスナー配置しました?
>>603 それは仕方ないなぁ
JListやJTableなんかだとあくまでレンダラで、実際にそこにコンポーネントは存在しないからね
そういう意味じゃなくて、ボタンらしきフォームが描画されているだけで、「押す」「離す」などの描画にすらならないんですよ。 つまりそれはリストのレンダラーであって、それはボタンじゃないようなんですけど、リストの要素にするともうそれはコンポーネントとして扱うことは出来ないんでしょうか。 いま、コンポーネント開発してるところなんですけど無理ならあきらめます。
まだAPIをよく読んでないんですけど、JTable,JTreeで名前を直接編集するときテキストフィールド・コンポネントになりますが、 インタフェイスの適当なモデルを実装して、それと同じようにすることは出来ないんでしょうか。 スイングはポトペタなら楽ですがコンポネントを新しく開発するのは複雑で骨が折れます。
擬似的にはできるんじゃないかな? JListならJList自身のマウスイベントとかを受け取って、それがJList中のどこのアイテムのどの辺の位置なのか、という変換を行って、レンダラにその変換したイベントを送ればできそうだけど。 もちろんその際レンダラからJList側に適切なリペイントの要求を出さないといけないだろうけどね。
そういう複雑な処理を実装しないようにしたいんですけど、分かりませんでしたか? そんなことして開発してるようじゃそのうち保守できなくなりますよ。
>>609 じゃあ自分でコンポーネント作りなさいw
保守考えたら、独自拡張はなるべく最小限に。 そうすると差別化出来ないけどなwww
>>608 その方法でできるけどそれは設計間違えてるからなぁ。
レンダラの実装にComponent使ったSwingチームのミスだと思う。
まぁサイズ取得とか必要な API 考えたら Component 流用が楽だったんだろうけど。 むしろセル内にコンポーネントを配置できるようにしてほしかった (が数千行とか行くと リソース面で死ぬかな)。
セルにコンポーネント貼るデモがJDKにあったような
みんなJavaFXやろうぜ
616 :
デフォルトの名無しさん :2009/07/06(月) 02:58:40
javafxは開発環境の要求が異様に高いけど、javafxcコンパイル自体はそんなに高い性能は必要ないと思うけど。 別にIDEとか使わなくてもjavafxはエディタのみで開発しやすいから、sdkとかコンパイラは、低PC(1G,500MB程度)でも動くようにしてほしい。 この辺りがどうにかならないなら、javaseの方でいいかなって思う。
JavaFX とか、もう枯れた木から一生懸命実を落とそうと必死で揺さぶってるような感じ。
>>614 セルにコンポーネントを貼り付けるんじゃなくて、セルにあるコンポーネントを普通に使いたいってことだろ。
日本語に不自由してるようだね。
煽る事しかできん無能がよく言う
結局、マルチプラットフォームでGUIは夢なのか・・・。
tkの機構はどれも同じだけど、skinにこだわらなければいいと思うよ。 おじさんは多分skinにこだわりすぎてんだろうけど、cui, guiにはまったく関係ない。 そのうちjavafxとかリッチ何とかのskinが多くなるけど、硬いおじさんの石頭でもguiとはどういうものなのか分かってくるんじゃないの?w
マクを切り捨てればなんとか。 ユニックス系とウィンドウズ系は融通効くよ。同じサンからの直接配布だし。
なんかムダに煽る人が帰ってきたのか。
デスクトップアプリでも、MVC みたいな構成にするもんなの?
626 :
580 :2009/07/09(木) 21:30:21
>>625 むしろMVCはSmalltalkのウィンドウデスクトップアプリ開発環境が発祥
GUIフレームワークの名前だよ。
628 :
デフォルトの名無しさん :2009/07/10(金) 01:41:10
誰かJavaにWindows.Forms移植しろ
Formsってそんなにいいの?
Swingでいいじゃん
Swingって、ウィジェットの描画はもちろん、フォントレンダリングも自前だから、 一部のOpenTypeフォントが使えないよね。 Windows OSがレンダリングできるフォントであっても。
winが描画できようがjavaが乗るほかのOSで出来るとは限らない。 それとOpenTypeの描画が実装されてないだけでモノは揃ってる。
「OpenTypeの描画が実装されてないだけでモノは揃ってる。」について、もうちょっと解説をお願いしたい
そもそもOTのフォント使いたいような理由とか有るのか? そこまで使いたければ、自前でTT組み込んでビットマップ展開して表示すれば? 普通にwin32アプリ組んで、JNIで機能だけ頂いたほうが幸せになれそうだが。それなんてjava3d状態だが。
日本語でおっけー
>>634 >そもそもOTのフォント使いたいような理由とか有るのか?
それを決めるのは、アプリ開発者じやなくて、アプリ利用者。
>そこまで使いたければ、自前でTT組み込んでビットマップ展開して表示すれば?
>普通にwin32アプリ組んで、JNIで機能だけ頂いたほうが幸せになれそうだが。それなんてjava3d状態だが。
そんなことせずに、C#/WinForms使う。黙ってSwingを捨てる。
こういう不自由さや、不自由がいやなら自分でやれよ的な空気が、Java/Swingは(業務用アプリのような)
ユーザーに選択権の無いアプリにしか使えないって評価につながるんだよ。
使いたいアプリじゃなくて、使わされるアプリ。
>>636 キチガイの言い分にまんまと乗って、それがswingの全てだと思ってるだろ?
お前にはjava自体向いてないかもな。
638 :
デフォルトの名無しさん :2009/07/12(日) 16:53:27
Swingのアプリケーションを作る際のアーキテクチャについて教えてください。 画面が100とかあるようなものだと、 J2EE見たいな構成になってしまいます。 ●アプリケーション全体の画面遷移を司るオブジェクト ●画面+メディエーター+その画面で利用するオブジェクトを入れたロケータ これを大体画面数分 皆さんどんな形になりますか? それと、swing用にJSFみたいなフレームワークってあるのでしょうか? 画面の初期化処理と終了処理を共通化するようなフレームワークでもいいです。
Swing Frameworkぐらいしかしらないな
640 :
デフォルトの名無しさん :2009/07/12(日) 19:14:26
>>639 それってnetbeansについてるあれか?
偉そうな質問者だな。 今の風潮から言えば、こういう奴は即効嫌われる。
という偉そうな発言は即効嫌われるので気をつけましょう
643 :
デフォルトの名無しさん :2009/07/13(月) 20:14:21
別人な件
次からは質問は謙虚にだってさwww
645 :
デフォルトの名無しさん :2009/07/15(水) 13:24:23
javadrive.jpの中の人に直接聞けばよくね? 多分、中の人も知らないだろうから、もっと内容を良く出来るかもよ。
SpringLayoutTest3.javaをコンパイルして動かしてみたけど問題ないようだ。 javaのバージョンはなに使ってるの? こっちは、1.6.0_13-b03 WindowsXP
マカとか、sunの直接配布じゃない環境ってだけだったりして。 配布元のアポーに文句言えば?
649 :
645 :2009/07/16(木) 12:08:14
どうやらJavaのバージョンの問題だったようです。 1.5.0_18から1.6.0_14に変えたら動作例の通りになりました。
誰かJAppletでルックアンドフィールを変える方法しらない? substance使いたいんだけど、JAppletのinit(),start()周辺の初期化が よくわからない
JApplet でも standalone でも やりかたは一緒だと思うけど
Java版SPSSって遅すぎない? 長時間ウインドウ最小化して、いざ再開すると10秒くらい操作受け付けないし、画面真っ白なんだけど。 MS製品もそういうのあるけど、Javaだと長時間でなくとも普段から切り替えは遅い。 これってSwingの仕様なのかな。それともJavaの仕様なの?
spssの推奨動作環境よく見ろ。
ビューアは確かに切り替えが鈍いね。 0.5秒くらい真っ青になるのが気になる。 SPSSのグラフなんかは全て画像ファイルに変換して出力してるのでグラフィック関係の問題ではなさそうだな。 SWINGやOSあたりを疑ってもいいかもね。
AWTのほうがいいの?
何と比べて?
swingってページによってはawtより高速って書いてあるよね。 どっちが本当なの?
殆どの場合で、awtより高速なんじゃないか? まぁ、なによりawtだと出来ることが限定されて窮屈だよね。
swingもawtで実装されてるのだが。
ドラッグアンドドロップなんかはSwingだと簡単に実装できて awtで同じようなことやろうとすると面倒で人によっては遅いプログラムになってしまう。 結果としてSwingのほうが速いと言える。 こんな認識でいいの?
>>660 ここでは、AWTはAWT重量コンポーネントのことだろ。
むしろswingのほうが出来る事が限定されて、awtで好きに組めば自由に出来るけどな。swingを越える様なのも作れる余地があるし。 包丁とサバイバルナイフぐらい似て非なるもの。
やったことも無いのによく言うよコイツw
確かにAwt上で、Swingのような別の軽量コンポーネント実装も作ることは可能だろう。
ただ・・・・・詭弁だな。
普通は、
>>662 の認識でいいはず。
くだらん 年よりは早く死ねよ
おまいもな
夏休みがよくわかるレス数推移だな
ああもうそんな季節なのか…
670 :
デフォルトの名無しさん :2009/08/11(火) 08:54:30
Javaの初心者向け参考書をほぼ読み終えましたが、GUIプログラムの方法として AWTとSwingが出てきました。 どちらを覚えればいいのでしょうか? (スレタイに「低速」とあるので、Swingは遅いんでしょうか…) また、この2つ以外にも方法はあるんでしょうか? もっといいのがあれば教えてください。 よろしくお願いします。
基本的にはSwingだけど、SwingはAWTの上に載ってるのでAWTもある程度必要ではある もっといいかどうかは知らないが、SWTというのもある
V2C重いな やっぱりJaneに戻すか
てかAWTもここだからスレタイに入れようって話になってせっかく入れたのに
このスレになって勝手にスレタイから消されてAWTと入ってるSwingスレもテンプレに入れてないのはなんで?
>>1 の独断?
>>670 SWTを今使う必要はほとんどないと思う。
SwingとAWTを比較する場合は、コンポーネントのことだと思うが、AWTコンポーネントを今使う必要はまったくない。
SwingにしろAWTにしろ、NetBeansでいろいろコンポーネント配置していじくればいい。
677 :
デフォルトの名無しさん :2009/08/12(水) 06:42:41
NetBeansは2日ほど前に入れたばかりですが、 古いパソコンだと激重で使い物にならないので 参考書の説明に従ってテキストエディタ+コマンドプロンプトでやってます。 NetBeansは必須でしょうか? 昔Borland C++ Builderというのを使ったことがあって、GUIをエディタで 配置してイベントを手入力するだけでソフトを作れたので便利でしたが、 NetBeansを使うメリットもそれと同じでしょうか?
679 :
デフォルトの名無しさん :2009/08/12(水) 17:57:26
>>678 必須ではないが..
GUIの画面デザインでコンポーネントをダブルクリックすれば
イベントハンドラを自動で作成してくれるから、処理を記述する
だけで簡単なモノは作れる。
そのほか、"."でクラスのメゾッドやフィールドの候補の表示や
自動的にインポートを記述してくれたり、クラス内のメゾッドの
名称変更すれば、参照している全てのソースの名称を変えてくれ
たり、コンパイル前にエラーを指摘してくれたりするし、デバッガ
も付いてるし...あげればきりがない。
ま、エディタ+コマンドプロンプトの環境から比べれば、開発効率は
移植ゴテとショベルカー位の差はあるな。
てか、激重ってどんなパソコン使ってんだ
じゃ噂のエクリプスとどこが大きく違うんですか?
>>679 ありがとうございます。
そんなに便利ならぜひ使いたいですね…。
パソコンはメインのマシンが壊れたので、古いのを使ってます。
Pentium3 866GHz、メモリ256MBで、HDDがカリカリ鳴ってアクセスに時間がかかるミニノートです ><
IBMから来たかSunから来たか 使えば分かる どっちもCPU/メモリ食いだし、どんなに便利でも使いたくないって人が少なくないのも事実 便利さが分かる前に操作がややこしくて諦める人もいる
683 :
デフォルトの名無しさん :2009/08/12(水) 18:59:28
>>681 イタいな。平成ひとケタのテクノロジーつーか886GHzてスパコンか?
684 :
614デフォルトの名無しさん :2009/08/12(水) 19:51:53
>>680 環境が整えばどっちもどっちかな。
でも、エクリプスでNetBeans並の環境を整えたければ、いくつかプラグインを入れる必要があるし、
プラグインも玉石混交でカオス状態。NetBeansには、最初から必要な環境が整ってるから、これ
から始める初心者にはおススメかな。
GUIはNetBeansで、その他はエクリプスという人もいるけど。
>>681 残念だが、Javaで開発するにゃメモリが絶望的に足り無さ過ぎる。
最低でも1GBは欲しい。
JavaのIDEは起動時のCPU消費が半端ない
687 :
デフォルトの名無しさん :2009/08/16(日) 00:37:33
えくりぷすの手打ちで作った自前アプリを、ネットビーンズで書き直してみたい気もするが面倒だぜ
JComponentやJPanelを動的生成して配置しまくるようなアプリを作ってるので NetBeansの利点を見出せず結局キーバインドやリファクタリングが使いやすいeclipseで書いてる。
うp
動的生成はメモリ喰いそうだ。 ウィンドウ数の制限とか管理してるの?
増えすぎたらOutOfMemoryで落ちるだけだから気にしなくてOK
コンストラクタに実処理を書かないようにして、インスタンスを使いまわす。
大富豪的プログラミングか。これだからPGっていつもバグばっかで屑だなって地位が向上しない。
NetBeansとEclipseで1つのプロジェクトを両方からいじってる。 これが便利だなー。NetBeansっていつからかEclipseのプロジェクトを読み込むことができるようになったしね。 両方開いたままで編集しても、特に問題は起きないよ。
>>690 それは小細工。
ローカルチューニングは、よほど上手くないと害の方が大きい。
富豪的プログラミングは、リソース気にしないでまず書いてみて
そこから直していくというスタイル。
はじめから細かいこときにすんなって、教えだよ。
どんだけ気を使ってバブルソート書いたって、
メモリ使いまくるマージソートの方が、まだ何とかできる余地があるってこと。
///) /,.=゙''"/ / i f ,.r='"-‐'つ____ 細けぇ事はいいんだよ!! / / _,.-‐'~/⌒ ⌒\ / ,i ,二ニ⊃( ●). (●)\ / ノ il゙フ ::::::⌒(__人__)⌒::::: \ ,イ「ト、 ,!,!| |r┬-| | / iトヾヽ_/ィ"\ `ー'´ /
糞PGが居る限りメモリがどれだけ有っても足りないな。
698 :
デフォルトの名無しさん :2009/08/22(土) 23:37:06
糞じゃないPGを雇えばいいのさ
バブルソート書くくらいならコムソート書いてやる!
漢ならボゴソート
ソートといえばJDK7で配列とコレクションのソート実装が入れ替わった。 まぁSwingには関係ないんだけど。
日本人ならクレオソート
欧米人はどうやって防虫してんのかね
結構な大きさの画像を画面にガンガン出すビューアみたいなの書いてるんだが、 メモリに画像を全部置いておくとOutOfMemoryになるし、 SoftReferenceとかで画像を持っておいて参照切れたときに退避させてた 一時ファイルから読み込むってロジックにすると重くて軽快さゼロ。 こういうのってみんなどうやって対処してるの? 俺Webアプリ畑でやってきたからこういうときの クライアント側の処理がさっぱり分からん。
想定する必須スペックと扱う画像の形式と大きさをw*hで あとどのAPI使ってんのかも
>>704 アクセスパターン依存だから何とも言えんが、LRUなキャッシュを(どっかから探してくる|自分で実装する)とか、アクセスパターンの局所性を利用して、次にアクセスされる可能性のあるあたりをバックグラウンドでプリフェッチしておくとか。
>>705 想定する必須スペック:PenM1.6 メモリ1G程度
イメージをロードするAPI:ImageIO
画像形式:PNG
画像サイズ:640x480〜1920x1200ぐらい
画像数:100枚程度
こんな感じかな。
>>706 画像は順序があって、現在見ている画像の周辺は
サムネイルとして表示さるのでアクセスされる可能性が高いと思う。
先頭と最後もなんとなくアクセスされる可能性が高そう。
けど、アクセスパターンを分析してそれに最適化した実装をするのはまだ段階として早い気がする。
けど、LRUキャッシュは有効な気がしてきたんでとりあえずそれでパフォーマンス見てみます。ありがとう。
速度追求するとメモリありったけ喰うのが普通。 32ビット階調なら特にメモリ喰う。
俺も画像読み込むの作ってたなと思ってAPIを調べてみた jpg JPEGImageDecoder bmp ImageIO GIF ImageIcon 上記以外 ImageIcon → ImageIconで読み込めなかったらImageIO 最後のはなんでこんな処理にしたんだ
最大で1920*1200の画像100枚てどんだけメモリ食うか分かってる?
IIOは自分で制御しなかったらメモリに全部置いたような。
>結構な大きさの画像を画面にガンガン出す
PenMのmem 1Gにこれは無理。遅くなって当然。
>>706 のやり方がいいんだろうねぇ
あと1920*1200はスケーリングせずに表示するの?
>>706 LRUじゃなくてLFUじゃね?
画像の読み込みはToolkitの方がかなり速いよ。 正直言ってAPIはダサいけどね。 俺はJPEG,GIF,PNGはToolkitで読み込んで、 それ以外はImage IO使ってる。
ImageIconは内部でToolkit使ってるから、
>>709 だとGIF,PNGはToolkit
jpgが将来消えても不思議じゃないとかwebに書かれてるJPEGImageDecoder
他はToolkitを試して無理ならImageIO
JPEGImageDecoderじゃないと色が化けるファイルがあってな…
swingって遅いって言うけどさ、元になったawtは速いわけ?
awtコンポーネントは、ネイティブのコンポーネントをそのまま使うから動作は速かった。 当時は最適化の技術も低く、DirectDrawの利用も積極的ではなく、マシンのメモリも少なかったので、Swingは重かった。 ただしAWTコンポーネントはメモリやリソースを喰うので、最初の表示は重いかもしれない。 今は、Swingでも実用に十分耐えるレベル。
>>713-714 逆に、描画サブシステムの高速化で、Windowsにしろ、Linuxにしろ、Macにしろ、プラットフォームネイティブの
ウィンドウシステムのコンポーネント使う方が、ウィンドウシステムとのやりとりが重くなって
きてる。Windowsでいうと、SendMessage/PostMessage。
その証拠に、OS(Windows/Mac/Linux)、Webブラウザ(IE/Safari/Firefox)問わず、ウィジェットを
大量かつ頻繁に生成し、レイアウトも変わるものは、軽量ウィジェットをつかってる。
つまり、現時点では、ネイティブのコンポーネント使うよりも、軽量ウィジェットの方が、動作を高速化する余地がある。
windowsL&FでJTableのフォーカスセルが点線で表示されていますが、 実線等に変更するにはどうすればよいでしょうか?
>>715 軽量かどうかに関係なくコンポーネントをたくさんポトペタすりゃ遅くなるから、コンポネントの自作が進むのはあたりまえじゃないの?
どうせコンポネント開発すらしたこと無いのに知識を披露したいだけなんでしょ?w
>>717 >
>>715 >軽量かどうかに関係なくコンポーネントをたくさんポトペタすりゃ遅くなるから、コンポネントの自作が進むのはあたりまえじゃないの?
まー、数の問題じゃないんだな。これが。
コンポーネント1個でも、ウィンドウシステムとのやりとりが増えると、耐え難いほどパフォーマンスが落ちる。
やってみればわかるよ。
それ単におまえの設計が下手くそなのを聞きかじりの知識で説明してるだけじゃ
Swingの描画ぶっこわしといてSwingおせーと言ってる奴と一緒か
>>718 それって、ネイティブは遅い、JVM(java ツールキット)は速いってことでしょ。
その速い遅いって根拠が自分が作ったAWT,SWINGアプリを根拠として遅いって言うなら君が無知なだけ。
最近awtが速くなったのはネイティブ(directxとか)を使うようになったからなのに、まるで根拠も無くネイティブ(ツールキット)って遅いって勘違いしてるでしょ。
そんなに知識を披露したいなら、AWTイベントキューの話とかできるの?
>>715 が言ってるのは java.awt.peer が遅いってことだよね。
そんなに間違ってはいないと思う。
確信はない。
いやpeerが遅いわけじゃない。二重に被せてるから遅い。 それに今はマシンスペック上がったんで気にすることじゃない。 最近だとSwingのパイプラインの効率が悪くて遅かったが5,6辺りで改善されたからやっぱり今は遅くない。
>>721 > 最近awtが速くなったのはネイティブ(directxとか)を使うようになったからなのに、
> まるで根拠も無くネイティブ(ツールキット)って遅いって勘違いしてる
この発言はそうとう恥ずかしい
725 :
デフォルトの名無しさん :2009/09/01(火) 15:12:11
>>724 の意味が分からないんだが誰か訳せるやついる?
728 :
デフォルトの名無しさん :2009/09/01(火) 16:40:16
多分見えない敵と戦ってんじゃないですか?選挙はもうとっくに終わったのに立候補したつもりでまだ戦ってるんでしょう…
森さんは最後の最後で誰と闘ってるかわかったみたいですよ。
731 :
デフォルトの名無しさん :2009/09/01(火) 17:55:23
734 :
デフォルトの名無しさん :2009/09/01(火) 19:00:56
>732 隊長〜 おつかれ−っす^^
何この流れ
顔を真っ赤にして自演するアホがいる。
Java系スレの住人は基本的に行儀がいいので、ひとつの発言に対して内容のない煽りが複数つくことは少ない。 724や732に煽りを入れたくなるのは、ひとりしか考えられないしな。 自演と見ていい。 ひとり変なやつが来て変な流れになっているだけだな。
文体をよくみたら、アルゴ君がきてたのか。
>>721 全く的外れ。
ネイティブを使うと遅くなるのは、描画が原因じゃなくて、メッセージパッシングの性能差だから。
メソッド呼び出しに関してはJavaはCよりも速い。比較対象がウィンドウとのメッセージパッシングになれば、
実行コスト差は2桁以上。
レンダリングが高速化したんで、メッセージパッシングがボトルネックになっている、
それを克服する解として軽量ウィジェットがある。
742 :
デフォルトの名無しさん :2009/09/09(水) 18:49:40
>>741 そんな知識、どこで入手できるの?
javaに対する学習をどこでどうやってするのか初学者のぼくに教えてください。
メッセージパッシングというか、JNIでのネイティブAPI呼び出しのコストじゃないの? ヘビーウェイトコンポネント(ネイティブコンポーネント)だと OS(というかウィンドウシステム)ネイティブののイベントを処理する必要があって それがコストが高いんだと思う。
drawLineとかfillRectとかでコンポーネント描画するときのJNIのコストは低いの?
JNI のコストが〜とか言ってる奴は Swing で 3D ゲームでも作ってんのか。
>>745 ん?いや、別に。
ただ、自分では使って無くても
awtは、ライブラリ内でネイティブAPIとのつなぎの部分が必ずあるから
そこの呼び出しのことを言っている。
747 :
デフォルトの名無しさん :2009/09/11(金) 13:28:14
>>745 joglだとJNIのコストがもろに効いてくる場合あった。
ディスプレイリスト活用すればJNI減らせそうな気がする
749 :
デフォルトの名無しさん :2009/09/11(金) 13:50:14
eclipse3.5上のフリーなSWINGベースのUI構築ツールは無いかな。 VEとかなくなったんだね。
751 :
デフォルトの名無しさん :2009/09/11(金) 16:10:32
>>750 凄く良さそうですね。
早速インストールしましたが、軽くていい感じです。
>>749 750も悪かないけどNetBeansと両刀使いのほうが快適
EclipseってNetBeansより軽い?
まあjni自体遅いからな。 ハードアクセラ効くまでの処理が遅い。 結局速度求めるなら、cで直接directx叩けって成る。
>ハードアクセラ効くまでの処理が遅い。 は?
すみません、教えてください。
@ITで質問したんですけど、回答がつかなくて。。。
http://ap.atmarkit.co.jp/bbs/core/fjava/16336 現象
・メインパネルクラスを実行した際にJComboFieldのポップアップウィンドウが消えない。
・フレームをリサイズすると消えます。
・ポップアップウィンドウが残っている間、他のコンボボックスでポップアップが出なくなります。
・メインパネルクラス改だと発生しない
・孫パネルクラスのJComboBoxを編集不可(setEditable(false))にすると発生しない
ソースは次レス
758 :
757 :2009/09/15(火) 15:54:35
// メインパネルクラス public class MainPanel extends JPanel { MainPanel() { JPanel pane = new JPanel(); pane.setLayout(new GridBagLayout()); GridBagConstraints constraints = new GridBagConstraints(); for (int i=0; i<16; i++) { constraints.gridx = i % 4; constraints.gridy = i / 4; pane.add(new ChildPanel(), constraints); } ScrollPane scroll = new ScrollPane(); scroll.add(pane); setLayout(new BorderLayout()); add(scroll, BorderLayout.CENTER); } public static void main(String args[]) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 200); frame.setContentPane(new MainPanel()); frame.setVisible(true); } } まだ続く
// 子パネルクラス public class ChildPanel extends JPanel { ChildPanel() { setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); for (int i=0; i<5; i++) { add(new GrandChildPanel()); } } } // 孫パネルクラス public class GrandChildPanel extends JPanel { GrandChildPanel() { JComboBox combo1 = new JComboBox(new String[] {"1111", "22222", "3333"}); JComboBox combo2 = new JComboBox(new String[] {"1111", "22222", "3333"}); combo1.setEditable(true); combo2.setEditable(true); setLayout(new GridBagLayout()); GridBagConstraints constraints = new GridBagConstraints(); constraints.gridy = 0; constraints.gridwidth = 1; constraints.gridheight= 1; constraints.weightx = 0.0d; constraints.weighty = 0.0d; constraints.gridx = 0; add(combo1, constraints); constraints.gridx = 1; add(combo2, constraints); } } まだ続く
// メインパネルクラス改 public class MainPanel2 extends JPanel { MainPanel2() { setLayout(new GridBagLayout()); GridBagConstraints constraints = new GridBagConstraints(); for (int i=0; i<16; i++) { constraints.gridx = i % 4; constraints.gridy = i / 4; add(new ChildPanel(), constraints); } } public static void main(String args[]) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 200); ScrollPane scroll = new ScrollPane(); scroll.add(new MainPanel2()); frame.setContentPane(scroll); frame.setVisible(true); } } ここまで、 よろしくお願いしまう。
>>757 ちらっと見た限りではその現象が起きる正確な原因はよく判らないけれど、
AWT部品とSwing部品を混ぜるのはやめてSwingに統一した方がよい。
> ScrollPane scroll = new ScrollPane();
> scroll.add(pane);
↑ここを↓こうする
JScrollPane scroll = new JScrollPane(pane);
762 :
757 :2009/09/15(火) 16:39:40
>>761 先生
ありがとうございます。
直りました。
指摘されるまでAWTが混ざってるとは思っておりませんでした。
AWTとSwingを混ぜるな危険って話は知っておりましたが、
まさか自分がそこに引っかかるとは思いませんでした。
本当にありがとうございました。
javaの相談/質問すれでswingスレに行けと言われたんだけど v2cってどうやってあんなに速くレスを描写してんの? 簡単な計算を組み合わせると、V2Cのようにアホみたいに速くなるって言われた
もう諦めろよお前には無理だ、と言いたいが・・・ 続けるつもりなら今の状況を説明 JEditorPaneはやめたんだっけ?
>>764 俺は簡単に諦めないよ
別にいいじゃん、言われた通りこっちに来ただけだし
気にくわなかったら、あぼーんにすればいいだけ
じゃああぼーんしやすいように名前入れてくれ
767 :
abc :2009/09/15(火) 20:11:38
>>763 まじめに自力でレス描画してるんじゃない?
選択の挙動がへんだったりするから、JEditorPaneではなさそうだね。
769 :
abc :2009/09/15(火) 22:26:29
>>768 >まじめに自力でレス描画してるんじゃない?
その通り、public void paintComponent()をオーバライドして
Graphics.drawString()を使って文字を出力している
他にもっと良い方法があったら、この方法にはこだわらないつもり
>選択の挙動がへんだったりするから、JEditorPaneではなさそうだね。
・V2CはJPanel + drawString()を使っていると教えてもらったから
・JEditorPaneは遅いとの事
・
http://と入れないとクリックした時にURL.toString ()(忘れた)が文句を言ってくる
・HTMLを作るのが地味にコストが
7年前のノートパソコンでも、GlyphVectorをみっちり詰めこんだコンポーネントが ヌルヌルスクロールするんだな。
つかV2Cをjavapしてニーモニック読めよ
JWebPaneがリリースされてくれれば楽なのに
Graphics2D#drawGlyphVector()が文字列描画最速とAPI仕様に書いてあるね。 実装要求なんだかSunJREの実装自慢なんだかはっきりしないとこが、 あいかわらずもんにょりなんだが… なぜこんなオーバーヘッドのかかりそうな方法がdrawString()より速いのか、 JNIとかAWTとかDirectXとかパイプラインとかいつもの調子で解説頼む。
drawStringは、合成文字とか双方向並び替えとかカーニングとか色々複雑な処理してから描画しないといかんのでは? GlyphVectorはそれら全部処理し終えたフォントグリフの並びで、あとは描画するだけなのでは? たぶん
つまり描画自体がボトルネックになってる場合は変わらない、と。
グリフを直接描画するのと文字列を描画するのとじゃグリフのが早い気がするがソース見てないからわからん
おもしろそうなんでスレ表示コンポーネントを書いてみた。
パスは「swing」
http://uproda.2ch-library.com/lib169848.zip.shtml パフォーマンス検証のためだけに書いたから仕上げる気がないんで、
コードがかなりいい加減なのは目をつぶって。
クリッピング処理をきっちりやれば十分なパフォーマンスが出た。
最初、レスのListに対してループを回して、レスがクリッピング領域とかぶるなら
描画するという作りにしたんだけど、さすがに描画するたびに1000回ループを回したら
ちょっと重かった。
バイナリーサーチでどのレスを描画するか最初に決めてから描画するようにしたら
ちょっと軽くなった。
描画するかどうかの判定はレス毎にしてたんだけど、1ピクセルスクロールするたびに
レス全体を描画するのは無駄なんで、1行毎に判定するようにしたらかなり
実用的な速度になった。
ここからV2C並の機能を持たせるとしたらどれだけのコードを書かないといけないやら。
V2Cの作者さんは偉いね。
778 :
abc :2009/09/16(水) 19:32:12
779 :
abc :2009/09/19(土) 11:41:01
1行にどのくらい文字が入るかってどうやって計算すればいいんですかね? これで、計算しているのですがJPanelのサイズと文字によっては ちゃんと表示されない可能性があるのでorz final String str = "1 名前:デフォルトの名無しさん []: 2008/11/21(金) 11:24:21"; //表示するのに何行必要か int row = fontMetrics.stringWidth(str) / this.getPreferredSize().width; //表示するのにどのくらいのサイズが必要か temp = row * * fontMetrics.getHeight();
一文字ずつ連結してコンポーネントの幅を超えないか評価。
LineBreakMeasurerにおかませでおk
日本語Swingだと、LineBreakMeasure使っても禁則がはみ出るときは はみ出たような気がしたが、最近は改善されてるかも知れない。 長音「ー」を500回書いた文字列とかで試してみて。 毎回文字列生成し直して試行錯誤するのが嫌な短気な人は、 GlyphVector#getGlyphPositions()が速い。
分割の仕方が気に入らないのなら、独自のBreakIteratorを実装して渡せばいいんでない?
今は LineBreakMeasurer なんてのがあるんだ。 行の折り返し文字数決定なんて JDK1.0-1.1 のプアなコンポーネント時代に実装したきりだな。
785 :
abc :2009/09/19(土) 17:35:13
>>782 >日本語Swingだと、LineBreakMeasure使っても禁則がはみ出るときは
>はみ出たような気がしたが、最近は改善されてるかも知れない。
それは知らなかった。ありがとう
LineBreakMeasurerはちょっと問題があるのが気になる
>LineBreakMeasurer(AttributedCharacterIterator text, FontRenderContext frc)
コンストラクタのシグネチャはこうなっていて、違う文字に替えて計りたいときは
AttributedCharacterIterator を作り直さないといけない所
10回とかならいいけど、スレッド全体の座標を計算する事になるとコストが馬鹿高くなってしまう
>779 名前:abc [sage]: 2009/09/19(土) 11:41:01
>1行にどのくらい文字が入るかってどうやって計算すればいいんですかね?
>これで、計算しているのですがJPanelのサイズと文字によっては
この文章だとdatを「str.split("<br>");」を区切っているので、3個AttributedCharacterIteratorが必要に
つまり、3 * 1000回オブジェクトの生成をしないとダメ
どうにか、ならんいんですかね
787 :
abc :2009/09/20(日) 17:35:33
コード晒してみなよ。 突っ込んであげるからさ。
789 :
abc :2009/09/20(日) 19:14:52
>>788 順調に行けば、あと何日かで文字を表示できるようになると思うので
文字を表示できるようになったら、コードを晒します
その時は、よろしくお願いします
790 :
abc :2009/09/21(月) 09:28:38
文字列が何行になるか計算をしているメソッドなのですが、 同じアルゴリズムでも計算結果が違います どっちを信じるのが妥当なのでしょうか private int lineCount(Font f, FontRenderContext frc, String str, int panelWidth) { GlyphVector gv = f.createGlyphVector(frc, str); double currentLineWidth = 0; float advance = 0; int lineCount = 1; GlyphMetrics gm; for(int i = 0; i < gv.getNumGlyphs(); i++) { gm = gv.getGlyphMetrics(i); advance = gm.getAdvance(); if(currentLineWidth < panelWidth && panelWidth < currentLineWidth + advance) { lineCount++; currentLineWidth = 0; } currentLineWidth += advance; } return lineCount;
791 :
abc :2009/09/21(月) 09:30:13
private int lineCount(FontMetrics f, String str, int panelWidth) {
int currentWidth = 0;
int charWidth = 0;
int lineCount = 1;
int len = str.length();
char[] ch = new char[len];
str.getChars(0, len, ch, 0);
for(char c : ch) {
charWidth = f.charWidth(c);
if(currentWidth < panelWidth && panelWidth < currentWidth + charWidth) {
lineCount++;
currentWidth = 0;
}
currentWidth += charWidth;
}
return lineCount;
>>790 の実行結果
4240行
>>791 の実行結果
4670行
実行してみると
>>791 の方が動作がよい印象を受けます
0.5pixel四捨五入か1pixel切り上げか解らんが、
丸め誤差を100文字累積させれば、
それだけで数十Pixelのずれが出てもちっともおかしくないんだな。
drawGlyphVectorで描くんだったら
>>790 でいいんじゃない?
日本人相手なら、文字Aの幅とBの幅の合計は文字列ABの幅と等しいと
決めつけても、大して問題ないけど。
どうせイタリックとか使わないでしょ?
793 :
abc :2009/09/21(月) 18:17:49
>>792 >drawGlyphVectorで描くんだったら
>>790 でいいんじゃない?
まだ、何で描写するか迷っています
>どうせイタリックとか使わないでしょ?
現時点では太字とかイタリックは使いません
問題は
>>790 を使うとなぜか遅いという所だけです
もうちょっと考えみます
数千行のテキスト1文字1文字でGlyphMetricsオブジェクト生成してたら
そりゃコピーGCが悲鳴を上げるのですよ。
>>782 のgetGlyphPositions()で十分なんじゃない?
一回だけfloat配列を手に入れれば、N文字目頭からM文字目頭までのピクセル幅は
float配列[(N-1)*2]と[(M-1)*2]の値の差でガンガン求められそう。
しかもこのfloat配列、別GlyphVectorに対しても結果格納先として再度使い回しが効くのだ。
昔組んだソースが出てきた。 数文字を想定して書いたから、数千文字とかでやったらどうなるかは知らぬ・・・。 public static int lineCount(String str, Font font, int width){ float max = new TextLayout(str, font, new FontRenderContext(new AffineTransform(), false, false)).getVisibleAdvance() ; if(width >= max)return str.length(); float min = new TextLayout(str.substring(0, 1), font, new FontRenderContext(new AffineTransform(), false, false)).getVisibleAdvance(); if(width < min)return 0; int begin = 1; int end = str.length(); while(true){ int base = (begin+end)/2; float now = new TextLayout(str.substring(0, base), font, new FontRenderContext(new AffineTransform(), false, false)).getVisibleAdvance() ; if(end - begin == 1)return begin; if(width > now){ begin = base; } else if(width < now){ end = base; } else { return base; } } }
796 :
abc :2009/09/22(火) 13:51:57
>>794 そうですね、GlyphVector#getGlyphPositions()を使うように変更してみます
>>791 の方法で頑張ってきましたが、intなので誤差が大きくなりすぎました
そのため、JPanel上に表示すると文字列の長さが明らかに変でした
>>794 のアルゴリズムはなかなか、便利そうなアルゴリズムなのですが
頭が足りないので理解できるように考えます
>>795 ありがとうございます。時間が空いたらじっくりと考えます。
情報処理技術者試験の勉強でもしてくるかなorz
GlyphVectorのjavadocちゃんと読んでいるんだったorz
797 :
デフォルトの名無しさん :2009/09/22(火) 17:39:59
パネルを2枚重ねてどちらにもMouseMoveイベントをつけておくと、 どうも上の方しか検知されないのですよね。 2つとも同時にMouseMoveイベントを発生させる方法ってありますか?
何がしたいのか解らんのだが、 単一Mouselistenerに両方の面倒見させる訳にはいかないの?
単に下のパネルにイベント投げ直せばいいんじゃないの?
801 :
795 :2009/09/25(金) 03:09:22
ひゃー 今さらだけど>795は一行に何文字入るかのメソッドだわ・・・;; ごめんなさい・・・。
言わなくてもTextLayoutが出てくる時点で気づいてるだろ。
>>800 それ、あんま上手く書けない。
いろいろ実験したときのうろ覚えの記憶では、「下のパネル」を探すのがえらく面倒だったような気がする。
結局
>>798 がいちばんすっきり書けるという結論になった。
どうせ一行に何文字入るか調べなきゃいけないからTextLayout必要だと思うんだ
806 :
abc :2009/09/26(土) 20:51:37
ttp://uproda11.2ch-library.com/11200993.zip.shtml パスワード:swing
>778 名前:abc [sage]: 2009/09/16(水) 19:32:12
この部分だけ表示しようと思っているんだけど、もう何が何が何だかわからなくなってきた
この部分は一応表示できるけど、例外だらけorz
問題のクラスはnanashi2.view.{ResInfo.java,ResView.java}
さっきまでは、ウインドウの幅を変えないと例外が発生しなかったけど
状態が悪化したorz
誰かhelp me !!
,、‐ ''"  ̄ ``'' ‐- 、 /イハ/レ:::/V\∧ド\ /::^'´::::::::::::i、::::::::::::::::::::::::::::\ 死ねばいいと思うよ ‐'7::::::::::::::::::::::::ハ:ハ::|ヽ:::;、::::::::::::丶 /::::::::::::::/!i::/|/ ! ヾ リハ:|;!、:::::::l /´7::::::::::〃|!/_,,、 ''"゛_^`''`‐ly:::ト /|;ィ:::::N,、‐'゛_,,.\ ´''""'ヽ !;K ! |ハト〈 ,r''"゛ , リイ)| `y't ヽ' // ! ぃ、 、;:==ヲ 〃 `'' へ、 ` ‐ '゜ .イ `i;、 / l 〉 ` ‐ ´ l`ヽ / ! レ' ヽ_ _,、‐7 i| i´ l `' ‐ 、_
落ち着いてIDEのデバッガを覚えよう。 IDE初めてならNetBeansでいいよ。 折り返しのあるテキスト系コンポーネントのリサイズレイアウトはいろいろと面倒くさかったなぁ。 レイアウトマネージャー様からのサイズ指定はとりあえず絶対服従な。 revalidate()呼べば、レイアウトマネージャがとりあえずgetPreferredSize()経由で 希望サイズをあとで聞いてくるはずだから。希望が叶うかどうかの条件はよく解らん。
swingworker誰かつかってます?
誰かって、マルチスレッドにするなら普通使うだろ・・・
812 :
809 :2009/09/29(火) 18:16:47
使ってます
813 :
809 :2009/09/29(火) 18:57:06
単純にディレクトリをとその中身(ディレクトリ&ファイル)をコピーするのを作りたいんですが、 コピーした内容を逐次jTextAreaにオンタイムで表示させたいのです。
半年ぐらい前の「JTextComponentのsetText()はスレッドセーフか?」は決着付いてなかったんだっけ…
>>810 スレッドプール使いたいので、swingworkerは使いません。
swingworkerってexecutor指定出来たっけ?
スレッドプール方式とGUIの更新ってうまくなりたつのかね 単一のGUI更新スレッドへの参照をワーカースレッドがみんな持ってるとかか
コンポーネントのサイズに変化があると、 public void paintComponent(Graphics g)が呼び出されますよね これを、コンポーネントのサイズに変化があっても 意図的に呼び出さなくする方法ってありますか?
>>817 paintComponent(Graphics g) をオーバーライドして、
不要なときには処理しないようにするとかで実現は出来そうだけど
Swing的に実現できるかどうかはシラネ。
やりたいことが何なのかがわからないから、多分的を外してると思う。
>>818 やっぱり、それしかないかありがとう
paintComponent(Graphics g)を呼び出す前の、前処理をしておきたかっただけ
paintComponent()の中に書けばいいじゃんって気もするけど、
componentResized(ComponentEvent e) ってのがあるから気になったわけ
componentResized()→paintComponent()の順に呼び出されるのかと思っていたけど
実際にはpaintComponent()→componentResized()の順番だったorz
>>814 コピー処理の逐次ロギングを毎回setText()で全更新は効率悪すぎるだろ。
JTextAreaに吐くLoggerを昔作ってたけどね。
事前にテキストコンポーネントへsetDocument()しといた
jaxax.swing.text.PlainDocument経由で文字列追加すれば
EDTだろうがなんだろうがスレッド競合のことはなにも考えなくてよかったような気が。
SwingWorkerなんて軟弱なものが無かった頃の昔話。
>>816 どんなスレッドからでもSwingUtilities.invokeLater経由すれば、
EDTでの実行になるでしょ。
822 :
デフォルトの名無しさん :2009/10/17(土) 19:50:19
JTable に書き込むときに、マウスを使用してセルを選択したときは問題ないのですが、 タブで移動したセルに書き込むとき、半角英数字は問題ありませんが、全角を書き込む は、マウスでクリックしないと書き込めないのですが、解決方法はありませんでしょうか? タブで移動しながら、半角文字を書き込んでいるときはいいのですが、日本語を書き込む ときに、どうしてもマウスクリックが必要となります。 よろしくお願いします。
スレタイから「低速」を外してほしい
というかAWTもここに戻せよ。
ごめん。書き忘れちゃったんだ。 俺が悪い。何とでもいってくれ・・・。 低速はいらないと思うね。SWTとの比較なんかもう今やあほらしいし。
SWTとの比較しておられる厨な方々がアホらしいと思って下さるかどうかが問題なわけで
まあ速い実装が有るから、入れといたほうが無難。 swing使って遅いって馬鹿避けにも成るし。
>>827 の「swing遅いぜ厨」避けに入れておいて欲しい。
ホント不毛な話でスレがつぶれるから。
「swing遅い」って話と、「swing今は意外と速い」って話なら後者の方が直ぐに収まるし。
swingが速くなったっつーよりは マシンが速くなっただけじゃね?
>>829 みたいな奴が居ても
「はいはい、遅いですよ。スレタイにも低速って書いてあるでしょ?お帰りください」
って言えるから楽だしな。
真面目にレスすると、マシンも速くなったしSwing自身もOSの描画機能を
最大限有効活用するように変わってきたから、ハードウェアの性能を出し切る様な
アプリでなければ大体の要件に答えられるレベルになった。
って評価だと思う。少なくとも俺はそう。
Swingのいくつかの描画アルゴリズムは高速化されてるが昔の遅いアルゴリズムも使えるから使ってみればいい。
あ、はい……
833 :
デフォルトの名無しさん :2009/10/21(水) 00:17:58
Java7にApplication Frameworkは載らないの? Javaクライアントはそんなに将来性が無いのか
う、うん……(´・ω・`)
7でswingサポートが無く成るって話?
mjdk
Swingも速くなったしJVMも速くなったしマシンも速くなった。
なにもかも速くなった世の中で、まだアセンブラで書きますか?
なにもかも速くなったのにまだ遅いんですね
VisualEditorのML見てると Swing自体面倒すぎるのでXMLでGUI定義するか いやそれはまずい、素のコードをちゃんとパースすべきだ とかなかなかカオス
Swingめんどうすぎとおもうこともあるけど、VC++のGUIなら簡単ってこともないよね 使ったことないから知らないのだけど。
もう絶対座標は嫌だお・・・
wxなら簡単
>>845 Windows Formならかなり簡単。
でもどうせならC#と使うのをすすめる
Groupレイアウトが何か使いにくい。 絶対値ではなく某かのよりどころを基準にしてるからなんだけど、 こんなん使いこなすくらいならnullレイアウトでいいよ。。。
C#なんて消えちまえ
VisualStudioのGUIデザイナと一番感覚が似てるのって何レイアウトなんだろ いろいろあってよくわからない
Qtなら簡単
もう絶対座標は嫌だお・・・
Qtはもう新規開発されてないし、メンテナンスモードだろ
JavaユーザがSystem Look&Feelを諦めればnullレイアウトでいいんだよ。
>>856 ウィンドウサイズ変えたり要素位置変えるときとかどうすんの?
というかレイアウトマネージャとLaFはほとんど関係ないだろ。
たまに関係あるから困る
860 :
デフォルトの名無しさん :2009/10/22(木) 20:00:38
JOGL と Swing の組み合わせで 3D オンラインゲーム作れますか? GLJPanel は AWT 用いる GLCanvas よりだいぶ遅かったと 言われてましたがはて今は?
HSPスレかと思った
JTreeを継承して、DefaultMutableTreeNodeを使ってツリーを作りたいんだけど スパークラス(JTree)のpublic JTree(TreeNode root)を呼び出すしか方法ないの?
DefaultMutableTreeNodeを使ってツリーを作るのに JTree(TreeNode root)を呼び出すのは至極真っ当に見えるけど 何が不満なのか書かないと解決策を提案できない
864 :
デフォルトの名無しさん :2009/10/23(金) 22:52:48
JFrameにフォーカス当たってない時の、KeyListenerのイベントって受け取れませんか? 他のアプリケーション操作時のキー入力を取得できませんかね?
むーりよーん
>>866 やっぱり無理ですか-
ありがとうございました
windowsのモーダルフォームみたいな事をしたいと思っているんだけど、何かいい方法ない? そのフォームを使ってソフトの設定をしたいんだけど やっぱり、JDialogしかないのかな
ソフトの設定がしたいってんならそうだろうね。 一行だけとかならJOptionPaneのインプットフォームが手間無しだけど。
グラスペインにコンポーネント描画してそこでイベント食い尽すとか
ちゃんとそれくらい調べなさい。 JFrameとかJDialogとか、つまりRootPaneContainerの概念で、最前面(JLayeredPaneによる層よりもさらに前面)のコンポーネント。 たしかポップアップメニューとかの描画に使われたはず。
Component glass = frame.getGlassPane(); glass.setVisible(false); ↑こうするとメニューも含めてframeは一時的に操作できなくなるはず。 ついでにカーソルをドクロマークかなにかにしておくのが吉。
JTabbedPaneを継承してFireFoxみたいなタブ機能を作ろうとしているのですが、 タブを選択したときに閉じるボタンの色を変えるのがどうしても出来ません どのメソッドを使えば実現できるでしょうか?
875 :
871 :2009/10/26(月) 10:22:03
JFrameでキャンセルボタンをクリックしたら、自分自身を閉じる処理をしたいのですが これって、普通にdispose()を呼んでもいいんですかね?
>>874 普通に考えてタブが選択されたときにsetTabComponentAtのコンポーネントを書き換えるだけでは?
>>877 ChangeListenerを使って、変化したら選択されてるタブの閉じるボタンの標準画像を切り替えるようにしたら出来ました
ホントにありがとうございました
自宅のPCでJDialogを使ったプログラムを作ってみたのですが、 他のPCで実行したらダイアログのレイアウトが崩れてしまいました 自宅のPCはLinxuで、レイアウトのズレが発生したOSはWindowsです 崩れる理由を教えてください
ソースを出さないと適切なアドバイスは受けられないよ。 とりあえず、LAFとかフォントとかの違いじゃない?
>>880 ソースを出そうと思うのですが、修正をしてしまいました
フローとか単純なレイアウトではlafくらいしかずれる要因がないから nullレイアウトかグリッドバッグとか座標指定するレイアウトで座標が何かに依存してるとか。
すべての環境を前提とする実装はそもそも無理だしな。 redhat6とかwindows8でも問題なく動く様にするのは今は無理。
タスクバーやツールバーが移動出来るソフトがありますが、 やっぱりSwingでは簡単に実装できないんですかね?
JToolBarは簡単にドラッグして移動できるけど、そういう話ではなくて?
>>885 Jane Styleを見ていたら動くツールバー等々を作ってみたいな〜と思ったので
JMenubarと勘違いしてました
ありがとうございました
DnD API叩けばドラッガブルコンポーネント作れるけどな。
だが面倒くさい
ツルバーやメニューなど(システム)に設定されているフォントを、どうやったら取得できますか
どっかのリソースバンドルから拾えたような。
プロパティを直接読むのではなく UIManager だか UIDefaults だかを使うほうがいいかも。 詳しくは分からないけど。
893 :
889 :2009/11/03(火) 20:58:29
いろいろと面倒くさそうなので、別の所を作った後にまた質問しに来ます ありがとうございました
894 :
デフォルトの名無しさん :2009/11/05(木) 00:11:25
だからお礼はいらないって
わたしは何をしたらいいんでしょうか?(´・ω・`)
フロントをFlexに、サーバをS2BlazeDS+S2JDBC+GlassFishで稼働してるシステムがあるんですが UIをSwingで構築することになりました。 まだはじめたばかりなんですが、 NetBeansでGUIを構築しようかなとダウンして試してます。なかなかいいですね。 それで、サーバ側との通信をどうしようか考えてます。 既存のシステムがBlazeDSなのでプロトコルはamfです。 Swingを使ったサーバ側のロジック(特にSeasar2)を呼び出すやりかたのオススメってありますか。 できれば、サーバ側の構成は崩したくない(特にS2JDBCを使ったロジック)と思ってます。
897 :
デフォルトの名無しさん :2009/11/17(火) 00:05:15
JPanelを継承して、サイズはsetPreferredSize(new Dimension(100, 300))に設定しました。 下の様なコードを書いたわけですが、結果が↓のようになりました 264.0 ←文字列の長さ 13.962890625 ←高さ 100 x 300のパネルなので、高さが26〜27程度になって欲しいところです。 どうにかして、テキストを自動的に折り返して高さが26にする方法ありませんか? private String text = "あいうえおかきくけこさしすせそたちつてとなに"; public void test() { Graphics2D g2 = (Graphics2D)getGraphics(); FontMetrics fm = g2.getFontMetrics(); g2.setClip(0, 0, 300, 300); Rectangle2D r2 = fm.getStringBounds(text, g2); System.out.println(r2.getWidth()); System.out.println(r2.getHeight()); }
898 :
896 :2009/11/17(火) 20:03:54
896です。その後、ググったりして色々解ってきました。 S2RMIなどを使うと良い感じのようです。
JFrameで背景の塗りつぶしを無効にするにはどうすればいいですか? JOGLなるものを入れてみたんですが、3Dが表示された直後に背景が塗りつぶされてしまい 何も見えなくなってしまいます・・・。
ダブルバッファを向こうにしてupdateも無効にするんだっけか。
>>900 お早い回答ありがとうございます。
> ダブルバッファを向こうにしてupdateも無効にするんだっけか。
というのは、createBufferStrategyを呼ばず、update(Graphics)を空オーバーライドする。ということでしょうか?
そうでしたら、既にやっています。ちなみにpaint/repaintも空オーバーライドしてみましたが、ダメでした・・・。
JOGL使ってるのにバッファーストラテジーをSwingで使ってるの? めちゃくちゃにも程がある。
>>902 実はFrameでもやってるんですが、同じ結果だったので変わらないかなと思っちゃったんです・・・。
何がいけないんでしょうか?
質問なのですが、Swingset3の左側メニューにある、クリックすると展開する部品って どんなAPI使ってるんでしょうか? すごい使いたい機能なんですが、どの部品の機能なのかわからなくて…
>>903 JOGL使うときはBufferStrategyではなくJOGLのダブルバッファを使う
Windows以外の環境でのVolatileImageのパフォーマンスは最近どうなっていますか? WindowsだとデフォルトのBufferedImage -> VolatileImageのレンダリングが ちょっぱやなので、他の環境でそれを当てにしていいものか悩み所です。
なんかテスト用のプログラム作ってくれればウチのMacで試してみるけど
マックのJDKって最新はいくつになるの? 6相当って出てる?
Java5で簡単なコード書いたんだけど、公開はどうすればいいかな? Mainクラスひとつだから、ソースべたっと貼ってもいいけど、 やはりjarをアップロードするのが手軽でいいか? 仕様は100x100の円を1024回描画した時に何fps出るか。 ちなみに私の環境だとWinXpSp3, C2D E8400, GeForce 9800GTXで、 だいたい800fps overくらい。
package bstest; import java.awt.Canvas; import java.awt.Color; import java.awt.Dimension; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.image.BufferStrategy; import java.awt.image.BufferedImage; import java.util.Random; public class Main { public static void main(String[] args) throws Exception { Canvas canvas = new Canvas(); canvas.setPreferredSize(new Dimension(800, 600)); Frame frame = new Frame("BufferStrategy Benchmark"); frame.addWindowListener(new MyWindowListener()); frame.add(canvas); frame.pack(); frame.setVisible(true); runAnimationLoop(canvas); }
private static void runAnimationLoop(Canvas canvas) throws Exception { canvas.createBufferStrategy(3); BufferStrategy strategy = canvas.getBufferStrategy(); Image img = createOvalImage(); Random rand = new Random(); Toolkit toolkit = Toolkit.getDefaultToolkit(); String fps = "0"; int frame = 0; long nextOneSec = System.currentTimeMillis() + 1000; while (true) { long currentTime = System.currentTimeMillis(); if (currentTime >= nextOneSec) { nextOneSec = currentTime + 1000; fps = String.valueOf(frame); frame = 0; }
Graphics g = strategy.getDrawGraphics(); if (strategy.contentsLost() == false) { for (int i = 0; i < 1024; i++) { g.drawImage(img, rand.nextInt(800) - 50, rand.nextInt(600) - 50, null); } g.setColor(Color.YELLOW); g.fillRect(0, 0, 40, 20); g.setColor(Color.BLACK); g.drawString(fps, 0, 10); g.dispose(); strategy.show(); toolkit.sync(); frame++; } else { System.out.println("strategy.contentsLost()"); } } }
private static Image createOvalImage() { Image img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB); Graphics g = img.getGraphics(); g.setColor(Color.GREEN); g.fillOval(0, 0, 100, 100); g.setColor(Color.BLACK); g.drawOval(0, 0, 100, 100); g.dispose(); return img; } static class MyWindowListener extends WindowAdapter { @Override public void windowClosing(WindowEvent e) { super.windowClosing(e); System.exit(0); } } }
ブログとかでそのベンチのソース貼り付けてやってくれる人募集の方がいいだろう。
916 :
910 :2009/11/25(水) 23:58:50
とりあえずソースだけ貼ってみた。 ブログは持っていないなぁ。
>>905 なるほど、ありがとうございます!
>>906 もともとBufferedImageの内容を射影変換したものを描画したかったので、それさえ出来るならJOGLじゃなくてもいいんです。
ていうか、JOGLがJavaらしくなくて使いづらいので、便利なのあればそっちを使いたいです・・・。
>>909 6 でてるよ。 java -version やったらこんな感じ。
java version "1.6.0_15"
Java(TM) SE Runtime Environment (build 1.6.0_15-b03-219)
Java HotSpot(TM) 64-Bit Server VM (build 14.1-b02-90, mixed mode)
>>910 MacBookPro (MB470J/A) Core2Duo2.4GHz GeForce9400M で 26 fps だったw
-Dapple.awt.graphics.UseQuartz=true を付けると 46 fps くらい。
>>918 おお、ありがとう。
下のオプションはSunのレンダーを使うだけみたいだし、副作用はなさそう?
512spriteを60fpsで、がマルチプラットフォーム向けの目安にすればいいか。
良いVRAM積んでるLinuxやOpenSolaris環境な方も是非是非計測を。
ゲームか? PenMとか糞遅い環境だと即死なベンチだなw
>>919 逆だ逆。
オプション指定したら、Sunのレンダラを使わない方。
GridLayout を使うと、すべてのアイテムが均等サイズになるのですが、サイズを割合で 指定する手段はないのでしょうか?
GridLayoutじゃ無理だなぁ GridBagLayout使うか、自作かだね
JFrameにJMenuBarをセットして使ってるんですが、JMenuBarのupdate()に JFrameのBufferStrategyからgetDrawGraphics()で取得したGraphicsを渡すと描画されません。(?) これを正しく描画できるようにするにはどうすればいいでしょうか?
最近Javaを始めた初心者です。 いまマウスで線を描く簡単なプログラムを作っているのですが、 ウィンドウを最小化してまた復帰させたときに描いた線が消えてしまいます。 マルチバッファリングの処理をいれてないのでそれが原因かと思ったのですが、 調べてみるとswingは自動でダブルバッファリングをしているとのことで何が原因か皆目検討がつきません。 よろしければ助言をいただけないでしょうか。 import java.awt.*; import javax.swing.*; import java.awt.event.*; class Draw extends JPanel implements MouseListener, MouseMotionListener{ static final int LINE = 1; private int x1, y1, x2, y2; private int mode; public Draw(){ x1 = -1; y1 = -1; addMouseListener(this); addMouseMotionListener(this); }
public void paintComponent(Graphics g){ if (mode == LINE) drawByMouse(g); mode = 0; } public void mousePressed(MouseEvent e){ x1 = e.getX(); y1 = e.getY(); } public void mouseDragged(MouseEvent e) { x2 = e.getX(); y2 = e.getY(); mode = LINE; repaint(); } public void drawByMouse(Graphics g){ g.drawLine(x1, y1, x2, y2); x1 = x2; y1 = y2; } public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseMoved(MouseEvent e) {} public void mouseReleased(MouseEvent e){} public static void main(String[] args) { JFrame f = new JFrame("Draw"); f.setSize(400, 300); f.add(new Draw()); f.setVisible(true); } } 以上までがソースコードです。 よろしくお願いします。
ためしに実行してみたけど、 むしろ「ウィンドウを最小化してまた復帰させるまでは線が消えない」ことに驚いた。 JPanel を継承するとそうなるのか。 何か勘違いしてるみたいだけど、 コンポーネントは repaint() が呼ばれるたびに まっさらにクリアしてから描画しなおすのだよ。 以下のいずれかの方法をとる必要がある: ・マウスが動く軌跡をすべて記録して、 paintComponent() で全ての線を描きなおす。 ・マウスが動くたびにオフスクリーンイメージに線を描いて、 paintComponent() で、そのイメージを貼りつける。 最後に:このていどの質問なら 「Java質問・相談スレッド」に書いた方がいい。
JScrollPaneの内部で使われているJViewportは窓の役割を果たしていますが、 コンポーネント全体を描写した後に窓から見えるコンポーネントの一部を表示しているのですか? それとも窓から見える部分だけ描写しているのですか?
窓から見える部分だけ描画している
>>925 フルスクリーンっていうオチじゃなくて?
932 :
929 :2009/12/10(木) 19:44:25
マルチラインフォントを実現させるために、DefaultStyleDocumentにinsertString()で文字列を追加しています しかし、insertString()の実行回数が増えてくると、処理にかなりの時間がかかってきます どうにかならないでしょうか?
934 :
デフォルトの名無しさん :2009/12/11(金) 17:59:08
>>933 ・insertString呼び出しを減らす。
・ぎりぎりまでsetDocumentしない。
・PlainDocumentで済ませる。
DefaultStyleDocumentのSun実装ってVector使ってるぽいので、
途中への段落挿入は遅そう。
ところでマルチラインフォントってなに?
二行分の記述を()で囲いたいとか?
937 :
デフォルトの名無しさん :2009/12/12(土) 16:00:45
それかもしれない。
938 :
933 :2009/12/12(土) 18:02:19
マルチラインていうとだいたいどのツールキットも複数行テキストのことだが。 フォントってなんだろうな。
フォントのベースラインが固定されていないってことでは
それは扱い面倒そうな仕様だな。 目で見ればずれてるって理解出来るが、プログラムでずれてるのを補正するのは面倒。
確かに面倒だろうな。
943 :
デフォルトの名無しさん :2009/12/13(日) 14:16:30
すんません教えてください。キーが取れないんです… import java.awt.event.KeyEvent; import java.awt.event.KeyListener; public class OreView extends FrameView implements KeyListener { public OreView(OreApp app){ super(app); : 中略 : mainPanel.addKeyListener(this); mainPanel.requestFocus(); } int key_code; public void keyPressed(KeyEvent e){ key_code = e.getKeyCode(); System.out.println("key_code_on:"+key_code_on); } public void keyReleased(KeyEvent e) {} public void keyTyped(KeyEvent e) {} } 上記以外は、ほとんどNetBeans IDE 6.5.1 で生成したJavaデスクトップ アプリケーション(SingleFrameApplication)のまんまです。 アプリのウインドウの上にマウスを置いてキーボードを叩いてもkeyPressedが 呼ばれないのはなぜでしょうか?
944 :
943 :2009/12/13(日) 14:57:53
MouseListener で同様にやってみたんですが、こっちは思った通りに動いています。 KeyListener が取れない理由って何かあります…?
誰かがキーイベントを横取りしているのでは
946 :
943 :2009/12/13(日) 15:16:33
>>945 確かにそんな感じはします…出来合いのフレームワークなので、自分で
書いたコード以外にいろいろ走ってますし
が、調べるとっかかりがちょっと思いつかないです。ほとんど新規プロジェクトの
生成直後なので、Swingの挙動に明るい方、何かヒントあればお願いします
キーボードフォーカスがどこにあるのか調べる requestFocusしているが、本当にそこにフォーカスが行ってるのか
mainPanel が focusable じゃないとか。 フォーカスの行方を調べるには KeyboardFocusManager とか使うとよいかも。
951 :
943 :2009/12/13(日) 17:47:35
みなさんどうも。 うーむ… focusなんたらって名前のプロパティをチェックONOFFしてみましたが、 どう組み合わせてもだめっぽい感じです。 KeyboardFocusManager をちょっと調べてみます。
952 :
943 :2009/12/13(日) 19:52:45
一応報告です KeyboardFocusManagerで調べたら、mainFrameにフォーカスが当たっていたので、 mainPanelではなく、getApplication().getMainFrame()へaddKeyListenerしたら キーが取得できたっす。 ヒントくれた皆さんありがとー
それはmainPanel.addKeyListenerじゃ取れないだろうなあ。
KeyStrokeとInputMapのWHEN_IN_FOCUSED_WINDOWじゃダメなの?
漠然と質問ですが、Swingを使いやすくした補助ライブラリみたいなユーティリティクラス群のライブラリってありますか? apacheのcommonsみたいなやつ
ラップして使い勝手あげる方針がApp Framework。 機能強化して使い勝手あげるのがSwingXとかSwing lab製ライブラリ群。
>>956 GUI作成支援のアプリケーションを作りたいのですが、
D&Dで移動したり、部品のリサイズ、追加、削除、この辺をやる上で使い勝手がいいライブラリはどれになるでしょうか?
SwingWorkerって1.6で登場ってことで、1.5の場合バックグラウンド処理はどうすればよいでしょうか? ちなみに、Swingって1.6で大幅に使いやすくなったのでしょうか?
>>958 フツーにThread立ち上げればいいんじゃない?
ディスパッチスレッドとの競合管理とかめんどいんでね、もーね、その間GlassPane使ってGUI操作禁止にしてる。
なにそれ? その間は入力できないの?w
>>960 うんw
と思ったけどヘビータスクの要所要所でEventQueue.invokeWait()でGUI操作してたわ。
SwingWorkerと大して変わらんね。参考にならなくてすまん。
5.0で使えるSwingWorkerがあるでしょ
>>962 SwingWorkerってクラスはないですけど、代替えクラスがあるんですかね?
javaってchdirみたいなカレントディレクトリ移動できないんですか?
>>963 jdesktop SwingWorkerでぐぐれ
SwingWorkerくらい作ればいいじゃん
いまオリジナルのSwingWorkerホストしてるのどこだっけ?
何かそんな適当に拾って来たのを、自分でメンテするのは嫌だな。 ちゃんと誰かがメンテしてるのは無いの?
無名クラスとinvokeAndWaitでええやん。 凝ったことすればSwingWorkerの再発明になりそうだが それもまたよし
>>964 スレチなんでさくっと。
カレントディレクトリ移動の目的はな〜に?
プラットフォームにもよるけど、VMプロセスのカレントディレクトリを移動しても
たぶんFile#getAbsoluteFile()とかには反映されないよ。
システムプロパティ"user.dir"を変更しとくのじゃだめ?
javaにカレントディレクトリの概念はないいんじゃなかったっけ
1.5ではバックグラウンド処理の機構が用意されていないのでしょうか?
>>972 ファイルの相対パスアクセスを気にしていたので、user.dirですべて解決しました。
ありがとうございます。
>>974 無いから追加されたんでしょう
すでにあるのなら新しく作る意味ないし
>>972 -Duser.dir=C:\tmp\で指定したのですが反映されませんでした。
プログラム内でセットしないといけないのですかね?
>>977 あっ違う。設定はできているけど、URLクラスのfileプロトコルが無視しやがる…
new URL("file:./xxx.ini")にすると、起動ディレクトリからの相対パスだ。バグかこれ?
バグってるのはおまえWWW
>>978 だからー、もう new File("./xxx.ini").toURI().toURL() でええやん。
後は質問スレで。
>>983 アプレット通信でRMI使ってて、RMIの-Djava.rmi.server.codebaseがURL指定。
RMIモジュールをパッケージ化したので、フルパスでなんか書きたくない。
そこで相対だと思い質問しました。
工夫するのはURLでパラメータを受け取る方で、
せっかくURLというものでアクセス方法統一したなら、
工夫しないとうまく取れないというのはいかがかなと思った次第です。
javaってピクセル単位でα値を持った半透明のウィンドウを作れましたっけ? Windowsのレイヤードウィンドウと同等のことがしたいのです。
Sunのjdk6u10以降ならcom.sun.awt.AWTUtilities使えるはず
>>986 ありがとう。でもこれじゃピクセルごとのαはできそうにないですね。
Path2Dで自分で定義すりゃいい
?マウスについてる半影みたいなのをPath2Dでできますか?
JFrameのRootPaneだかなんかのpaintComponentをオーバーライドして何もしないようにすると透けるとかそういうのなかったっけ
import java.awt.*; import javax.swing.*; import com.sun.awt.AWTUtilities; public class Hoge extends JWindow { float[] fractions = new float[] { 0, 0.97f,0.98f, 0.99f, 1 }; Color[] colors = new Color[] { Color.WHITE, new Color(1, 1, 1, 0.001f), new Color(1,0,0,0.001f), Color.RED, new Color(1,0,0,0.001f) }; Paint paint = new RadialGradientPaint(128f, 128f, 128f, fractions, colors); Hoge() { setSize(256, 256); AWTUtilities.setWindowOpaque(this, false); setVisible(true); } public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.setPaint(paint); g2.fillRect(0, 0, 256, 256); } public static void main(String[] args) throws InterruptedException { SwingUtilities.invokeLater(new Runnable(){ public void run() {new Hoge();} }); Thread.sleep(5000); System.exit(0); } }
マウスについてる半影が理解できん。ポインタの影のことか?
理解できんとか、おまえアホだろ それ以外あるのか?W
じすれ
Java7のリリースが延びた隙にSwing Application Frameworkねじこんでほしいな
それそれー ゴスリンがシングルトンの設計くそって言ったせいで取りやめになったんだっけか? どうせシンプルなアプリケーションにしか使われないんだしいいじゃないかと思うんだけどなぁ
swing out
?
1000 :
デフォルトの名無しさん :2009/12/18(金) 23:40:28
JLabelがクリックされたとき、JLabelではなく親のコンポーネントがクリックされたことにしたいのですが どういしたらいいでしょうか?
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。