トップページ⇒tech
1001コメント320KB

Java低速GUI Swing 5

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/10/18(水) 11:50:09
ハードウェアの高スペック化、JavaVMのホットスポットの高速化に伴い、
パフォーマンスの問題は徐々にですが改善されつつあります。
しかしながら、"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
0153デフォルトの名無しさん2006/11/19(日) 20:23:00
よくわからんが
paint()じゃなくて
paintComponent()をオーバーライドしなされ
あと1.5.0_08はSwingにバグがあるので1.5.0_09にしたほうがいい
0154デフォルトの名無しさん2006/11/20(月) 09:59:06
>>152
問題が再現するコンパイル可能なソースを出した方がはやいと思うよ.
0155デフォルトの名無しさん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;
}
}
0156デフォルトの名無しさん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軸
}
}
こんなソースになります。マウスクリックすると短い横線の位置がタブの高さ分下に下がります。
ウィンドウサイズを変更すると元に戻り、またクリックすると位置が下がります。
0157デフォルトの名無しさん2006/11/20(月) 21:00:04
>public Canvas self = this;
すまん,うけたw
0158デフォルトの名無しさん2006/11/20(月) 21:35:16
>>155
//g2.setTransform(af);
g2.transform(af);
理由はAPI説明のGraphics2D#setTransformの項をよく読むこと。

ちなみに、内部クラスから外側のクラスのインスタンスを参照したいときは、
Canvas.this.repaint();
のように「外側のクラス名.this」と書けば、selfのように自分で持っていなくてもいい。
ただし、外側のクラスが匿名クラスの場合は名前がないため、この書き方はできないので、
別の手段が必要だが。その中にはself=thisのような方法もとりうる方法のひとつではある。
01591572006/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));
}
0160デフォルトの名無しさん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オブジェクトを取得してそれを使うべきで、
さらにそれ以後の座標変換も相対的な変換にすべきだったんですね。
よく分かりました。ありがとうございます。
0161デフォルトの名無しさん2006/11/21(火) 13:51:45
それにしても、マウスクリックした時と初回描画時やウィンドウサイズを変えたりした時で描画領域の
原点の位置が変わってしまうなんて、Swingって妙な仕様ですね・・・。
0162デフォルトの名無しさん2006/11/21(火) 16:39:27
>>161
なぜにそんなにsetTransformを使いたがるんだろうか。
setTransformはgetTransformで保存した元のコンテクストを、
描画終了時にリストアするときにだけ使うべきものとある。
描画時の座標変換にはtransform, rotate, scale, shearを使うだけでいい。
仕様が変というより、使い方が変だと思う。
変な使い方ができうるという点で仕様が悪いのかもしれないけど。
0163デフォルトの名無しさん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
0164デフォルトの名無しさん2006/11/21(火) 18:03:15
>>162
そうですね。setTransformは今後控えます。
でもそれと関係なしに、マウスクリックした時と初回描画時orウィンドウサイズ変更時で描画領域の
原点位置が変わっていて、それをSwing(AWT?)がg2の変換行列を自動的に変えて無理やりつじつまを合わせている
というSwing(AWT?)の仕様がちょっと気になってしまいました。
0165デフォルトの名無しさん2006/11/24(金) 18:35:49
高速GUIのスレがいつの間にかなくなっているな
0166デフォルトの名無しさん2006/11/24(金) 21:30:27
HTMLの<table>のように理解しやすいレイアウトはないの?
GridBagLayoutでいいじゃんってのは止めてね。
コンポーネント間隔の割合比率(パーセント)を<table>のように
自動計算でやってくれたりすると楽なんだけど…
0167・∀・)っ-○◎●創聖のダンゴリオン ◆DanGorION6 2006/11/24(金) 23:14:02
SWTも結局大して早くなかったし、最良のSWTがEclipse自身だもんな。
0168・∀・)っ-○◎●創聖のダンゴリオン ◆DanGorION6 2006/11/24(金) 23:14:23
×SWTが
○SWTアプリが
0169デフォルトの名無しさん2006/11/24(金) 23:47:52
>>166
割合ではないけどレイアウトマネージャほとんど理解しなくても使えるグループレイアウトは?
0170デフォルトの名無しさん2006/11/25(土) 00:17:53
日本語でおk
0171デフォルトの名無しさん2006/11/25(土) 01:22:34
>>166
XmlGridLayoutでも使ってみれば?
0172デフォルトの名無しさん2006/11/25(土) 01:28:22
>>165
需要大してなかったみたいだし、仕方ないね・・・

