Java低速GUI Swing 5
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/10/18(水) 11:50:09パフォーマンスの問題は徐々にですが改善されつつあります。
しかしながら、"Java"というだけで未だに敬遠されるのが現状。
そんなSwingと引き続き付き合っていくみんなのスレッドです。
Java低速GUI Swing 4 (前スレ)
http://pc8.2ch.net/test/read.cgi/tech/1140533866/
Java低速GUI Swing 3
http://pc8.2ch.net/test/read.cgi/tech/1121700954/
Java低速GUI Swing 2
http://pc8.2ch.net/test/read.cgi/tech/1095398949/
Java低速GUI Swing
http://pc5.2ch.net/test/read.cgi/tech/1062271447/l50
0052デフォルトの名無しさん
2006/10/30(月) 19:57:31Java SE 6ではActionにSELECTED_KEY、DISPLAYED_MNEMONIC_INDEX_KEY等が追加されたんだね。
今まで何でないのか不思議だった。AbstractButtonにもHideActionTextプロパティが追加されてる。
0053デフォルトの名無しさん
2006/11/04(土) 00:43:50ttp://www.gremlin.jp/yada/java_JTable/SimpleRowHeader.htm
↑のアプレットみたいに、ウィンドウサイズを変えたら、そのウィンドウと同じサイズにJTable
をリサイズするにはどうしたらいいのでしょうか?
ComponentListenerを使うのでしょうか?
0054デフォルトの名無しさん
2006/11/04(土) 01:04:21よくわかんないけど、普通に貼り付ければこうなるんじゃないんだっけ?
BorderLayoutでCenterに配置するとか。
005553
2006/11/04(土) 01:41:03変わってしまいます…
ウィンドウサイズと同じサイズにリサイズさせたいのですが、そのやり方わからなくて…
0056デフォルトの名無しさん
2006/11/04(土) 01:45:56レイアウトマネージャをどう使っているか次第。
NullLayoutなどだと、座標で配置されているから、ロジック書かないとリサイズはされない。
>>54が書いているように、BorderLayoutでCenterに配置するのが普通。
005753
2006/11/04(土) 10:32:33ありがとうございまいた。私の知識不足でした。レイアウトマネージャをBorderLayoutにして
CENTERに配置すればできました。
できなかった理由としてFlowLayoutとGridLayoutを使っていたためだと思われます。
レイアウトマネージャについて勉強してきます。
ありがとうございました。
0058デフォルトの名無しさん
2006/11/04(土) 11:49:300059デフォルトの名無しさん
2006/11/04(土) 12:58:250060デフォルトの名無しさん
2006/11/04(土) 13:02:450061デフォルトの名無しさん
2006/11/04(土) 13:05:080062デフォルトの名無しさん
2006/11/04(土) 14:44:060063デフォルトの名無しさん
2006/11/04(土) 14:49:380064デフォルトの名無しさん
2006/11/04(土) 15:11:41実装がかなり前に止まっているとか。
0065デフォルトの名無しさん
2006/11/04(土) 16:26:11と聞かれて、面倒くさいから、「setTextでHTMLをセットするとOK」と答えた。
で、setTextするための、HTMLを文字列でセッセと作っていたのが、そのうち
Velocityで雛形作って、セットするようになっていた。
ほとんど、Webアプリ
そのうち、IEだと、こう表示されるのが、うまくいかないとか言われそう。
0066デフォルトの名無しさん
2006/11/04(土) 16:38:25バージョン情報を表示するに、書式をいろいろ変更して使いたかったんですけど、
なんかHTMLがそのまま表示されます。
ファイルにしてsetPage()使わないとダメなのかな。。
仕方ないので、今はJTextPaneを使って、ちまちま書式設定して出してます。
0067デフォルトの名無しさん
2006/11/04(土) 17:00:17つttp://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/awt/1.3/designspec/lightweights.html
0068デフォルトの名無しさん
2006/11/04(土) 17:05:30自己レス。JEditorPane#setContentType("text/html")を使えばいいのね。
0069デフォルトの名無しさん
2006/11/04(土) 22:17:17JTableの1行目のcolumnを1列目に縦に表示するには、どうすればよいのでしょうか?
0070デフォルトの名無しさん
2006/11/04(土) 22:59:45意味不明。
007169
2006/11/04(土) 23:09:15すいません。
エクセルみたいに行番号(1,2,3..)列名(A,B,C...)のような表示をつくりたいのですが…
0072デフォルトの名無しさん
2006/11/04(土) 23:10:180073デフォルトの名無しさん
2006/11/04(土) 23:18:16分からなければ、JTable自体を基礎から勉強すべし
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html
行ヘッダ(1,2,3...)は、JTableにはそんな機能ないから、それっぽく見せる実装をしなければならない。
>>5にある、為政氏のサンプルにある。
http://www.crionics.com/products/opensource/faq/swing_ex/JTableExamples1.html
007469
2006/11/04(土) 23:30:21JTableにはもともとないんですね…
サンプル大変参考になりました。
ありがとうございました。
0075デフォルトの名無しさん
2006/11/05(日) 22:21:180076デフォルトの名無しさん
2006/11/06(月) 00:33:11システムフックの方法が知りたいけどSwingの話題じゃないので黙っておく
0077デフォルトの名無しさん
2006/11/06(月) 00:44:13フォーカストラバーサルサイクルルートについて詳しく
0078デフォルトの名無しさん
2006/11/06(月) 09:04:51初耳だ。ちらっと見た感じだと、
TABを押した時なんかの、
次にフォーカスを与えるコンポーネントを探すクラスかな?
今まで使う場面が出たことがないけど、
FocusTraversalPolicyを継承してクラスを作れば、
コンポーネントの値とかでも順序を付けられたりするみたい。
質問が具体的なら、もう少し調べてもいいが。
0079デフォルトの名無しさん
2006/11/06(月) 13:27:230080デフォルトの名無しさん
2006/11/06(月) 19:38:24具体的じゃないけど便乗で
5.0 -> 6.0 でフォーカス関係で変わった事ってまとめてるとこないかな?
5じゃ動いてたコードが6で動かなくなっちゃったから・・・
0081デフォルトの名無しさん
2006/11/06(月) 19:54:29なるほど。
>>80
ごめんなさい、わかりません。
思ったとおりにリスナーが呼ばれないとか、そんな感じですか?
0082デフォルトの名無しさん
2006/11/06(月) 22:00:45まじか
そのへんまではまだ詳しく調べてないけど困るな
正式版が出たらチェックしようという状態だったがSwingに大幅に手が入ってるのなら別だ
Sunなにやってるんだよ〜
1秒でわかるSwingのバグつきを夏にリリースしてたし
まぁ5.0でJavaSoundの挙動が大幅に変更されたりとか
日本語印刷が通らないあたりでおかしい気はしたが
0083デフォルトの名無しさん
2006/11/06(月) 22:14:34今日たまたまJavaで印刷のサンプル動かしたら、
DocFlavor.INPUT_STREAM.AUTOSENSE を使わないと、テキストが印刷できなかった。
しかも日本語文字化けしてるし。これは当たり前?5.0から?
TEXT_PLAIN_HOSTとかいろいろ試したけど、こっちはエラーが出た。
あと、印刷が終わっても、紙が排出されないんだけど、最後に何かする必要あります?
今は、DocPrintJob#print(○,○); で終わってます。
なんか印刷大変そうだなぁ。。。
0084デフォルトの名無しさん
2006/11/06(月) 22:37:08それはどのVMで動かした話?
0085デフォルトの名無しさん
2006/11/06(月) 22:50:175.0での出来事でした。下の記事を参考にしました。
ttps://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/jps/spec/jpsOverview.fm4.html#998638
0086デフォルトの名無しさん
2006/11/06(月) 23:20:31JLabel→JLabelのようにJLabelからJLabelへ矢印を表示するには
どうすればよいのでしょうか?
0087デフォルトの名無しさん
2006/11/06(月) 23:26:22質問の意味がわかりませんが。。。
とりあえず「→」を書きたいなら、
真ん中に「→」を書いたJLabelを置いてみれば?矢印の画像でもいいけど。
もし矢印が長かったり、角度が中途半端なのであれば、drawLineで自分で書く。
0088デフォルトの名無しさん
2006/11/06(月) 23:41:13updateナンボかが問題
008986
2006/11/06(月) 23:44:14配置してあるJLabelどうしを矢印で結んだ図を表示させたかったのですが
そういった場合は自分で書くしかないんでしょうか?
JLabelの位置を計算して、矢印を表示することはできないんでしょうか?
よろしくおねがいします。
0090デフォルトの名無しさん
2006/11/07(火) 00:13:12印刷APIはサービスが追加されたけど、今までのも動くよ
ただし、日本語問題が解決されたのは今年の春くらいのバージョンから
1.5年ほど日本語バグは放置されていた
そしてそのバグが直ったと思ったらSwingにバグがついたというわけだ
正確にはWindows版のLAFだけだからすべてではないがWindowsって一番ユーザー多いから影響もでかい、と
NetBeans立ち上げればおかしいのはすぐにわかるはずなのにそれに気がつかなかったSunちね
0091デフォルトの名無しさん
2006/11/07(火) 01:12:43なんだかんだとコンポーネントが追加されてるJPanel上の特定のJLabel間に線引きたいって事?
それならJLabelをaddするときに線を引きたいJLabelだけのコレクションを別に持っておいて自分で矢印を描画しないとだめだね。
常に次ぎが右横とか規則があるならJLabel継承した横に矢印付け足す描画をするJLabelWithArrowとかでもいいのだろうけど。
0092デフォルトの名無しさん
2006/11/07(火) 02:24:57噂では、JLabelなんか使わないで、全部自分で描いた方がラクだって話もあるよ。
0093デフォルトの名無しさん
2006/11/07(火) 04:40:580094デフォルトの名無しさん
2006/11/07(火) 07:48:31グラフ書きたいなら、JGraphとかSWTのdraw2dとか使った方が楽だよ。
ttp://www.jgraph.com/
ttp://www13.plala.or.jp/observe/#draw2d
グラフって言っても、XYグラフのグラフじゃなくてグラフ理論のグラフだからね。
0095デフォルトの名無しさん
2006/11/07(火) 09:35:29JGraphなんてものがあるのか。知らなかった。
LGPLの他に商用ライセンスがあえてあるってことは、商用で使う場合はお金かかる?
無知なので質問ですが、SwingとSWTって混ぜて使ったりするの?
水と油だと思っているのですが。。。
0096デフォルトの名無しさん
2006/11/07(火) 12:30:07JGraphは商用利用も含めてフリー。LGPLだし。
一方JGraph Layout Pro というのがあって、JGraphの高機能版。こっちは有料。
JGraphだとノードの自動レイアウトが出来なかったりと、いろいろ不便。
他にもこういうのもあるけどね。
ttp://openjgraph.sourceforge.net/
こっちならレイアウトできたり、グラフに制約(巡回不可とか)かけられたりできる。
ただ、開発が4年以上止まっているけど。
0097デフォルトの名無しさん
2006/11/07(火) 12:35:17009886
2006/11/07(火) 15:37:54規則性はないので、その際は手作業なんですね…
ありがとうございました。
>>92さん
それは
ttp://homepage1.nifty.com/algafield/JavaGUIFaq19j.html
このページにあるQ8.6にも、書いてある通り描く方がいいてことでしょうか?
>>93さん
SWTではあるのですか…
>>94さん
JGraphというのがあるのですね!これについて調べてみようと思います。
表示したいのはちょうど、グラフ理論を使ったものなのでぴったりだと思います。
皆さんありがとうございました。
Java2DかJava3Dで描画しなきゃいけないかもって思ってました。それ以外の方法もあるのですね。
009996
2006/11/07(火) 16:09:10後でハマるよ。
ここでいうレイアウト機能ってのは、適当にノード並べてエッジ引いた後で、
ボタン1クリックでノードやエッジの位置を設定し直してくれる機能。
俺の場合、SWTのdraw2dで提供されてるレイアウト機能だけ使って
強引に何とかしたけど。
0100デフォルトの名無しさん
2006/11/07(火) 16:52:14ttp://jung.sourceforge.net/index.html
ttp://www.nanoworks.nl/
デモとかサンプル見て好きなの使ってくれ.
010196
2006/11/07(火) 17:12:49いつの間にか、JUNGが使えるライブラリになってるね。
2年前にこの手のライブラリについて調べてたんだけど、
当時のJUNGはグラフの編集機能がなくて、使うのをあきらめた覚えがある。
0102デフォルトの名無しさん
2006/11/07(火) 17:29:394年前に全部自前でやった事がある。
あの頃と比べたらオープンソースなライブラリがよりどり緑でありがたい。
010386
2006/11/07(火) 18:31:17ご忠告ありがとうございます。
0104デフォルトの名無しさん
2006/11/07(火) 23:24:14別にSwingでもNetbeansには普通にそういうモデリング描画用
ライブラリはあるわけだが。Graph Libraryというのがね。
0105デフォルトの名無しさん
2006/11/08(水) 00:36:43NetBeansプラットフォームで作っちゃえばいいんだけど。
0106デフォルトの名無しさん
2006/11/08(水) 00:37:440107デフォルトの名無しさん
2006/11/08(水) 01:17:29GUIのひとつの画面は、どうしても密結合になる。
0108デフォルトの名無しさん
2006/11/10(金) 01:04:36パスを取得するにはどうしたらよいでしょうか?
0109デフォルトの名無しさん
2006/11/10(金) 01:32:48クラスパスルートがたくさんある場合はどう解釈するの?
0110デフォルトの名無しさん
2006/11/10(金) 01:42:27実行時のディレクトリを知りたいのかな?
String path;
path = new File(".").getAbsolutePath();
とか。
0111デフォルトの名無しさん
2006/11/10(金) 01:58:03それなら、System.getProperty("user.dir")の方がよくね?
0112デフォルトの名無しさん
2006/11/10(金) 21:50:28フォルダごと移動させれば他のPCに環境をそのまま移せるように。
設定ファイル以外にもいろいろ置きたいからjarのパスが知りたい。
0113108
2006/11/10(金) 23:31:12jarファイルを実行したときに、jarファイルと同じディレクトリにあるファイルで
拡張子が.zzzのもので、最終更新日が最新のものを自動的に読み込むという処理が
必要で、上記のような質問をさせて頂きました。
解決致しましたので、ご報告致します。
File f = new File(".") ;
String[ ] files = f.list( ) ;
これで実行ディレクトリのファイル一覧を配列に取得することができました。
ありがとうございました。
0114デフォルトの名無しさん
2006/11/10(金) 23:40:310115デフォルトの名無しさん
2006/11/10(金) 23:42:230116デフォルトの名無しさん
2006/11/10(金) 23:48:06俺なら保険的に<md5>.md5みたいなファイル用意して
確実に実行元がカレントディレクトリである必要があるようにするかも
0117デフォルトの名無しさん
2006/11/11(土) 04:15:14亀レスだけど、System.getProperty("java.class.path")
sunのVM限定だと思う。
他の方法としてはJARファイル内にリソースを格納して、
this.getClass().getClassLoader()#getResourceでURLを取得するとか。
0118デフォルトの名無しさん
2006/11/11(土) 09:24:40java.lang.System#getProperties()のjavadocに明記されてるし、
J2SE5.0の仕様の上ではVMによらず使用可能とみていいんじゃないかな。
0119デフォルトの名無しさん
2006/11/11(土) 16:24:32そこに設定ファイルを置いてファイルを取得
0120デフォルトの名無しさん
2006/11/11(土) 17:20:18jarと同じディレクトリに作りたいでしょ?
でも、いちいちクラスパス通したくない。ではjarのパスはどこ?
というお話し。
0121デフォルトの名無しさん
2006/11/11(土) 17:31:55関連するライブラリなどへのクラスパスは jar ファイルのマニュフェストに記述されると勝手に推測。
そこに resources への相対パスも追加すればいいんじゃまいかと思ったが
そもそも読み込むファイル名は決まっていないのね。
0122デフォルトの名無しさん
2006/11/11(土) 18:22:591.CLASSPATHから読み込む方法。
一番安易だが、配置に柔軟性が乏しい。
2.環境変数XXXX_HOMEを設定させる方法
起動スクリプトや実行ファイル内で設定取得されることが多い。
Java 5から環境変数の取得が復活しているので、Java内で取得可能になった。
CLASSPATHによらず、自由に構成管理できる。(XXX/conf/配下等)
広く使われており、JAVA_HOME. ANT_HOMEなど実例多数。
3.ユーザのホームディレクトリからの相対パスを利用する方法
複数のユーザで使うソフトウェアに適する。
Windowsの場合、ApplicationData/XXX配下、Unixの場合.xxx/配下などが使われる。プログラマが構成をデザインしないといけない。
4.Preferences APIを使う方法
Java 5から提供される標準API。
実体は、Winはレジストリ、Unixは.java配下に作られるが、API利用者は意識する必要がない。
0123122
2006/11/11(土) 18:42:235.カレントディレクトリと1.の併用
log4jなどいくつかのソフトウェアで採用されている。
ツール系は、テンポラリに設定を変えたい時があるので、
この方法は便利。
結局、作成するアプリの性質によってどうデザインするか変わってくるよ。
0124デフォルトの名無しさん
2006/11/11(土) 18:44:200125デフォルトの名無しさん
2006/11/11(土) 18:50:01誰だよ、スレ違いの質問投げた奴は。
0126デフォルトの名無しさん
2006/11/11(土) 18:53:040127デフォルトの名無しさん
2006/11/11(土) 19:03:570128デフォルトの名無しさん
2006/11/11(土) 19:15:220129デフォルトの名無しさん
2006/11/12(日) 13:58:33これがふつー?だったらjavaやめる。
2000で1_4_2です。
ただフレームを表示するだけでも同じ症状がでるのですが。
0130デフォルトの名無しさん
2006/11/12(日) 14:03:060131デフォルトの名無しさん
2006/11/12(日) 14:11:35やっぱりそうなのか。
thx
PCが悪いのかな?
0132デフォルトの名無しさん
2006/11/12(日) 14:31:170133デフォルトの名無しさん
2006/11/12(日) 14:38:420134デフォルトの名無しさん
2006/11/12(日) 15:05:15import javax.swing.*;
import java.io.*;
import java.awt.Container;
import java.awt.*;
class TinyMemo {
JFrame frame;Container com;
TinyMemo(){
framereset();com = frame.getContentPane();
Paneles paneles = new Paneles();com.add(paneles.getBar(),BorderLayout.NORTH);
JTextArea text = new JTextArea();com.add(text,BorderLayout.CENTER);frame.setVisible(true);
}
private void framereset(){
frame = new JFrame("メモ帳");frame.setSize(300,400);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args){TinyMemo tiny = new TinyMemo();}
}
class Paneles extends JPanel {
JMenu menu;JMenuBar menubar;
JMenuItem save;JMenuItem read;JMenuItem delete;
Paneles(){
menu = new JMenu("nya");menubar = new JMenuBar();
delete = new JMenuItem("delete");save = new JMenuItem("save");read = new JMenuItem("read");menubar.add(menu);
menu.add(delete);menu.add(save);menu.add(read);
}
JMenuBar getBar(){return menubar;}
}
こんなもんソースいらんだろ思ってさらさんかったんだが
色々変わってたりついてるけ症状はそんままだからこれで
改行が多すぎる言われまくったからかえたらすげーよみにくい。
0135デフォルトの名無しさん
2006/11/12(日) 16:24:14まだ初心者か?
Swingにはメニューバー用の専用メソッドがあるよ
他にもクラス設計など指摘したいところがたくさんあるがまあいいか
0136デフォルトの名無しさん
2006/11/12(日) 22:03:15最低限、改行して見やすいコードをさらせ。
0137デフォルトの名無しさん
2006/11/12(日) 23:04:37frame.setJMenuBar()
ttp://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/javax/swing/JFrame.html#setJMenuBar(javax.swing.JMenuBar)
0138デフォルトの名無しさん
2006/11/13(月) 11:11:58わ、サンクス!
わざわざありがとうございます。
>>136
改行多すぎる言われて修正しまくってこんなんなってしまったんです。orz
最初は普通だったのに。
0139デフォルトの名無しさん
2006/11/14(火) 15:51:022レスに分割するか、
レス消費に気を配っているorかなり長いソースの場合はアップローダを利用。
0140デフォルトの名無しさん
2006/11/15(水) 00:13:45JTableの縦横にヘッダがあってExcelみたいな感じのやつ。
0141デフォルトの名無しさん
2006/11/15(水) 11:37:56JSplitPane#setDividerLocation(9999)とか無理矢理やればできるのですが、
一応できるのですが、キレイな方法で。
JSplitPane#getMaximumDividerLocation()で値を取得して、
それを設定する方法も試しましたが、
フレームが起動するまでは正しい値が取得できないんですかね。ダメでした。
0142デフォルトの名無しさん
2006/11/15(水) 13:29:10JSplitPane#setDividerLocation(Integer.MAX_VALUE) とかやっとけば
0143デフォルトの名無しさん
2006/11/15(水) 14:00:41pack()読んだ時点で確定されない?
0144141
2006/11/15(水) 15:48:349999よりかはキレイですね。こっちにしておきます。どうもです。
>>143
pack()は使ってないので、フレームを表示するので確定しないようです。
0145デフォルトの名無しさん
2006/11/15(水) 17:23:540146デフォルトの名無しさん
2006/11/15(水) 17:50:42setPrefferedSize()とかJFrame#setSize()とかしないと、親コンポーネントが最小サイズになったり。
0147デフォルトの名無しさん
2006/11/15(水) 17:57:320148デフォルトの名無しさん
2006/11/15(水) 19:39:120149デフォルトの名無しさん
2006/11/15(水) 19:55:30java.awt.Point p = java.awt.MouseInfo.getPointerInfo().getLocation() ;
とか?1.5以降で.
0150デフォルトの名無しさん
2006/11/15(水) 19:59:26助かったー!
■ このスレッドは過去ログ倉庫に格納されています