Java低速GUI Swing 3
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/07/19(火) 00:35:54パフォーマンスの問題が改善されつつあります。
しかしながら、"Java"というだけで犬猿されつつあるのが現状。
そんなSwingと引き続き付き合っていくみんなのスレッドです。
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
参考スレ
Java 高速GUI SWT 2
http://pc5.2ch.net/test/read.cgi/tech/1068349883/l50
0232デフォルトの名無しさん
2005/08/28(日) 01:04:320233229
2005/08/28(日) 02:06:37this.setBorder(BorderFactory.createMatteBorder(1,0,0,0,Color.gray));
(つや消しボーダーで上辺のみグレー設定)
とやったらよくあるような形になった。
>>231 さん
そう、JSeparator をそのまま 1 項目としてしまうと ItemListener 仕掛けてはじかなきゃ
いけなくなるんですよね。項目の上辺か下辺に線が付けば要件満たせると思って
辺を指定できる MatteBorder 使っちゃいました。
0234デフォルトの名無しさん
2005/08/28(日) 02:09:15それぞれ特徴が・・・というかSwingとAWTのダブルバッファの意味が分からん
SwingはJava2D使って実装されてるし、AWTでダブルバッファまでやってくれたっけ?
0235デフォルトの名無しさん
2005/08/28(日) 02:36:54今書いたの?
>>234
AWT の「自作」ダブルバッファって書いてあるよ。
0236デフォルトの名無しさん
2005/08/28(日) 12:50:160237デフォルトの名無しさん
2005/08/28(日) 12:57:04おまえ確実にバカだろ?
0238デフォルトの名無しさん
2005/08/28(日) 13:24:34AWT以下のパッケージという意味ではないよな
ならAWT上の自作ダブルバッファという意味がつうじん
0239デフォルトの名無しさん
2005/08/28(日) 13:34:162) ダブルバッファ機能をスクラッチから自作するのと、
3) BufferStrategy(これってjava.awt.image下のクラスだよね?)
のどれがいいでしょうか、という質問かな?
どっちにせよ質問者が質問の意味を分かってないようなんだな。
0240デフォルトの名無しさん
2005/08/28(日) 13:46:30用途で決まるもんだけどなぁ
0241デフォルトの名無しさん
2005/08/28(日) 14:41:480242デフォルトの名無しさん
2005/08/28(日) 15:38:18BufferStrategy勉強してからそういうこときいてね
それにトリプルバッファってどういうもんかしってる?
0243デフォルトの名無しさん
2005/08/28(日) 15:51:490244デフォルトの名無しさん
2005/08/28(日) 15:58:270245デフォルトの名無しさん
2005/08/28(日) 16:22:210246デフォルトの名無しさん
2005/08/28(日) 16:32:32ゲーム
0247デフォルトの名無しさん
2005/08/28(日) 16:33:140248デフォルトの名無しさん
2005/08/28(日) 16:35:04CanvasでBufferStrategy使うのとではどっちが有利かってことだろ?
0249デフォルトの名無しさん
2005/08/28(日) 16:41:250250デフォルトの名無しさん
2005/08/28(日) 20:34:130251デフォルトの名無しさん
2005/08/28(日) 20:40:520252デフォルトの名無しさん
2005/08/28(日) 22:19:180253デフォルトの名無しさん
2005/08/28(日) 22:23:07ゲームとかで垂直同期ページフリッピングが必要ならやるけど
0254デフォルトの名無しさん
2005/09/06(火) 01:26:47Javaがんがれ
0255デフォルトの名無しさん
2005/09/06(火) 01:32:38そしてそれ以外は全部ゲーム・携帯アプリとか。
GUI コンポーネントとイベントリスナを HTML で記述できりゃ楽なのに。配置や
色のちょっとした調整するのに Visual Editor 立ち上がるの重すぎ。Longhoneで
やってなかったっけ?
0256デフォルトの名無しさん
2005/09/06(火) 14:23:22あれは微妙に違うかも。
0257デフォルトの名無しさん
2005/09/06(火) 17:27:51レイアウトをXMLでやるのはありますね。
XMLでマークアップできるJava GUIまとめ
tp://d.hatena.ne.jp/sakamoto_yuki/20050612#p1
0258デフォルトの名無しさん
2005/09/06(火) 21:47:28NetBeansつかう
0259デフォルトの名無しさん
2005/09/06(火) 23:45:320260デフォルトの名無しさん
2005/09/07(水) 00:22:30そうなるならOSX版も出して欲しいんだが。
0261デフォルトの名無しさん
2005/09/07(水) 00:35:350262デフォルトの名無しさん
2005/09/07(水) 00:42:45JSPしか分からない人?
0263デフォルトの名無しさん
2005/09/07(水) 00:48:280264デフォルトの名無しさん
2005/09/07(水) 01:07:03確かにHTMLってのは舌ったらずだと思うけど
マークアップでGUIを定義できないもんかって
話だってのは読んで判ったよ。
0265デフォルトの名無しさん
2005/09/07(水) 02:35:340266デフォルトの名無しさん
2005/09/07(水) 03:51:53まぁ MFC すら触ったことない人間なら思いつかんかもしれんが。
0267デフォルトの名無しさん
2005/09/07(水) 03:56:1110 レスくらい前から読めば言わんとしてることくらい分かるだろ。
IE レベルのユーザインターフェースを HTML で定義できたら Web 系の
スキルの人間をクライアント GUI 開発に回せて便利だろうね。
0268デフォルトの名無しさん
2005/09/07(水) 04:10:560269デフォルトの名無しさん
2005/09/07(水) 04:23:12マークアップ言語の GUI はコンポーネントのレイアウトをリソースとして
切り離せるというのもあるな。GUI ビルダーが吐き出した汚いソースに
恐る恐る手を入れるよりよっぽどスマートでしょ。
0270デフォルトの名無しさん
2005/09/07(水) 07:29:420271デフォルトの名無しさん
2005/09/07(水) 07:30:07IEレベルのしょぼいGUIでいったい何をしようって言うのよ?
0272デフォルトの名無しさん
2005/09/07(水) 07:33:160273デフォルトの名無しさん
2005/09/07(水) 08:22:35Swing自体が使われないからか。
NetBeansのフォーム情報XMLが編集しやすければいいんだけどね。
0274デフォルトの名無しさん
2005/09/07(水) 10:19:32257に書いてある所に、SWTのもあるんだけどね。
あまり情報ないね。
やっぱりリッチなGUIはどうせならポトペタでって
刷りこまれちゃってんのかな。
まあ俺もそんな感じだけど。
0275デフォルトの名無しさん
2005/09/07(水) 10:27:56リッチな開発環境が使えるのであれば、XMLでGUIをデザインするメリットが
少なく見えてしまうのも頷ける。
0276デフォルトの名無しさん
2005/09/07(水) 10:48:190277デフォルトの名無しさん
2005/09/07(水) 20:47:060278デフォルトの名無しさん
2005/09/07(水) 23:41:130279デフォルトの名無しさん
2005/09/07(水) 23:48:32それにそういうことは死滅スレいけ
0280デフォルトの名無しさん
2005/09/08(木) 01:05:44>だからコンポーネントの配置だっつってんのに。
???
「IE レベルのユーザインターフェース」を HTML で定義できたら...(>>267)
0281デフォルトの名無しさん
2005/09/08(木) 01:07:440282デフォルトの名無しさん
2005/09/08(木) 02:04:060283デフォルトの名無しさん
2005/09/08(木) 02:19:570284デフォルトの名無しさん
2005/09/08(木) 02:26:580285デフォルトの名無しさん
2005/09/08(木) 02:58:20誰かそろそろGecko並みのHTMLコンポーネント作ってくれないもんか。
0286デフォルトの名無しさん
2005/09/08(木) 12:20:24AWTもSwingもSWTもIDEには縛られなくても好きなエディタで書ける。
HTMLも複雑なレイアウトだと直接書くのは大変。
つまりHTMLもGUIライブラリも同じ。
0287デフォルトの名無しさん
2005/09/08(木) 12:34:160288デフォルトの名無しさん
2005/09/08(木) 12:58:03ぽとぺたは無理だな
0289デフォルトの名無しさん
2005/09/08(木) 13:13:37開発環境にって意味なんだが。個人の嗜好が特定の IDE にって意味じゃなくて。
0290デフォルトの名無しさん
2005/09/08(木) 13:29:560291デフォルトの名無しさん
2005/09/08(木) 13:33:100292デフォルトの名無しさん
2005/09/08(木) 13:38:06画面数とコンポーネントの数が大量なのに根性あるなと思った
まぁその後は予想通りの結果だったが
0293デフォルトの名無しさん
2005/09/08(木) 13:44:25一回手書きなり IDE なりで GUI 作ってしまうとずっと引っ張られるからなぁ。
移行しようにも分析のために何年前か分からん IDE が吐き出した汚いソース読む
羽目になったり。
0294デフォルトの名無しさん
2005/09/08(木) 15:10:110295デフォルトの名無しさん
2005/09/08(木) 15:13:13つまり、自分の思い通りにならないから駄々をこねてるだけということか
0296デフォルトの名無しさん
2005/09/08(木) 15:28:440297デフォルトの名無しさん
2005/09/08(木) 15:34:44ここは個人の勝手な不満をぶちまけるスレではありませんし、
到底実現しそうにもない無意味なアイデアを開陳するスレでもありません。
0298デフォルトの名無しさん
2005/09/08(木) 15:45:190299デフォルトの名無しさん
2005/09/08(木) 16:25:000300デフォルトの名無しさん
2005/09/08(木) 22:25:150301デフォルトの名無しさん
2005/09/08(木) 22:29:35重要だと思うなら思考停止とか言わずにそのアイデアとやらを基に自分で作ってみろって、
本当に必要なものならみんな使ってくれるさ。
今のままじゃ本当にただの絵に書いた餅に過ぎない。
0302デフォルトの名無しさん
2005/09/08(木) 22:52:000303デフォルトの名無しさん
2005/09/08(木) 22:53:160304デフォルトの名無しさん
2005/09/08(木) 23:38:59なんだ、ネタだったのか。相手して損した。
0305デフォルトの名無しさん
2005/09/08(木) 23:46:320306デフォルトの名無しさん
2005/09/08(木) 23:52:360307デフォルトの名無しさん
2005/09/08(木) 23:53:550308デフォルトの名無しさん
2005/09/08(木) 23:55:280309デフォルトの名無しさん
2005/09/09(金) 00:53:540310デフォルトの名無しさん
2005/09/09(金) 01:32:26せめてベンケーシーネタとかにしてくれ。
0311デフォルトの名無しさん
2005/09/09(金) 02:25:080312デフォルトの名無しさん
2005/09/09(金) 03:37:060313デフォルトの名無しさん
2005/09/09(金) 08:16:47https://swixml.dev.java.net/
0314デフォルトの名無しさん
2005/09/09(金) 10:36:34やっぱり、中身が変更される毎に各行の開始点を計算して、それから計算しないとだめなんだろうか?
SwingでNetBeansやEclipse並みのエディタを作成しようとしているのだが、
2000行ぐらいになると重くて使い物にならなくなるorz
0315デフォルトの名無しさん
2005/09/09(金) 14:17:28どのぐらいのスペックのPCで重いの?
0317デフォルトの名無しさん
2005/09/09(金) 14:58:34任意の位置の行番号を保持する StyledDocument を自分で作る。
ま、行ごとの文字数をリストで持ってて、入力イベント拾って画面と同期してれば
良いかと。
0318デフォルトの名無しさん
2005/09/09(金) 15:05:21Caret#getDotとElement#getElementIndexを毎回呼んだとしても
そんなに遅くならないんじゃないかなぁ
と試しもせずに言ってみる。
0319デフォルトの名無しさん
2005/09/09(金) 16:23:06完全に自作してみたほうが軽いかもよ
あと1.7GHzといってもCeleronの1.7GHz+SDRAMと
PentiumMの1.7GHz+DDR2デュアルチャネルでは
性能が2倍は違うから注意な
netburst系はJavaの動作速度が遅いし
0320デフォルトの名無しさん
2005/09/09(金) 17:59:440321デフォルトの名無しさん
2005/09/09(金) 20:04:25いや、あの、その、そういう問題じゃないだろう?
0322デフォルトの名無しさん
2005/09/09(金) 20:21:49カーソルより上で挿入・削除が行われたときに
増減した\nの数を数えるのが最速だと思う。
swingで速くできないレベルのプログラマなら、
自作しても遅いままだと思われ。
0323デフォルトの名無しさん
2005/09/10(土) 00:21:16非表示にできないかな?
0324デフォルトの名無しさん
2005/09/10(土) 07:36:23JInternalFrame だったらコントロールできるけど、
JFrame, JDialog とか Frame, Dialog だと無理っぽい。
どーしてもって言うなら JNI 経由で HWND 取ってきて
RemoveMenu(hwnd, SC_CLOSE, MF_BYCOMMAND);
とかするしかないと思われ。
0325314
2005/09/12(月) 09:44:49>>317
>ま、行ごとの文字数をリストで持ってて、入力イベント拾って画面と同期してれば
>良いかと。
それをやってると2000行を超えたあたりから重くなるんですorz
>>318
各行の開始点っていうのは、
例えば全文の文頭から5行目の文頭へのオフセットは41とかいった感じです。
>>319
Celeronの1.7GHz+SDRAMですorz
>>322
特定の文字列を太字にする等のスタイル関連の処理の為に、
全行の文頭の位置を記憶する必要があったので、
増減した\nの数を数えるだけじゃ駄目なのですorz
0326デフォルトの名無しさん
2005/09/12(月) 10:52:232000行程度ArryListでもLinkedListでもVectorでも遅くならないぞ
たぶん原因はそこじゃないな
0327314
2005/09/12(月) 15:12:47仰るとおりでしたorz
無理して取得しない場合で何とかなる方法を試みてみたが、殆ど早くならなりませんでした。
そこで、どの部分の処理で時間を喰っているか調べてみたところ、
原因は改行コードが\r\nの場合に\nに直す処理だったみたいです。
Windows系のOSだと、getText()で文字列を取得した際、改行コードの扱いが1文字から2文字に変更され、
テキスト関連の処理で不都合が生じるため、このような処理を行っています。
String str = getText();
StringBuffer strBuff = new StringBuffer(1000);
for(int i=0;i<str.length();i++){
if(str.charAt(i) == '\r'){
if(str.charAt(i+1) == '\n'){
i++;
}
}
strBuff.append(str.charAt(i));
}
String text = strBuff.toString().substring(begin, end);
これ以上、直しようがないorz
0328デフォルトの名無しさん
2005/09/12(月) 15:17:15DocumentEvent 拾って挿入文字に '\r' が含まれてたらその位置を削除ってので
良いんじゃなかろうか。量がでかいなら一括でするには効率悪すぎ。
つか、"\r\n", "\r" で不具合の起きるテキスト処理というのを見直すべきでは。
0329314
2005/09/12(月) 16:13:38それが、
abc
de
f
と、いう文字列は
JTextPane内で「abc\nde\nf」
と、認識されているのですが、
getText()で取り出すとWindows系では「abc\r\nde\r\nf」
っていう感じに改行コードが変換されるみたいなのです。
その為、JTextPane内では、'e'は6文字目になるのに対し、
getText()で取得したString内では、'e'は7文字目になってしまうのです。
0330デフォルトの名無しさん
2005/09/12(月) 16:26:16じゃ逆に JTextPane 内で "\n" を System.getProperty("line.separator") 文字として
カウントしてみるとか。
確かに DefaultEditorKit#write() で System.getProperty("line.separator") 取ってるのな…
マルチスレッドで何か動いてたら支障あるかもしれんが
String crlf = System.getProperty("line.separator");
System.setProperty("line.separator", "\n");
String text = getText();
System.setProperty("line.separator", crlf);
0331デフォルトの名無しさん
2005/09/12(月) 16:48:51String::replaceはダメなの?
■ このスレッドは過去ログ倉庫に格納されています