それにSWTの質問がしたい人はプラグ印スレに行けばいいし、なくても問題ないだろ。
(つーかSWTやる人のほとんどはプラグ印用途な気もするが。)
0173デフォルトの名無しさん2006/11/25(土) 06:03:06
Eclipseのプラグイン以外でSWT使うのはアホだな。
Eclipse RCPとか使ったりね。もうバカかと。
0174デフォルトの名無しさん2006/11/25(土) 19:09:10
>>173
Eclipse RCPはそんなに悪く無いと思うがな
最近、RadRailsとかAptanaとか実際にそれなりに動くRCPアプリが結構出て来てるし
まあ、Eclipse RCPは実質Eclipseプラグインとほとんど変わらんのだが。
0175デフォルトの名無しさん2006/11/25(土) 19:37:08
>>171
ありがたや。ありたがや。
0176デフォルトの名無しさん2006/11/27(月) 10:33:18
画面デザインがベタベタなWindows以外許さない、
な案件だと仕方なくSWTで作ることになる・・・
と思いきや、Swingでプロトタイプ作って見せると
やっぱこれで良いですになる今日この頃。
0177デフォルトの名無しさん2006/11/27(月) 20:32:43
あるあるwwww
0178デフォルトの名無しさん2006/11/30(木) 02:43:56
JFrame上のJMenu、JMenuItem、等のフォントをまとめて(同じものに)設定するにはどうしたらいいでしょうか?
0179デフォルトの名無しさん2006/12/02(土) 17:33:15
FontUIResource font = new FontUIResource(new Font(...));
UIManager.put("Menu.font", font);
UIManager.put("MenuItem.font", font);
0180デフォルトの名無しさん2006/12/03(日) 16:15:58
>>179
ありがとうございました。
0181デフォルトの名無しさん2006/12/04(月) 00:49:10
paintComponentとかpaintとかで、
いくつも矩形を描いて中に文字をいれたいんだけど、文字の長さや幅に応じて
自動的に矩形のサイズを調節したり、矩形の表示位置がウィンドウをはみだしたり
他の矩形と重なったりしないように表示位置を自動で調節してくれるようにしたい。
こういうのって相当むずかしいですか?
0182デフォルトの名無しさん2006/12/04(月) 00:52:17
推奨サイズとかってわかる?
01831812006/12/04(月) 18:17:08
単語をいくつかならべてそれを矩形でかこみたいんですよ。
矩形の大きさは単語が矩形からはみださないように自動的に適切な大きさ計算して
描かれるようにしたい。

そういう単語が入っている矩形がこれまた何個も出したい。
矩形同士もお互い重ならないように自分で適切な位置を計算してそこに表示されてほしい。
そういうのって簡単にはできないのかな?
0184デフォルトの名無しさん2006/12/04(月) 19:10:02
JLabelにボーダーつければ?
01851812006/12/04(月) 20:09:25
全部自分で描きたいんですよ。
0186六尺兄貴2006/12/04(月) 20:27:23
TextLayoutとかLineBreakMeasurerとかで調べるとよろし。
結構めんどいよ。.NETは楽なんだけど。
0187デフォルトの名無しさん2006/12/04(月) 21:26:44
そこまでして自分でやりたい意図が不明だ。非標準のライブラリを排除したいわけでもないし。
0188デフォルトの名無しさん2006/12/04(月) 22:51:21
やりたいことが良く分からないけど、
SwingUtilities#computeStringWidth()とか、layoutCompoundLabel()とか使って
自分で描画するかな
0189デフォルトの名無しさん2006/12/04(月) 23:53:35
>>181
>>185

自動でやってくれと言ったり、全部自分で描きたいとか
訳が分かりません。

俺なら、Border設定したJPanelの中にJLabelを埋めていくかな?
0190デフォルトの名無しさん2006/12/05(火) 01:35:18
デモのアプレットの中にそういうのあったね。>>181
0191デフォルトの名無しさん2006/12/05(火) 14:50:38
文字を四角で囲みたいだけなら、Font#getStringBoundsで領域取得して計算すりゃいいんじゃないだろうか・・・
01921812006/12/05(火) 19:37:37
>>191

表示する場所を計算すればいいってのは分かるんだけど、
複数の矩形を表示するってことを考えると、計算が複雑になりそうで
できそうもないです。

