- 1 名前:デフォルトの名無しさん mailto:sage [2006/10/18(水) 11:50:09 ]
- ハードウェアの高スペック化、JavaVMのホットスポットの高速化に伴い、
パフォーマンスの問題は徐々にですが改善されつつあります。 しかしながら、"Java"というだけで未だに敬遠されるのが現状。 そんなSwingと引き続き付き合っていくみんなのスレッドです。 Java低速GUI Swing 4 (前スレ) pc8.2ch.net/test/read.cgi/tech/1140533866/ Java低速GUI Swing 3 pc8.2ch.net/test/read.cgi/tech/1121700954/ Java低速GUI Swing 2 pc8.2ch.net/test/read.cgi/tech/1095398949/ Java低速GUI Swing pc5.2ch.net/test/read.cgi/tech/1062271447/l50
- 152 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 19:51:47 ]
- 質問です。
Java2DとSwingに関連する内容なのですが、 JPanalを継承したクラスを、JTabbedPaneにaddして、そのクラスのpaintメソッドで Java2Dの描画を行っています。 そこで、 public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g; AffineTransform af = new AffineTransform(); g2.setTransform(af); 以下描画... } とすると、ウィンドウサイズを変更したり、再描画させたりした時に描画するものの位置がずれます。 具体的にいうと、jTabbedPaneのタブの大きさだけ描画した物が上に移動します。 原因を調べてみると、どうもAffineTransformオブジェクトをGraphics2Dに登録すると、 座標計算の基準点がタブに登録したJPanel派生クラスの領域の左上ではなく、 jTabbedPaneの領域(タブ表示域も含んだ)の左上に、再描画の時に変更になってしまうようなのです。 これはJavaランタイムのバグなのでしょうか。ちなみにJavaのバージョンは1.5.0_08です。
- 153 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 20:23:00 ]
- よくわからんが
paint()じゃなくて paintComponent()をオーバーライドしなされ あと1.5.0_08はSwingにバグがあるので1.5.0_09にしたほうがいい
- 154 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 09:59:06 ]
- >>152
問題が再現するコンパイル可能なソースを出した方がはやいと思うよ.
- 155 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 11:40:38 ]
- >>154
public class foo extends JApplet { private JPanel jContentPane = null; private JTabbedPane jTabbedPane = null; private JPanel jPanel2 = null; public foo() { super(); } public void init() { this.setContentPane(getJContentPane()); } private JPanel getJContentPane() { if (jContentPane == null) { jContentPane = new JPanel(); jContentPane.setLayout(new BorderLayout()); jContentPane.add(getJTabbedPane(), BorderLayout.CENTER); } return jContentPane; } private JTabbedPane getJTabbedPane() { if (jTabbedPane == null) { jTabbedPane = new JTabbedPane(); jTabbedPane.addTab("パネル2", null, getJPanel2(), null); } return jTabbedPane; } private JPanel getJPanel2() { if (jPanel2 == null) { jPanel2 = new Canvas(); jPanel2.setLayout(new GridBagLayout()); } return jPanel2; } }
- 156 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 11:42:08 ]
- class Canvas extends JPanel {
public Canvas self = this; public Canvas() { this.addMouseListener(new MouseAdapter(){public void mouseClicked(MouseEvent arg0) { self.repaint(); }}); } public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D)g; g2.clearRect(0, 0, this.getSize().width, this.getSize().height); //画面を一度クリア AffineTransform af = new AffineTransform(); af.setToTranslation(100, 0); g2.setTransform(af); g2.draw(new Line2D.Float(10,50,20,50)); //x軸 } } こんなソースになります。マウスクリックすると短い横線の位置がタブの高さ分下に下がります。 ウィンドウサイズを変更すると元に戻り、またクリックすると位置が下がります。
- 157 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 21:00:04 ]
- >public Canvas self = this;
すまん,うけたw
- 158 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 21:35:16 ]
- >>155
//g2.setTransform(af); g2.transform(af); 理由はAPI説明のGraphics2D#setTransformの項をよく読むこと。 ちなみに、内部クラスから外側のクラスのインスタンスを参照したいときは、 Canvas.this.repaint(); のように「外側のクラス名.this」と書けば、selfのように自分で持っていなくてもいい。 ただし、外側のクラスが匿名クラスの場合は名前がないため、この書き方はできないので、 別の手段が必要だが。その中にはself=thisのような方法もとりうる方法のひとつではある。
- 159 名前:157 mailto:sage [2006/11/20(月) 21:41:14 ]
- 笑っただけだと悪いので… Canvas#paintComponent() を以下のように
すれば何が期待通りになって,かつ何が起きてるのかわかると思われ. # 初回描画時とrepaintでの描画時の出力を比べてください. public void paintComponent (Graphics g){ Graphics2D g2 = (Graphics2D) g; AffineTransform originalTransform = g2.getTransform(); System.out.println("translate (x, y) = ( " + originalTransform.getTranslateX() + ", " + originalTransform.getTranslateY() + ")"); g2.clearRect (0, 0, this.getSize().width, this.getSize().height); originalTransform.translate(100, 0); g2.draw (new Line2D.Float (10, 50, 20, 50)); }
- 160 名前:デフォルトの名無しさん mailto:sage [2006/11/21(火) 13:42:22 ]
- ありがとうございます!
次のようにしたら解決できました。 Graphics2D g2 = (Graphics2D)g; g2.clearRect(0, 0, this.getSize().width, this.getSize().height); //画面を一度クリア AffineTransform af = g2.getTransform();//new AffineTransform(); System.out.println("translate (x, y) = ( " + af.getTranslateX() + ", " + af.getTranslateY() + ")"); af.translate(100, 0); System.out.println("translate (x, y) = ( " + af.getTranslateX() + ", " + af.getTranslateY() + ")"); g2.setTransform(af); g2.draw(new Line2D.Float(10,50,20,50)); //x軸 タブにした状態などの色々な状況によって、Graphics2Dの変換行列が自動的に辻褄をあわせてくれていたんですね。 だからg2.getTransform();としてAffineTransformオブジェクトを取得してそれを使うべきで、 さらにそれ以後の座標変換も相対的な変換にすべきだったんですね。 よく分かりました。ありがとうございます。
- 161 名前:デフォルトの名無しさん mailto:sage [2006/11/21(火) 13:51:45 ]
- それにしても、マウスクリックした時と初回描画時やウィンドウサイズを変えたりした時で描画領域の
原点の位置が変わってしまうなんて、Swingって妙な仕様ですね・・・。
- 162 名前:デフォルトの名無しさん mailto:sage [2006/11/21(火) 16:39:27 ]
- >>161
なぜにそんなにsetTransformを使いたがるんだろうか。 setTransformはgetTransformで保存した元のコンテクストを、 描画終了時にリストアするときにだけ使うべきものとある。 描画時の座標変換にはtransform, rotate, scale, shearを使うだけでいい。 仕様が変というより、使い方が変だと思う。 変な使い方ができうるという点で仕様が悪いのかもしれないけど。
- 163 名前:デフォルトの名無しさん mailto:sage [2006/11/21(火) 17:26:03 ]
- >>160
Graphics2D g2 = (Graphics2D)g; g2.clearRect(0, 0, this.getSize().width, this.getSize().height); //画面を一度クリア AffineTransform backup = g2.getTransform(); // backup g2.translate(100, 0); g2.draw(new Line2D.Float(10,50,20,50)); //x軸を描画 g2.setTransform(backup); // restore
- 164 名前:デフォルトの名無しさん mailto:sage [2006/11/21(火) 18:03:15 ]
- >>162
そうですね。setTransformは今後控えます。 でもそれと関係なしに、マウスクリックした時と初回描画時orウィンドウサイズ変更時で描画領域の 原点位置が変わっていて、それをSwing(AWT?)がg2の変換行列を自動的に変えて無理やりつじつまを合わせている というSwing(AWT?)の仕様がちょっと気になってしまいました。
- 165 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 18:35:49 ]
- 高速GUIのスレがいつの間にかなくなっているな
- 166 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 21:30:27 ]
- HTMLの<table>のように理解しやすいレイアウトはないの?
GridBagLayoutでいいじゃんってのは止めてね。 コンポーネント間隔の割合比率(パーセント)を<table>のように 自動計算でやってくれたりすると楽なんだけど…
- 167 名前:・∀・)っ-○◎●創聖のダンゴリオン ◆DanGorION6 mailto:sage [2006/11/24(金) 23:14:02 ]
- SWTも結局大して早くなかったし、最良のSWTがEclipse自身だもんな。
- 168 名前:・∀・)っ-○◎●創聖のダンゴリオン ◆DanGorION6 mailto:sage [2006/11/24(金) 23:14:23 ]
- ×SWTが
○SWTアプリが
- 169 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 23:47:52 ]
- >>166
割合ではないけどレイアウトマネージャほとんど理解しなくても使えるグループレイアウトは?
- 170 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 00:17:53 ]
- 日本語でおk
- 171 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 01:22:34 ]
- >>166
XmlGridLayoutでも使ってみれば?
- 172 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 01:28:22 ]
- >>165
需要大してなかったみたいだし、仕方ないね・・・ それにSWTの質問がしたい人はプラグ印スレに行けばいいし、なくても問題ないだろ。 (つーかSWTやる人のほとんどはプラグ印用途な気もするが。)
- 173 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 06:03:06 ]
- Eclipseのプラグイン以外でSWT使うのはアホだな。
Eclipse RCPとか使ったりね。もうバカかと。
- 174 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 19:09:10 ]
- >>173
Eclipse RCPはそんなに悪く無いと思うがな 最近、RadRailsとかAptanaとか実際にそれなりに動くRCPアプリが結構出て来てるし まあ、Eclipse RCPは実質Eclipseプラグインとほとんど変わらんのだが。
- 175 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 19:37:08 ]
- >>171
ありがたや。ありたがや。
- 176 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 10:33:18 ]
- 画面デザインがベタベタなWindows以外許さない、
な案件だと仕方なくSWTで作ることになる・・・ と思いきや、Swingでプロトタイプ作って見せると やっぱこれで良いですになる今日この頃。
- 177 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 20:32:43 ]
- あるあるwwww
- 178 名前:デフォルトの名無しさん mailto:sage [2006/11/30(木) 02:43:56 ]
- JFrame上のJMenu、JMenuItem、等のフォントをまとめて(同じものに)設定するにはどうしたらいいでしょうか?
- 179 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 17:33:15 ]
- FontUIResource font = new FontUIResource(new Font(...));
UIManager.put("Menu.font", font); UIManager.put("MenuItem.font", font);
- 180 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 16:15:58 ]
- >>179
ありがとうございました。
- 181 名前:デフォルトの名無しさん [2006/12/04(月) 00:49:10 ]
- paintComponentとかpaintとかで、
いくつも矩形を描いて中に文字をいれたいんだけど、文字の長さや幅に応じて 自動的に矩形のサイズを調節したり、矩形の表示位置がウィンドウをはみだしたり 他の矩形と重なったりしないように表示位置を自動で調節してくれるようにしたい。 こういうのって相当むずかしいですか?
- 182 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 00:52:17 ]
- 推奨サイズとかってわかる?
- 183 名前:181 [2006/12/04(月) 18:17:08 ]
- 単語をいくつかならべてそれを矩形でかこみたいんですよ。
矩形の大きさは単語が矩形からはみださないように自動的に適切な大きさ計算して 描かれるようにしたい。 そういう単語が入っている矩形がこれまた何個も出したい。 矩形同士もお互い重ならないように自分で適切な位置を計算してそこに表示されてほしい。 そういうのって簡単にはできないのかな?
- 184 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 19:10:02 ]
- JLabelにボーダーつければ?
- 185 名前:181 [2006/12/04(月) 20:09:25 ]
- 全部自分で描きたいんですよ。
- 186 名前:六尺兄貴 mailto:sage [2006/12/04(月) 20:27:23 ]
- TextLayoutとかLineBreakMeasurerとかで調べるとよろし。
結構めんどいよ。.NETは楽なんだけど。
- 187 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 21:26:44 ]
- そこまでして自分でやりたい意図が不明だ。非標準のライブラリを排除したいわけでもないし。
- 188 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 22:51:21 ]
- やりたいことが良く分からないけど、
SwingUtilities#computeStringWidth()とか、layoutCompoundLabel()とか使って 自分で描画するかな
- 189 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 23:53:35 ]
- >>181
>>185 自動でやってくれと言ったり、全部自分で描きたいとか 訳が分かりません。 俺なら、Border設定したJPanelの中にJLabelを埋めていくかな?
- 190 名前:デフォルトの名無しさん mailto:sage [2006/12/05(火) 01:35:18 ]
- デモのアプレットの中にそういうのあったね。>>181
- 191 名前:デフォルトの名無しさん mailto:sage [2006/12/05(火) 14:50:38 ]
- 文字を四角で囲みたいだけなら、Font#getStringBoundsで領域取得して計算すりゃいいんじゃないだろうか・・・
- 192 名前:181 [2006/12/05(火) 19:37:37 ]
- >>191
表示する場所を計算すればいいってのは分かるんだけど、 複数の矩形を表示するってことを考えると、計算が複雑になりそうで できそうもないです。 ちなみに185は私ではありません。
- 193 名前:デフォルトの名無しさん mailto:sage [2006/12/05(火) 21:45:16 ]
- ひょっとしたら、>>94や>>100で挙がってるような
グラフ描画用ライブラリを使った方が簡単かもしれない。 ノードのみ並べて、ノードのサイズをライブラリ任せにすれば(その辺はライブラリ依存だが) だいたいいけそうな気がする。
- 194 名前:デフォルトの名無しさん [2006/12/05(火) 23:19:14 ]
- >>193
チョチョイとサンプルかいてみてよ
- 195 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 02:57:57 ]
- ちょいちょい
だがあぷろーだに拒否された
- 196 名前:デフォルトの名無しさん [2006/12/06(水) 10:37:34 ]
- JGraphいれようとしてるんだが
Ant必要なの?これ。 インストールできませんdふぁd;sfじゃs
- 197 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 15:13:55 ]
- んなばかな
- 198 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 20:23:17 ]
- つかantの動かない開発環境ってどうよ
- 199 名前:デフォルトの名無しさん [2006/12/06(水) 20:45:26 ]
- JGraphでほんとうにできるのかよ
- 200 名前:デフォルトの名無しさん [2006/12/06(水) 20:48:44 ]
- ほんとうに出来るかどうか、は、何をやろうとしているかに拠る。
- 201 名前:デフォルトの名無しさん [2006/12/06(水) 20:52:53 ]
- たくさんのキーワードをいくつかの分類して
分類ごとに矩形を描いて キーワードを矩形の中にならべていきたいわけ。 矩形の大きさはキーワードの長さと種類にあわせて決めたいし、 矩形の表示位置はほかの矩形とかさならないように決めたいのよ。
- 202 名前:デフォルトの名無しさん [2006/12/06(水) 21:36:49 ]
- できないでファイナルアンサー?
- 203 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 21:40:14 ]
- コンポーネントのサイズなんていくらでも自由にかえれるだろ
- 204 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 21:47:15 ]
- >>202
オマエには出来ないでファイナルアンサー ってか、既に答を書いてる人がいっぱいいるじゃん。
- 205 名前:デフォルトの名無しさん [2006/12/06(水) 22:48:16 ]
- 口だけでは納得いかん
動くコードなら納得がいく
- 206 名前:デフォルトの名無しさん [2006/12/06(水) 23:02:57 ]
- コードくれ厨がJavaにまで…
- 207 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 00:12:43 ]
- >>201
なにがいいたいのか、俺にはさっぱりわからん。 図かなんか描いてどっかに貼ってみせてみろ。
- 208 名前:デフォルトの名無しさん [2006/12/07(木) 00:24:40 ]
- _________________________________
| keyword 11111111111 | | keyword 222222222222222222222 | _______ | aaaa | | | _________________ | うお | ________ | ぎゃああ | | | _______ |あああああああ | | | __________
- 209 名前:デフォルトの名無しさん [2006/12/07(木) 00:27:06 ]
- こんな風にできんのか
______________ | keyword 11111111111 | | keyword 222222222222222222222| _______ | aaaa | | | _________________ | うお | ________ | ぎゃああ | | | _______ |あああああああ | | | __________
- 210 名前:デフォルトの名無しさん [2006/12/07(木) 00:35:22 ]
- ネトゲの吹き出しみたいなもんか?
- 211 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 00:52:16 ]
- Graphicsに描画するんだろ?
どうでもできるだろ。
- 212 名前:207 mailto:sage [2006/12/07(木) 00:52:55 ]
- >>208
GlyphVector 作って、getOutline() で Shape とかとってくれば 簡単な気がする。
- 213 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 10:22:21 ]
- ここまで答えが書かれてるのにできないってのは無いな。
やってないだけ。
- 214 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 10:53:11 ]
- 結局アルゴリズムの問題だよな。
やることはJavaだろうがWin32だろうがGTKだろうが変わらない。
- 215 名前:181 [2006/12/07(木) 12:28:54 ]
- 文字をいれる枠の大きさぐらいはなんとかなるかもしれんが、
文字が入ってる枠をほかの枠とかさならない位置を計算して 表示するアルゴリズムがわからんじゃないか
- 216 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 13:31:24 ]
- なに、Swingと関係ないことで苦労してるの?
アルゴリズムの初心者スレいったほうがいいよ。
- 217 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 14:24:59 ]
- 複数個のJPanelが存在し,
ボタンを押された祭にそれらのJPanelを切り替える事は可能でしょうか? public class SwingTest extends JFrame implements ActionListener{ JLabel label = new JLabel("change"); JButton btn = new JButton("push"); JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); public static void main(String[] args){ SwingTest test = new SwingTest("SwingTest"); test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); test.setVisible(true); } SwingTest(String title){ setTitle(title); setBounds(10, 10, 300, 200); p1.add(btn); p2.add(label); btn.addActionListener(this); getContentPane().add(p1); } public void actionPerformed(ActionEvent e){ getContentPane().remove(p1); getContentPane().add(p2); } } こんな感じで今やっているのですが,ボタンを押しても反応しなくて困っています. どなたかご教授お願いします.
- 218 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 15:08:27 ]
- 一応そのやり方でもできるけど、ちゃんとイベント把握してないとやめたほうがいい
たぶんやりたいことはJPanelを切り替えることではなく、レイアウトマネージャにあるやつで足りると思うが
- 219 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 15:37:48 ]
- >>217
解答。ボタンを押すとボタンが消えて、ラベルが現れるなんて、変なGUIだな。 元の状態にに戻れないじゃん。あくまでもテストだよね。 本ちゃんでこんな変なGUI使ったら笑われるよ。 public void actionPerformed(ActionEvent e){ getContentPane().remove(p1); getContentPane().add(p2); validate();//←ここ、ここ }
- 220 名前:217 mailto:sage [2006/12/07(木) 16:06:49 ]
- 返信ありがとうございます.
validate() を加える事で表示は代わるようになったのですが,また新たな問題が・・・. 今3つのパネルを用意してそれら3つを行き来できるようにしているのですが, この方法を用いた場合何故か3つのパネルを1回ずつ表示させることはできるのですが, 2回目以降即ち違うパネルから再度戻ってきた場合に表示が反映されません. 何度も質問してしまい,お手数だと思いますが,どなたかよろしくお願いします.
- 221 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 16:12:04 ]
- コードも見ないでどうやって解答しろと?
- 222 名前:217 mailto:sage [2006/12/07(木) 16:22:57 ]
- すいません.
コードを張ろうとしたら大きくなりすぎて,張る事ができなかったので・・・. 表示を切り替えている部分はこんな感じです.public void actionPerformed(ActionEvent e){ String cmd = e.getActionCommand(); if (cmd.equals("1to2")){ getContentPane().remove(パネル1); getContentPane().add(パネル2); } else if (cmd.equals("1to3")){ getContentPane().remove(パネル1); getContentPane().add(パネル3); } else if (cmd.equals("2to1")){ getContentPane().remove(パネル2); getContentPane().add(パネル1); } else if (cmd.equals("2to3")){ getContentPane().remove(パネル2); getContentPane().add(パネル3); } else if (cmd.equals("3to1")){ getContentPane().remove(パネル3); getContentPane().add(パネル1); } else if (cmd.equals("3to2")){ getContentPane().remove(パネル3); getContentPane().add(パネル2); } validate(); }
- 223 名前:217 mailto:sage [2006/12/07(木) 16:29:56 ]
- 何度も申し訳ありません.
先ほどパネルはが変わらないと言いましたが,一部分は変わっていました. 3つのパネルに共通する部分は変更されているのですが, それ以外の部分が変更されていませんでした. ただ変更されると言ってもマウスをボタンコンテナ上に乗せると変わるのですが, そうしなければ変わりませんでした. 非常に説明が下手で申し訳ありませんが,よろしくお願いします.
- 224 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 16:45:57 ]
- >>218が一番まともな回答だと思うけどそれは調べたの?
- 225 名前:217 mailto:sage [2006/12/07(木) 16:49:42 ]
- >>224
一応>>218の方法で 画面の切り替えが発生したら パネル上にあるコンテナをremoveAllで削除. 新たに別のパネルを作成し,コンテナを設置. そのパネルを今表示しているパネルに代入. という感じでやったのですが,画面が切り替わらず,断念しました.
- 226 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 16:50:46 ]
- そりゃそうだが、java.awt.CardLayoutというキーワードが出てこないと
そう簡単には調べられない。 AWTのレイアウト概説的文章とにらめっこする必要が出てくる。
- 227 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 16:53:00 ]
- AWTやSwingはまずレイアウトマネージャありきだろ
どんな初心者本だってすぐにでてくる
- 228 名前:217 mailto:sage [2006/12/07(木) 16:55:36 ]
- いまさらになってしまうのですが
自分がsetLayout(null)でレイアウトマネージャーを無効にしているのがダメな気がしてきた・・・. やはり何かしらレイアウトマネージャーは使うべきなんですかね・・・.
- 229 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 17:01:21 ]
- レイアウトマネージャ使えばコンポーネントサイズが変わってもそれにあわせて動いてくれるからな
とりあえずnullを使う利点はない 絶対的な座標のように扱うにしてもグループレイアウトやアブソリュートレイアウトのほうがまし 今のコードそのまま使うにしてもそのさしかえたいJPanelにレイアウト指定して そこにカードレイアウトではりつければいいだけ レイアウトマネージャ理解していないのならIDEでいじってみてどういう感じなのか理解したほうがいい カードレイアウトってのはタブ部分のないタブコントロールみたいなもん
- 230 名前:217 mailto:sage [2006/12/07(木) 17:07:34 ]
- 返信ありがとうございます.
カードレイアウトが自分のやりたい事とマッチしているようなのでまずはこれを勉強してみます. みなさま本当にありがとうございました.
- 231 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 17:14:50 ]
- カードレイアウトって、そんなもんも有ったなあ。
しかし、222のコード見たところ、ボタンがいくつか有って、押すと対応するパネルが 表示されるようにしたいんでしょ。普通はJTabbedPane使って解決じゃないの?
- 232 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 17:21:55 ]
- 今のUIそのまま使いたいならCardLayoutだけど、それは普通Tabでやる。
- 233 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 17:30:32 ]
- まあ、人様に御見せするアプリじゃないんでしょ。いいんじゃないの。
- 234 名前:181 [2006/12/07(木) 22:28:24 ]
- JGraphいちおううまくサンプル動かせたんだが、
なぜかJ2SDKのフォルダの中でソースをコンパイルして実行しないと 他の場所ではコンパイルも実行もできなんだけど、なぜだろう。 コンパイル後の.classファイルなら他の場所でも実行できるのかと思って 別の場所に移動させて動かしてみたらやっぱり動かないし。 普通、J2SDKフォルダの中でコンパイルしたり実行したりってしないんだし これだったら使い物にならないんだけど・・・
- 235 名前:デフォルトの名無しさん [2006/12/08(金) 00:16:52 ]
- jgraph.jarをソースと同じフォルダにいれればコンパイルできますた。
でも常にjgraph.jarを一緒にいれておかなければならないんでしょうか。
- 236 名前:デフォルトの名無しさん mailto:sage [2006/12/08(金) 00:26:59 ]
- なんか根本的なところ勉強したほうがよくないか?
それにSwingとまったく関係ない点について
- 237 名前:デフォルトの名無しさん mailto:sage [2006/12/08(金) 00:31:35 ]
- >>181
Javaの仕様を勉強してこい。 理解できるまで帰ってこんでよい。
- 238 名前:デフォルトの名無しさん mailto:sage [2006/12/08(金) 00:31:59 ]
- jgraphスレ行け
- 239 名前:デフォルトの名無しさん [2006/12/08(金) 00:49:38 ]
- jgraphスレってなんだよ。そんなものねえじゃん
- 240 名前:デフォルトの名無しさん mailto:sage [2006/12/08(金) 00:53:24 ]
- 無けりゃ最初に質問すべきスレがあるだろ
少なくともここじゃねえ
- 241 名前:デフォルトの名無しさん mailto:sage [2006/12/09(土) 19:21:53 ]
- JTableで、カーソルキーによるセルの移動を監視したいのですが、どうしたらよいですか?
keyPressed で JTable#getSelectedRow() で行を取得すると、 移動前の行が取れてしまうのが悩みの種です。 押したキーによって、+1、-1すればできますが、 もう少し良い方法があれば教えてください。お願いします。
- 242 名前:241 mailto:sage [2006/12/09(土) 19:59:48 ]
- モデルの isCellEditable をオーバーライドして移動先が取得できるか試しましたが、
セルを行で選択するモードだと isCellEditable が呼ばれないんですね。どうしたものか。
- 243 名前:デフォルトの名無しさん mailto:sage [2006/12/09(土) 20:32:19 ]
- >>241
SelectionModel を使う。
- 244 名前:デフォルトの名無しさん mailto:sage [2006/12/09(土) 20:49:50 ]
- >>241
TableColumnModelListener,ListSelectionListener の2つで横と縦の選択がとらえられる。
- 245 名前:241 mailto:sage [2006/12/09(土) 22:31:36 ]
- >>243 >>244
ありがとうございました。早速試したところ、なんとか取れました。 あと、JTable#valueChanged(ListSelectionEvent) をオーバーライドしても取れました。 奥が深いですね。
- 246 名前:デフォルトの名無しさん mailto:sage [2006/12/09(土) 23:25:58 ]
- ぽとぺたやってると手軽にオーバーライドできなくて面倒なんだよね
ペイントイベントもイベントとしての実装じゃないから手軽とはいかないし SwingはJavaBeansをベースに作ってるといいながらどうもそういう実装になってないんだよね getとsetが対になってないからプロパティとして表示されないとかも多いし
- 247 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 00:56:29 ]
- Java SE 6 入れてみたけど Swing また速くなった?
- 248 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 01:55:20 ]
- Swing部分はまだ確認してないが、演算速度は確実に速いっぽ
コンパイルしなおしてなくても物によっては1.4倍くらいでてる
- 249 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 11:49:28 ]
- JButton上で、HTML要素を使って改行し、多段落表示させているのですが、
この中の文字列に含まれる一部の「<」や「>」や「/」などが表示されません。 これらの文字をHTML要素として解釈させないため無効化するにはどうしたらいいのでしょうか? Webブラウザ上でHTMLソースを表示させるときのように 「<」や「/」を実体参照に書き換えても表示できないようです。
- 250 名前:249 mailto:sage [2006/12/14(木) 12:37:25 ]
- 文字実体参照ではなく数値文字参照でやってみたらなぜかうまくいきました。
- 251 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 12:41:39 ]
- >>250
おれはふつうに>とかでできてるぞ
- 252 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 12:43:46 ]
- あら、2chでえすけーぷされた
&gt; で普通に表示されてるよと
|

|