Java低速GUI Swing 3
レス数が900を超えています。1000を超えると表示できなくなるよ。
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
0809デフォルトの名無しさん
2006/01/26(木) 11:17:21今、JEditPaneやJTextArea辺りを使ってエディタを作成しています。
要件としては「カーソル位置の行に下線を表示する」というものです。
文字列の一部に下線を引くのではなく、
カーソルが存在する行全体に引きたいのですが、
何かよい方法が用意されていますでしょうか?
0810デフォルトの名無しさん
2006/01/26(木) 12:04:14うほっ、そんなクラス知らんぞ、と思ったら、メソッドだったのか。
勉強になるなこのスレは
0811デフォルトの名無しさん
2006/01/26(木) 12:22:14メソッドじゃないよ
0812デフォルトの名無しさん
2006/01/26(木) 12:48:01>>806じゃなくて
>>808だった。orz
え、メソッドしか見つからんけど。
あとで暇になったらまた調べるわ。
0813デフォルトの名無しさん
2006/01/26(木) 19:15:44改行多いといわれたので
ttp://terai.xrea.jp/swing/linecursor/sample.jnlp
class LineCursorTextArea extends JTextArea {
public LineCursorTextArea() {super();
Caret caret = new DefaultCaret() {
protected synchronized void damage(Rectangle r) {
if(r!=null) {JTextComponent c = getComponent();
x = 0;y = r.y;width = c.getSize().width;
height = r.height;repaint();}}};
caret.setBlinkRate(getCaret().getBlinkRate());setCaret(caret);
}protected void paintComponent(Graphics g) {
super.paintComponent(g);Graphics2D g2 = (Graphics2D)g;
Insets i = getInsets();
int y = getRowHeight()*getLineAtCaret(this)+i.top;
g2.setPaint(SystemColor.activeCaption);
g2.drawLine(i.left, y-1, getSize().width-i.left-i.right, y-1);
}public static int getLineAtCaret(JTextComponent component) {
int caretPosition = component.getCaretPosition();
Element root = component.getDocument().getDefaultRootElement();
return root.getElementIndex(caretPosition)+1;
}}
0814デフォルトの名無しさん
2006/01/26(木) 19:57:12ブラクラ
0815デフォルトの名無しさん
2006/01/27(金) 01:28:46setEditable(true) すると全部編集できてしまう。編集不可なノードの時は
キャンセルするようにしたいんだけどどうすれば良い?
0816デフォルトの名無しさん
2006/01/27(金) 01:35:130817デフォルトの名無しさん
2006/01/27(金) 02:07:11このやり方であってるのかな?
public boolean isCellEditable(EventObject event) {
TreePath path = tree.getSelectionPath();
if(path != null){
Object node = path.getLastPathComponent();
if(ラベル編集不可){
return false;
}
}
return super.isCellEditable(event);
}
0818809
2006/01/27(金) 10:26:43ありがとうございます、文句の付けようのない完璧な仕上がりになりました。
一点蛇足とは思いますが、最終的にJEditPaneを使用することにしたため、
getRowHeight()メソッドが存在しなかったのですが、
g2.getFontMetrics().getHeight()を用いて動作させてみました。
重ね重ね本当にありがとうございました。
0819デフォルトの名無しさん
2006/01/27(金) 12:00:34ちょっとお聞きしたいことが・・・
マウスの画像を、自分で作った画像に変更したいのですが、どうすればできますか?
分かる方教えてください><
0820デフォルトの名無しさん
2006/01/27(金) 12:11:12Toolkitクラスを見てごらん
0821デフォルトの名無しさん
2006/01/28(土) 02:36:390822デフォルトの名無しさん
2006/01/28(土) 17:44:56できる
JInternalFrame frame = new JInternalFrame();
((BasicInternalFrameUI)frame.getUI()).setNorthPane(null);
frame.setBorder(BorderFactory.createEmptyBorder());
frame.setSize(200,200);
frame.setVisible(true);
frame.setLocation(10,10);
frame.add(new JLabel("メモ"));
desktop.add(frame);
0823デフォルトの名無しさん
2006/01/28(土) 22:05:57JTable を返す TreeCelRenderer を作ってみたら一応表示はされるみたいだけど
行とか触れないな。
0824デフォルトの名無しさん
2006/01/28(土) 23:00:250825デフォルトの名無しさん
2006/01/28(土) 23:33:070826デフォルトの名無しさん
2006/01/29(日) 01:35:33ttp://java.sun.com/products/jfc/tsc/articles/treetable1/
0827デフォルトの名無しさん
2006/01/29(日) 20:52:19幸せになってみようかと組み込んでみましたがちょっと挙動不審でした。
0828806
2006/01/30(月) 02:36:22ああすっきりした。これでVector使うやつが一人減ったよ。
0829デフォルトの名無しさん
2006/01/30(月) 02:52:070830デフォルトの名無しさん
2006/01/31(火) 00:12:58JTable にも TableModel にもそれっぽいメソッドが無いんだけど。
0831デフォルトの名無しさん
2006/01/31(火) 00:15:590832806
2006/01/31(火) 00:37:440833デフォルトの名無しさん
2006/01/31(火) 00:51:48止めたほうがよさげ。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/javax/swing/JTable.html#valueChanged(javax.swing.event.ListSelectionEvent)
> アプリケーションコードはこれらのメソッドを明示的には使用しません。
> これらのメソッドは JTable が内部的に使用します。
0834832
2006/01/31(火) 01:09:35ちゃんと先頭の行でsuper.valueChanged()呼んでやれば大丈夫だと思われ。
自分もこのメソッドよく利用してるけど、今のところ何の支障もないよ。
0835デフォルトの名無しさん
2006/01/31(火) 01:26:45継承して使いたい場合はそれでいいとおもうけどね
単純にテーブルを配置、その選択イベント取得したいという目的ならしないほうがいい
0836デフォルトの名無しさん
2006/01/31(火) 01:54:39テーブルそのもののサブクラス化はあまりやんないなぁ。
0837デフォルトの名無しさん
2006/01/31(火) 01:59:10モデルもテーブルに限らずDefaultなんちゃらモデルで大概事足りるしねぇ
0838デフォルトの名無しさん
2006/01/31(火) 10:56:07仕様書がダメだといってるんだからダメだろ。
Javaの将来のバージョンとかで動かなくなる危険性がある。
0839832
2006/01/31(火) 14:56:05この前VectorをArrayListに置き換えたばっかりなのによw
>>838
仕様書ってJava Docのことですか?だとしたらダメだとは書いてないと思うけど。日本語のサイトの
> アプリケーションコードはこれらのメソッドを明示的には使用しません。
> これらのメソッドは JTable が内部的に使用します。
というとんちんかんな和訳じゃニュアンスが伝わってこないけど、もとは
>Application code will not use these methods explicitly, they are used internally by JTable.
となっているのだ。"should not"でも"cannot"でも"must not"でもなく、"will not"なので、
「使うことは無いだろう。」と訳すべきだと思うよ。それに将来的に使えなく
なるなら非推奨になっているはずでしょ。まあ俺は気にせず使うよ。何か問題が発生したら、
そのとき対処するわ。10年経っても問題なく使えてたら、おまいらに胸を張って報告するよ。
普段ギャンブルをしない俺だが、たまにはやってみるわ。
0840デフォルトの名無しさん
2006/01/31(火) 15:21:49JTableが自分でインプリメントしてるイベントは
自分で使うからその動作を妨げてはならない
だからsuper使ってる
というだけの話だろ?
JTableを拡張して作りたいのならJTableの動作について詳しいわけだし問題なし
アプリでJTableを使いたいだけならJTableに実装されているイベントを使わないほうがエレガント
だろ?
0841デフォルトの名無しさん
2006/01/31(火) 15:45:280842デフォルトの名無しさん
2006/01/31(火) 15:48:06俺は>>838と同じで仕様原理主義者なので使わない方を推奨するけど
どっちかっつーと、>>839はAPI Specの原文読んでも好ましくない事が一目瞭然なのに固執してる事
それも技術的な理由でなく自己満足のために、って部分のがヤバいよーな気がするね
0843デフォルトの名無しさん
2006/01/31(火) 16:00:43するなりせいよと思うが、先の Vector じゃないけど過去のしがらみで
いまさらできないんだろうね。
0844デフォルトの名無しさん
2006/01/31(火) 16:28:23インターフェース実装してるやつなのでそれはJava言語として無理だろ
でもそんなSwingもSWTのソースおったりAPI見てると
非常に綺麗に見える不思議
Swingは今後フラグ以外の定数はEnum化するようにしてほしいね
ListやMapインターフェースの追加と
0845デフォルトの名無しさん
2006/02/01(水) 01:10:32ほしいってよくユーザに言われるけど、どう解決すべきでしょうか?
元 |abc|1|あ|
後 |xyz|1|あ|
にしたとき背景色を変えるが、元に戻したとき(xyz -> abc)は
修正されていないので背景色も元に戻さなければいけない。
TableModelに元の値と修正後の値とフラグを設けて、
stopCellEditing()時にチェックしてTableCellRendererでフラグ
を見て背景色表示って感じかな。
0846デフォルトの名無しさん
2006/02/01(水) 01:40:080847!omikuji
2006/02/01(水) 03:22:270848デフォルトの名無しさん
2006/02/01(水) 12:11:24モデルではそのままそのオブジェクトを返して、レンダラでそのフラグを見て色を変える。
変更の有無がそのセル1個or1レコードのクラスに閉じこめられるので楽といえば楽、きれいといえばきれい。
OO的にいけてないと俺が思う理由はビュー側の要件に対してモデル側で対処しようとしてるから。
0849デフォルトの名無しさん
2006/02/01(水) 12:20:33よくDB使ったアプリとかでも変更があったときに閉じようとしたとき
変更が保存されていません、とかダイアログを出すとかそういうのとおなじ
0850デフォルトの名無しさん
2006/02/01(水) 12:20:34>OO的にいけてないと俺が思う理由はビュー側の要件に対してモデル側で対処
それはモデル側で正しいんじゃないかな。
ビュー側の要件は、変更されていたら色を変えるところまでで、
値が変わったかどうかを判断or保持するのは、モデルだと思う。
モデルが色を保持したら、間違っていると思うが、上記は別に「いけてない」とは思わないけど。
0851デフォルトの名無しさん
2006/02/01(水) 19:10:09ロジックで、確定するには、どのようにしたらよいでしょうか?
とあるイベントが発生したときに、未確定な文字列を強制的に確定したいのです。
0852デフォルトの名無しさん
2006/02/01(水) 20:43:11メソッド一個だけあげろってんなら InputContext#endComposition() なんだけど、
これだと削除される場合もあるらしいね。
InputMethodListener 仕掛けておいて、常に未確定文字列保持しておき、
endComposition() で確定したらよし、削除されちゃったら
JTextField に未確定文字列を こっそり挿入するとかすれば。
0853デフォルトの名無しさん
2006/02/01(水) 21:14:42endCompositionだと、確かに取り消される場合があります。。。
後半の方法を、参考に、未確定文字列の保持ではなく、
全文字列を保持して、後からsetTextするという方法はできました。
でも、できれば単純に確定する方法があると一番よいのですが。
0854デフォルトの名無しさん
2006/02/02(木) 02:24:28Robotとか使って無理矢理エンター押させたらどうなるん?
といいながらちょとテキストフィールド出して入力してみたんだけど、フォーカスアウトすると勝手に確定しちゃうのね
@1.5.0_06+ATOK
ちゅか標準的な方法としてはendCompositionしかないんだからそれ以上のことは「Javaの仕様です」でFAでいい希ガス。
仕事でしょ?なら尚更、標準以上の対処をするとサポートしきれない。
眠いので散文スマン。
0855デフォルトの名無しさん
2006/02/02(木) 10:46:55自分でInputMethodの生成、dispatchEventとしたら、確定させることができました。
>>854
わざわざ、試していただいてありがとうございます。
「Javaの仕様です」では、とても納得させられないです。
ユーザは、Javaの標準を押し付けられても、困ると思うので、
そんなことは、仕事だからこそ言えないです。
0856デフォルトの名無しさん
2006/02/02(木) 11:00:24じゃあ、他の世界の標準では、そういうことができると明記されてるの?
だれもが「できる」という共通認識でもあるの?
0857デフォルトの名無しさん
2006/02/02(木) 11:16:57> 自分でInputMethodの生成、dispatchEventとしたら、確定させることができました。
このやり方は推奨しない。
自分で Event 生成して dispatch しても InputMethod の状態を
ちゃんと制御できてないとその Event を受け取ったコンポーネントと、
そんな事知らない InputMethod の間で齟齬が起きる危険性があるし。
確定時に どのイベントがどんな順番で発生するかは仕様で全く規定されてないしね。
0858デフォルトの名無しさん
2006/02/02(木) 13:28:00>このやり方は推奨しない。
そうですか。。。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=27717&forum=12
こんな情報を見つけたので、やっぱりやめときます。
>>854の方法も含めて、あとから挿入するという方法も検討してみます。
0859デフォルトの名無しさん
2006/02/02(木) 15:38:00http://javadesktop.org/articles/InputMethod/index_ja.html
http://java.sun.com/j2se/1.5.0/docs/guide/imf/index.html
たとえばWindowsネイティブの開発だったらどうだろう。
普通に考えるならMS-IMEでバージョンも限定という前提があればWINAPIのImm〜を使ってやってもいい。
#うまくできるとは限らない。
だが、クライアント環境をきびしく限定できないなら仕様と考える方が無難。
Guideのほうにはちゃんと書いてあるようだ。
入力操作の終了
通常、インプットメソッドは、入力操作を終了させるユーザの行為を認識します。たとえ
ば、未確定のすべてのテキストを確定する操作などです。ただし、入力操作の終了が必要
な操作を開始するユーザの行為の中には、インプットメソッドが認識できないものもあり
ます。テキストを含むドキュメントの保存は、インプットメソッドが認識できない行為の
例です。そのような場合、コンポーネントは、入力コンテキストの endComposition メソ
ッドを明示的に呼び出す必要があります。
0860デフォルトの名無しさん
2006/02/04(土) 01:25:30http://pcweb.mycom.co.jp/news/2006/02/03/342.html
出たね。
Matisse GUIビルダって、既存のレイアウトマネジャーは使ってないんだっけ?
0861デフォルトの名無しさん
2006/02/04(土) 04:07:030862デフォルトの名無しさん
2006/02/04(土) 10:53:08UNIX同士は互換無かったと思うし、Linux版をエミュレート?
0863デフォルトの名無しさん
2006/02/04(土) 11:10:16http://www.freebsd.org/java/
他のBSDは知らん。
0864デフォルトの名無しさん
2006/02/04(土) 17:40:40Dolphinって、大分先じゃん・・・。Visual Editorで使えるようになるのは何時になるんだろ。
0865デフォルトの名無しさん
2006/02/04(土) 18:10:220866デフォルトの名無しさん
2006/02/05(日) 12:28:08じゃあ、Dolphinまで待たずとも、Visual Editorが対応してくれる可能性もあるってわけだね。
NetBeansのGUIビルダは魅力だけど、それだけで乗り換えるのもつらいしなぁ・・・。
0867デフォルトの名無しさん
2006/02/05(日) 12:46:240868デフォルトの名無しさん
2006/02/05(日) 12:56:20現状でもVEのSwingサポートレベルは1.3だし、公開されている今後の計画でも
1.4以降のサポートは予定しないと明文化されている。というかSwing系の
機能増強自体ほとんど予定がない。
大体、eclipse.orgのVE projectって基本的にGUI開発環境を作るための
フレームワークを提供するプロジェクト。GUI開発環境を提供する
プロジェクトじゃないのよ。だから下回りのフレームワークのAPIの
開発は進んでもその上のリファレンス実装までは手がまわらないんじゃないかな。
SWT系はIBMがWorkplace構想打ち出してるからいいとしても。
0869868
2006/02/05(日) 12:58:59のほうが正確かも。
0870デフォルトの名無しさん
2006/02/05(日) 15:27:36それは(´・ω・`)ショボーンだなぁ。
確かに、SpringLayoutとかにもまだ対応してないし。
普段はEclipse&GUIだけNetBeans5.0 という使い分けができれば良いんだけど・・・。
0871デフォルトの名無しさん
2006/02/05(日) 15:35:094.2としなかったのは正しい
0872デフォルトの名無しさん
2006/02/05(日) 19:40:58それほど混乱しないと思うけど。
0873デフォルトの名無しさん
2006/02/05(日) 19:53:530874デフォルトの名無しさん
2006/02/05(日) 19:57:410875デフォルトの名無しさん
2006/02/05(日) 20:57:090876デフォルトの名無しさん
2006/02/05(日) 21:36:340877デフォルトの名無しさん
2006/02/05(日) 22:00:230878デフォルトの名無しさん
2006/02/05(日) 23:11:320879デフォルトの名無しさん
2006/02/05(日) 23:38:42位置の調整も絶望的になってくるしな
次点としてJBuilderやOracleJDev(JBuilderベース)かな
0880デフォルトの名無しさん
2006/02/06(月) 00:35:35慣れれば何とかなるが、もどかしい思いをすることもしばしば。
0881デフォルトの名無しさん
2006/02/06(月) 14:07:31NetBeans は試してみたことないんだけど
そんなに素敵なら使ってみたいなぁとは思う。
思うんだが、VE でも特に困らないので
評価の時間を作るほどには至らず。
0882デフォルトの名無しさん
2006/02/06(月) 14:27:46本気モードの日曜プログラムは GridBagLayout で。
0883デフォルトの名無しさん
2006/02/06(月) 14:43:590884デフォルトの名無しさん
2006/02/06(月) 18:21:435.0を試してみることをお勧めする
違いを実感できるよ
0885デフォルトの名無しさん
2006/02/06(月) 20:45:03SplitPaneが神
0886デフォルトの名無しさん
2006/02/06(月) 21:10:260887デフォルトの名無しさん
2006/02/06(月) 21:16:450888デフォルトの名無しさん
2006/02/06(月) 21:17:210889デフォルトの名無しさん
2006/02/06(月) 21:34:310890デフォルトの名無しさん
2006/02/06(月) 21:49:510891デフォルトの名無しさん
2006/02/06(月) 23:18:46Netbeans 5をダウンロードしてためしなよ。
0892デフォルトの名無しさん
2006/02/06(月) 23:40:29レイアウトとしてはグループレイアウト
これはこれで慣れが必要だけどね
コンポーネントが細かく配置してある場所にある程度の大きさのあるJPanelを
追加とか結構難しいな
相対座標を変に記憶していて調整が難しいという場面も多く見られる
0893デフォルトの名無しさん
2006/02/07(火) 01:26:59仕組みを理解して編集画面があることに気が付いたら、GridBagLayoutは使えると思った。
でもグループレイアウトはもっといい。簡単だし、文字のベースラインが揃うのがとてもいい。
0894デフォルトの名無しさん
2006/02/07(火) 01:30:20GroupLayoutでコード手書きは悪夢。
0895デフォルトの名無しさん
2006/02/07(火) 11:53:570896デフォルトの名無しさん
2006/02/07(火) 12:55:42レイアウト自体は GridBagLayout で別に問題ないというか。
速度面以外の有利さってどの辺りです?
あとは Subversion / Maven / etc との連携とか。
画面だけ作って終わりってわけにいかないし。
0897デフォルトの名無しさん
2006/02/07(火) 13:45:20オレ画面だけ作ってeclipseにコピーしてるwwwwwwwwww
0898デフォルトの名無しさん
2006/02/07(火) 13:47:410899デフォルトの名無しさん
2006/02/07(火) 15:47:18昨日から5.0をおとしていろいろいじってますが、
jLabel1のBackgroundのプロパティで色を設定しても変わらないのですが、
そういうものなのでしょうか?jTexfieldとかは設定すると変わるんですが。
0900デフォルトの名無しさん
2006/02/07(火) 15:50:29opaque
0901デフォルトの名無しさん
2006/02/07(火) 15:53:36透過指定いれてるからというのに納得してなかったな
0902デフォルトの名無しさん
2006/02/07(火) 15:55:52おお、できました。ありがとうございます。
プロパティいっぱいあって複雑でちと、ナーバス状態です(TT
0903デフォルトの名無しさん
2006/02/08(水) 12:45:52org.jdesktop.layout.GroupLayout毎Eclipseに持っていくの?
0904デフォルトの名無しさん
2006/02/08(水) 18:33:020905デフォルトの名無しさん
2006/02/08(水) 21:57:191.4で追加されたSpringLayoutはどうよ?
0906デフォルトの名無しさん
2006/02/08(水) 22:17:47できました。
ただソースをフォーマットするととんでもなく見づらくなる。。。
0907デフォルトの名無しさん
2006/02/08(水) 22:25:09そこで TableLayout ですよ。とか言ってみる。
https://tablelayout.dev.java.net/
こっちも面白そう。
http://cappuccino.jp/keisuken/java/tablelayout/docs/specification.html
っつか、他人の作ったものが使い難かったら自作しちゃえば
0908デフォルトの名無しさん
2006/02/08(水) 22:28:09単体でそれなりに使えるのはGroupLayoutくらい
nullやAbsoluteLayoutでもいいけど
あとは組み合わせだけ
組み合わせに慣れてくるとBOXとFlow、Borderの3つだけ使うようになってくる。
NetBeansは階層構造もったコンポーネントのコピーもいいかげんできるようになってくれぇ
レス数が900を超えています。1000を超えると表示できなくなるよ。