ちなみに185は私ではありません。
0193デフォルトの名無しさん2006/12/05(火) 21:45:16
ひょっとしたら、>>94や>>100で挙がってるような
グラフ描画用ライブラリを使った方が簡単かもしれない。
ノードのみ並べて、ノードのサイズをライブラリ任せにすれば(その辺はライブラリ依存だが)
だいたいいけそうな気がする。
0194デフォルトの名無しさん2006/12/05(火) 23:19:14
>>193

チョチョイとサンプルかいてみてよ
0195デフォルトの名無しさん2006/12/06(水) 02:57:57
ちょいちょい

だがあぷろーだに拒否された
0196デフォルトの名無しさん2006/12/06(水) 10:37:34
JGraphいれようとしてるんだが
Ant必要なの?これ。
インストールできませんdふぁd;sfじゃs
0197デフォルトの名無しさん2006/12/06(水) 15:13:55
んなばかな
0198デフォルトの名無しさん2006/12/06(水) 20:23:17
つかantの動かない開発環境ってどうよ
0199デフォルトの名無しさん2006/12/06(水) 20:45:26
JGraphでほんとうにできるのかよ
0200デフォルトの名無しさん2006/12/06(水) 20:48:44
ほんとうに出来るかどうか、は、何をやろうとしているかに拠る。
0201デフォルトの名無しさん2006/12/06(水) 20:52:53
たくさんのキーワードをいくつかの分類して
分類ごとに矩形を描いて
キーワードを矩形の中にならべていきたいわけ。
矩形の大きさはキーワードの長さと種類にあわせて決めたいし、
矩形の表示位置はほかの矩形とかさならないように決めたいのよ。
0202デフォルトの名無しさん2006/12/06(水) 21:36:49
できないでファイナルアンサー?
0203デフォルトの名無しさん2006/12/06(水) 21:40:14
コンポーネントのサイズなんていくらでも自由にかえれるだろ
0204デフォルトの名無しさん2006/12/06(水) 21:47:15
>>202
オマエには出来ないでファイナルアンサー

ってか、既に答を書いてる人がいっぱいいるじゃん。
0205デフォルトの名無しさん2006/12/06(水) 22:48:16
口だけでは納得いかん
動くコードなら納得がいく
0206デフォルトの名無しさん2006/12/06(水) 23:02:57
コードくれ厨がJavaにまで…
0207デフォルトの名無しさん2006/12/07(木) 00:12:43
>>201
なにがいいたいのか、俺にはさっぱりわからん。
図かなんか描いてどっかに貼ってみせてみろ。
0208デフォルトの名無しさん2006/12/07(木) 00:24:40
_________________________________
| keyword 11111111111      |
| keyword 222222222222222222222 |   _______
| aaaa              |  |      |
_________________   | うお   |
        ________    | ぎゃああ |
       |        |   _______
       |あああああああ |
       |        |
       __________
0209デフォルトの名無しさん2006/12/07(木) 00:27:06
こんな風にできんのか


______________
| keyword 11111111111      |
| keyword 222222222222222222222|    _______
| aaaa              |  |      |
_________________   | うお   |
        ________       | ぎゃああ |
       |           |   _______
       |あああああああ  |
       |           |
       __________
0210デフォルトの名無しさん2006/12/07(木) 00:35:22
ネトゲの吹き出しみたいなもんか?
0211デフォルトの名無しさん2006/12/07(木) 00:52:16
Graphicsに描画するんだろ?
どうでもできるだろ。
02122072006/12/07(木) 00:52:55
>>208
GlyphVector 作って、getOutline() で Shape とかとってくれば
簡単な気がする。
0213デフォルトの名無しさん2006/12/07(木) 10:22:21
ここまで答えが書かれてるのにできないってのは無いな。
やってないだけ。
0214デフォルトの名無しさん2006/12/07(木) 10:53:11
結局アルゴリズムの問題だよな。
やることはJavaだろうがWin32だろうがGTKだろうが変わらない。
02151812006/12/07(木) 12:28:54
文字をいれる枠の大きさぐらいはなんとかなるかもしれんが、
文字が入ってる枠をほかの枠とかさならない位置を計算して
表示するアルゴリズムがわからんじゃないか
0216デフォルトの名無しさん2006/12/07(木) 13:31:24
なに、Swingと関係ないことで苦労してるの?
アルゴリズムの初心者スレいったほうがいいよ。
0217デフォルトの名無しさん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);
}
}

こんな感じで今やっているのですが,ボタンを押しても反応しなくて困っています.
どなたかご教授お願いします.
0218デフォルトの名無しさん2006/12/07(木) 15:08:27
一応そのやり方でもできるけど、ちゃんとイベント把握してないとやめたほうがいい

たぶんやりたいことはJPanelを切り替えることではなく、レイアウトマネージャにあるやつで足りると思うが
0219デフォルトの名無しさん2006/12/07(木) 15:37:48
>>217

解答。ボタンを押すとボタンが消えて、ラベルが現れるなんて、変なGUIだな。
元の状態にに戻れないじゃん。あくまでもテストだよね。
本ちゃんでこんな変なGUI使ったら笑われるよ。

public void actionPerformed(ActionEvent e){
getContentPane().remove(p1);
getContentPane().add(p2);
validate();//←ここ、ここ
}
02202172006/12/07(木) 16:06:49
返信ありがとうございます.
validate()
を加える事で表示は代わるようになったのですが,また新たな問題が・・・.
今3つのパネルを用意してそれら3つを行き来できるようにしているのですが,
この方法を用いた場合何故か3つのパネルを1回ずつ表示させることはできるのですが,
2回目以降即ち違うパネルから再度戻ってきた場合に表示が反映されません.
何度も質問してしまい,お手数だと思いますが,どなたかよろしくお願いします.
0221デフォルトの名無しさん2006/12/07(木) 16:12:04
コードも見ないでどうやって解答しろと?
02222172006/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();
}
02232172006/12/07(木) 16:29:56
何度も申し訳ありません.
先ほどパネルはが変わらないと言いましたが,一部分は変わっていました.
3つのパネルに共通する部分は変更されているのですが,
それ以外の部分が変更されていませんでした.
ただ変更されると言ってもマウスをボタンコンテナ上に乗せると変わるのですが,
そうしなければ変わりませんでした.
非常に説明が下手で申し訳ありませんが,よろしくお願いします.
0224デフォルトの名無しさん2006/12/07(木) 16:45:57
>>218が一番まともな回答だと思うけどそれは調べたの?
02252172006/12/07(木) 16:49:42
>>224
一応>>218の方法で
画面の切り替えが発生したら
パネル上にあるコンテナをremoveAllで削除.
新たに別のパネルを作成し,コンテナを設置.
そのパネルを今表示しているパネルに代入.
という感じでやったのですが,画面が切り替わらず,断念しました.
0226デフォルトの名無しさん2006/12/07(木) 16:50:46
そりゃそうだが、java.awt.CardLayoutというキーワードが出てこないと
そう簡単には調べられない。
AWTのレイアウト概説的文章とにらめっこする必要が出てくる。
0227デフォルトの名無しさん2006/12/07(木) 16:53:00
AWTやSwingはまずレイアウトマネージャありきだろ
どんな初心者本だってすぐにでてくる
02282172006/12/07(木) 16:55:36
いまさらになってしまうのですが
自分がsetLayout(null)でレイアウトマネージャーを無効にしているのがダメな気がしてきた・・・.
やはり何かしらレイアウトマネージャーは使うべきなんですかね・・・.
0229デフォルトの名無しさん2006/12/07(木) 17:01:21
レイアウトマネージャ使えばコンポーネントサイズが変わってもそれにあわせて動いてくれるからな
とりあえずnullを使う利点はない
絶対的な座標のように扱うにしてもグループレイアウトやアブソリュートレイアウトのほうがまし

今のコードそのまま使うにしてもそのさしかえたいJPanelにレイアウト指定して
そこにカードレイアウトではりつければいいだけ

レイアウトマネージャ理解していないのならIDEでいじってみてどういう感じなのか理解したほうがいい
カードレイアウトってのはタブ部分のないタブコントロールみたいなもん
02302172006/12/07(木) 17:07:34
返信ありがとうございます.
カードレイアウトが自分のやりたい事とマッチしているようなのでまずはこれを勉強してみます.
みなさま本当にありがとうございました.
0231デフォルトの名無しさん2006/12/07(木) 17:14:50
カードレイアウトって、そんなもんも有ったなあ。
しかし、222のコード見たところ、ボタンがいくつか有って、押すと対応するパネルが
表示されるようにしたいんでしょ。普通はJTabbedPane使って解決じゃないの?
0232デフォルトの名無しさん2006/12/07(木) 17:21:55
今のUIそのまま使いたいならCardLayoutだけど、それは普通Tabでやる。
0233デフォルトの名無しさん2006/12/07(木) 17:30:32
まあ、人様に御見せするアプリじゃないんでしょ。いいんじゃないの。
02341812006/12/07(木) 22:28:24
JGraphいちおううまくサンプル動かせたんだが、
なぜかJ2SDKのフォルダの中でソースをコンパイルして実行しないと
他の場所ではコンパイルも実行もできなんだけど、なぜだろう。
コンパイル後の.classファイルなら他の場所でも実行できるのかと思って
別の場所に移動させて動かしてみたらやっぱり動かないし。
普通、J2SDKフォルダの中でコンパイルしたり実行したりってしないんだし
これだったら使い物にならないんだけど・・・
0235デフォルトの名無しさん2006/12/08(金) 00:16:52
jgraph.jarをソースと同じフォルダにいれればコンパイルできますた。
でも常にjgraph.jarを一緒にいれておかなければならないんでしょうか。
0236デフォルトの名無しさん2006/12/08(金) 00:26:59
なんか根本的なところ勉強したほうがよくないか?
それにSwingとまったく関係ない点について
0237デフォルトの名無しさん2006/12/08(金) 00:31:35
>>181
Javaの仕様を勉強してこい。
理解できるまで帰ってこんでよい。
0238デフォルトの名無しさん2006/12/08(金) 00:31:59
jgraphスレ行け
0239デフォルトの名無しさん2006/12/08(金) 00:49:38
jgraphスレってなんだよ。そんなものねえじゃん
0240デフォルトの名無しさん2006/12/08(金) 00:53:24
無けりゃ最初に質問すべきスレがあるだろ
少なくともここじゃねえ
0241デフォルトの名無しさん2006/12/09(土) 19:21:53
JTableで、カーソルキーによるセルの移動を監視したいのですが、どうしたらよいですか?
keyPressed で JTable#getSelectedRow() で行を取得すると、
移動前の行が取れてしまうのが悩みの種です。
押したキーによって、+1、-1すればできますが、
もう少し良い方法があれば教えてください。お願いします。
02422412006/12/09(土) 19:59:48
モデルの isCellEditable をオーバーライドして移動先が取得できるか試しましたが、
セルを行で選択するモードだと isCellEditable が呼ばれないんですね。どうしたものか。
0243デフォルトの名無しさん2006/12/09(土) 20:32:19
>>241
SelectionModel を使う。
0244デフォルトの名無しさん2006/12/09(土) 20:49:50
>>241
TableColumnModelListener,ListSelectionListener
の2つで横と縦の選択がとらえられる。
02452412006/12/09(土) 22:31:36
>>243 >>244
ありがとうございました。早速試したところ、なんとか取れました。
あと、JTable#valueChanged(ListSelectionEvent) をオーバーライドしても取れました。
奥が深いですね。
0246デフォルトの名無しさん2006/12/09(土) 23:25:58
ぽとぺたやってると手軽にオーバーライドできなくて面倒なんだよね
ペイントイベントもイベントとしての実装じゃないから手軽とはいかないし

SwingはJavaBeansをベースに作ってるといいながらどうもそういう実装になってないんだよね
getとsetが対になってないからプロパティとして表示されないとかも多いし
0247デフォルトの名無しさん2006/12/13(水) 00:56:29
Java SE 6 入れてみたけど Swing また速くなった?
0248デフォルトの名無しさん2006/12/13(水) 01:55:20
Swing部分はまだ確認してないが、演算速度は確実に速いっぽ
コンパイルしなおしてなくても物によっては1.4倍くらいでてる
0249デフォルトの名無しさん2006/12/14(木) 11:49:28
JButton上で、HTML要素を使って改行し、多段落表示させているのですが、
この中の文字列に含まれる一部の「<」や「>」や「/」などが表示されません。
これらの文字をHTML要素として解釈させないため無効化するにはどうしたらいいのでしょうか?

Webブラウザ上でHTMLソースを表示させるときのように
「<」や「/」を実体参照に書き換えても表示できないようです。
02502492006/12/14(木) 12:37:25
文字実体参照ではなく数値文字参照でやってみたらなぜかうまくいきました。
0251デフォルトの名無しさん2006/12/14(木) 12:41:39
>>250
おれはふつうに>とかでできてるぞ
0252デフォルトの名無しさん2006/12/14(木) 12:43:46
あら、2chでえすけーぷされた
&gt;
で普通に表示されてるよと
■ このスレッドは過去ログ倉庫に格納されています