Java低速GUI Swing 5at TECH
Java低速GUI Swing 5 - 暇つぶし2ch237:デフォルトの名無しさん
06/12/08 00:31:35
>>181
Javaの仕様を勉強してこい。
理解できるまで帰ってこんでよい。

238:デフォルトの名無しさん
06/12/08 00:31:59
jgraphスレ行け

239:デフォルトの名無しさん
06/12/08 00:49:38
jgraphスレってなんだよ。そんなものねえじゃん

240:デフォルトの名無しさん
06/12/08 00:53:24
無けりゃ最初に質問すべきスレがあるだろ
少なくともここじゃねえ

241:デフォルトの名無しさん
06/12/09 19:21:53
JTableで、カーソルキーによるセルの移動を監視したいのですが、どうしたらよいですか?
keyPressed で JTable#getSelectedRow() で行を取得すると、
移動前の行が取れてしまうのが悩みの種です。
押したキーによって、+1、-1すればできますが、
もう少し良い方法があれば教えてください。お願いします。

242:241
06/12/09 19:59:48
モデルの isCellEditable をオーバーライドして移動先が取得できるか試しましたが、
セルを行で選択するモードだと isCellEditable が呼ばれないんですね。どうしたものか。

243:デフォルトの名無しさん
06/12/09 20:32:19
>>241
SelectionModel を使う。


244:デフォルトの名無しさん
06/12/09 20:49:50
>>241
TableColumnModelListener,ListSelectionListener
の2つで横と縦の選択がとらえられる。


245:241
06/12/09 22:31:36
>>243 >>244
ありがとうございました。早速試したところ、なんとか取れました。
あと、JTable#valueChanged(ListSelectionEvent) をオーバーライドしても取れました。
奥が深いですね。

246:デフォルトの名無しさん
06/12/09 23:25:58
ぽとぺたやってると手軽にオーバーライドできなくて面倒なんだよね
ペイントイベントもイベントとしての実装じゃないから手軽とはいかないし

SwingはJavaBeansをベースに作ってるといいながらどうもそういう実装になってないんだよね
getとsetが対になってないからプロパティとして表示されないとかも多いし

247:デフォルトの名無しさん
06/12/13 00:56:29
Java SE 6 入れてみたけど Swing また速くなった?

248:デフォルトの名無しさん
06/12/13 01:55:20
Swing部分はまだ確認してないが、演算速度は確実に速いっぽ
コンパイルしなおしてなくても物によっては1.4倍くらいでてる


249:デフォルトの名無しさん
06/12/14 11:49:28
JButton上で、HTML要素を使って改行し、多段落表示させているのですが、
この中の文字列に含まれる一部の「<」や「>」や「/」などが表示されません。
これらの文字をHTML要素として解釈させないため無効化するにはどうしたらいいのでしょうか?

Webブラウザ上でHTMLソースを表示させるときのように
「<」や「/」を実体参照に書き換えても表示できないようです。

250:249
06/12/14 12:37:25
文字実体参照ではなく数値文字参照でやってみたらなぜかうまくいきました。


251:デフォルトの名無しさん
06/12/14 12:41:39
>>250
おれはふつうに>とかでできてるぞ

252:デフォルトの名無しさん
06/12/14 12:43:46
あら、2chでえすけーぷされた
&gt;
で普通に表示されてるよと

253:デフォルトの名無しさん
06/12/14 12:53:18
>>252
レスありがとうございます。

< と >はうまくいったのですが、
<html> のあとに、「/」が入る部分があると表示されたり表示されなかったりで試行錯誤中です。


254:デフォルトの名無しさん
06/12/14 13:29:39
>>253
bodyタグがはいっていないとかいうオチは?

255:デフォルトの名無しさん
06/12/15 07:27:32
drawLineメソッドでCanvasに線をかくことが出来ますが、
その線を座標の配列として得るにはどうしたらいいでしょうか?

256:デフォルトの名無しさん
06/12/15 09:34:57
>>255
線は特にインスタンスを保持してないしデータもない。
このやりかたでを試してみな。
URLリンク(web.hc.keio.ac.jp)

257:デフォルトの名無しさん
06/12/15 10:45:24
>>256
もっと簡単にできないものでしょうか
例えば(0,0),(0,5)をdrawLineで指定したとしたら
2点とその間にある(0,1),(0,2),(0,3),(0,4)が塗りつぶされます。
この4点の塗りつぶしをJavaはどのように実装しているのでしょうか?
この例のように予め2点を結ぶと水平,もしくは垂直になると分かっていればいいですが
(0,0),(2,5)のように水平及び垂直にならない場合,
drawLineはどのように計算して塗りつぶす点を決めているのでしょう?

258:デフォルトの名無しさん
06/12/15 11:19:16
>>257
言っている意味がわからないし(何に対して水平、垂直?水平な点なんてありえないし)
255との繋がりも無いように読めるんだけど、結局何がしたいの?
つか256もけして難しくはないと思うんだけど。
実装について知りたければソース読め。

259:デフォルトの名無しさん
06/12/15 13:11:03
>>258
ちょっと感動した。ソース読めってセリフが出てくるあたり。
まあ、ネイティブに飛ばしてない限りそこ読めば分かるよな。

260:デフォルトの名無しさん
06/12/15 13:16:38
どうでも良いことだけどCanvasはSwingじゃなくてAWTじゃなかったっけ。

261:デフォルトの名無しさん
06/12/15 13:31:08
1.2 以降だと、たかが drawLine でも Graphics2D の関係で Stroke の計算とか
結構面倒臭い事しなきゃいかんような気もする。

1.1 までだったら Stroke とか無かったし、
アンチエイリアス云々って時代でもなかったから
ブレゼンハムアルゴリズムだけで出来たかもしらんけど。

262:デフォルトの名無しさん
06/12/15 13:45:06
257はソース読んでからの書き込みです。
drawLineの実装ってどんなんだろ,と思ってソース見たのですが
Graphic見てもabstractで
Graphic2Dでオーバーライドしてるのかなと思ってもありませんでした。
どうやらdraw(Shape)っぽい漢字なのですが
Stroke云々ってあってめんどくさそうなのです。

>>258
水平,垂直ってのは結んだ線の話です。
(0,0)と(0,5)を結ぶと垂直な線になります。
ある2点を結んだときにできる線が通ることになる座標を
得るにはどうしたらいいか?ってことで伝わるでしょうか

263:デフォルトの名無しさん
06/12/15 13:46:41
えっと、もっと簡単に言うと
直線が2本あって、
その2本の線の交点の座標って求められるの?
ってことかい?

もしそれなら数学学べ

264:デフォルトの名無しさん
06/12/15 14:04:43
>>263
全然話が違います
「ある2点を結んだとき」ですから出てくる点は2つです
それだと4点になります

drawLine(0, 0, 0, 5)を呼び出すと
(0,0),(0,1),(0,2),(0,3),(0,4),(0,5)が塗りつぶされます。
(0,1),(0,2),(0,3),(0,4)が塗りつぶされるのは
(0,0)と(0,5)を結んだ直線が通る座標だからです。
(0,0)と(0,5)を結ぶと垂直な線ができるので
(0,1),(0,2),(0,3),(0,4)が塗りつぶされるということは
簡単に求められます。
drawLine(0, 0, 100, 101)を呼び出したときに
塗りつぶされる座標はどこになるのでしょうか?

265:デフォルトの名無しさん
06/12/15 14:09:00
もっと簡単じゃないか。。。

drawLine(0, 0, 5, 5)だと
(0,0),(1,1),(2,2),(3,3),(4,4),(5,5)
が塗りつぶされるけどどうやって計算するの?
ってことか?

やっぱ数学学べ

266:デフォルトの名無しさん
06/12/15 14:21:08
計算する以外での求め方は
線を書く前のキャンバスの画像と
線を書いた後のキャンバスの画像を比較すれば良い

前と後の同一座標のドットを比較して
違っていれば描画されていると判断すれば良いんじゃないか

267:デフォルトの名無しさん
06/12/15 14:23:28
>>264
ソースを理解できないのなら手助けもするが、読むのが面倒なだけなら帰れ。
そしてスレ違い。

268:デフォルトの名無しさん
06/12/15 14:29:11
JDoalogを継承したDialogで最大化、最小化ボタンを表示させることは
可能でしょうか?

JFrameを継承すれば表示されますが、
Windowsのタスクバーにアプリケーションが2個上がってきてるように
見えるのでJDialogにしたいです。

269:デフォルトの名無しさん
06/12/16 02:53:26
>>268
私が知っているのは↓の手法
Merlinの魔術: もう1つのシンプルなフレーム
URLリンク(www-06.ibm.com)
A,この手法の場合、最小化、最大化アイコンを設定する必要あり。
B,たぶんもっといい方法があると思う。

270:デフォルトの名無しさん
06/12/17 10:51:19
見えないボタンの右半分がクリックできるプログラム。
import javax.swing.*;
import java.awt.event.*;
class A020 {
  public static void main(String[] args) {
    JFrame f = new JFrame();
    f.setSize(640, 480);
    JPanel p1 = new JPanel();
    p1.setBounds(0, 0, 100, 100);
    JButton b = new JButton("クリック");
    b.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(null, "ボタンがクリックされました。");
      }
    });
    p1.add(b);
    JPanel p2 = new JPanel();
    p2.setBounds(50, 0, 100, 100);
    JLayeredPane l = new JLayeredPane();
    l.add(p1, Integer.valueOf(10));
    l.add(p2, Integer.valueOf(20));
    f.add(l);
    f.setVisible(true);
  }
}

271:デフォルトの名無しさん
06/12/17 11:00:39
×見えないボタンの右半分
○見えない「ボタンの右半分」

272:デフォルトの名無しさん
06/12/17 20:29:21
g.drawString("Test", 0, 0);
g.drawLine(0, 0, 10, 10);
とすると、線は(0,0)-(10,10)で描かれますが、文字の方は描かれません。
drawStringとdrawLineでは、座標の考え方が異なるようなのでしょうか?

273:272
06/12/17 20:43:03
すみません。解決しました。
drawStringは文字の左下が基点になるのですね。
なんのためにそうなっているのかわかりませんが。。。

274:デフォルトの名無しさん
06/12/17 20:57:59
ベースラインを理解しろよ・・・
それにこれはSwingと関係ないし

275:デフォルトの名無しさん
06/12/17 21:25:06
ベースラインがなぜアセント値の下にあるか説明せよ。

276:デフォルトの名無しさん
06/12/17 21:36:32
>>274
おまえには関係ないし

277:デフォルトの名無しさん
06/12/18 12:11:24
>>276
>>274自身には関係ないだろうが
スレに関係ないのは確かだ
日本語嫁よ

278:デフォルトの名無しさん
06/12/18 13:33:49
JTextArea で、キャレットの列の位置を取得したいのですが、
シンプルな方法があったら教えて下さい!!
今は以下のようにして取得しています。

_text = new JTextArea();
Element all = _text.getDocument().getDefaultRootElement();
int index = all.getElementIndex(_text.getCaretPosition());
Element line = element.getElement(index);
int col = _text.getCaretPosition() - e.getStartOffset();

279:272
06/12/18 14:35:31
スレ違いでしたか。。。
JComponentの質問は良くて、Componentの質問はダメってことですか?

280:デフォルトの名無しさん
06/12/18 15:14:32
単に274がキチガイ

281:デフォルトの名無しさん
06/12/18 17:57:41
>>270
どういうトリック?

282:デフォルトの名無しさん
06/12/18 17:58:32
>>278
全角とTabの対応が入ってなくない?
Tabは入る位置によって文字列長が変わるから、結構面倒そう。

283:デフォルトの名無しさん
06/12/18 20:28:08
>>282
その行の何文字目かが欲しいだけでしょ

284:デフォルトの名無しさん
06/12/20 04:23:00
コンポーネントをadd()あるいはremove()するときは直後に必ずrevalidate()を呼ぶべきでしょうか?

多くの場合、revalidate()を呼ばなくてもうまくいくのですが
(ただしremove()の後は必ずrepaint()してます)、
ときどきrevalidate()を呼ばないとダメなときがあります。

revalidate()が必要なときと不要なときの違いは何でしょうか?
または、違いは気にせずに常にrevalidate()するべきでしょうか?

285:デフォルトの名無しさん
06/12/20 12:21:57
呼ぶべき。

286:デフォルトの名無しさん
06/12/20 17:41:07
JavaSE6だとメニューをだしたまま、タイトルバーをクリックするとメニューが消えてくれるね。

かなりいいかんじあげ

287:デフォルトの名無しさん
06/12/20 18:13:34
おお、どれだけ待った事か>>286

288:デフォルトの名無しさん
06/12/21 02:34:13
>>284
オレもよくわからない。
revalidate()を呼ぶと、repaint() 時のクリップ領域が現状にあったものになる気がする。
詳しくわかったら教えてくれ。

289:284
06/12/21 21:25:56
自分の経験だけで言えば、JPanelに限ればrevalidate()は無くても大丈夫そうです。
以下、JPanel限定の話。

◆add()する場合
revalidate() → なくても問題ない。
repaint() → たいていはなくても問題ないが時々ないとダメなことがある。

◆remove()する場合
revalidate() → なくても問題ない。
repaint() → ないとダメ。

JComponentのドキュメントのrevalidateの項を見ると、
「プログラムが、通常、GUI の内容を更新するために
validate を呼び出す必要がない点で AWT とは異なります」
というようなことが書いてあります。
つまりSwingではrevalidateを呼ぶ必要はないということなのかなと解釈したのですが
実際のところはどうなのでしょう?

それと、JScrollPaneが絡んでるとrevalidateしないとダメなことがあるようです。

290:288
06/12/21 22:51:29
>>289
どうもありがと。
JPanel にボタンを2つ貼り付けて、押されたから片方を remove するサンプルを作って試してみた。
revalidate() しないと、ボタンが削除されたのに、レイアウトが変更されないね。
これはたぶん、revalidate()を自動的に呼ぶのが、
レイアウトに影響を受けたコンポーネントが呼ぶからだと思う。
つまり、removeされた本人は revalidate() を自動的に呼ぶが、もうremoveされていて親がいないので、すぐにreturnされる。
なので、親のコンポーネントの方で revalidate() してあげる必要がある。

ちなみにオレがrevalidate() を使う必要があったのは、JTextArea に行番号を表示させる時。
JScrollPane上に表示されていない行が増えた場合に、増えた行の行番号が正しく表示されなかった。
これは上のレスで書いた通り、新しく増えた領域が再描画する領域として認識されていないからだと思う。

まぁ長々と書いたが、オレははっきり理解していないのだが。。。。

291:デフォルトの名無しさん
06/12/21 23:11:13
URLリンク(homepage1.nifty.com)

292:284
06/12/22 01:13:22
どうもありがとうございます。
なるほど、周りのレイアウトに影響を及ぼす場合はrevalidate()が必要なのですね。
自分は最近setLayout(null)でずっとやってたから必要な場面がなかったのかもしれません。
JScrollPaneが絡んだときだけ必要になるのも納得です。

しかし、add()するときにrepaint()が必要になることがある理由は何なんでしょうか…?

293:デフォルトの名無しさん
06/12/22 13:16:52
paintイベントで描画してる場合

294:デフォルトの名無しさん
06/12/22 20:02:30
JListで、リスト項目の高さを任意に指定したいのですが、どうすればよいでしょうか?
現在はDefaultListCellRendererを継承したRendererを使って高さを設定してますが、反映されません。
呼び元を見たところ、Fontサイズが有効になっているっぽいのです。

295:デフォルトの名無しさん
06/12/22 21:32:27
>>294
そのレンダラのサイズ指定はどうなってるの?

296:294
06/12/22 22:31:40
>>295
すみません。できました。
レンダラで getPreferredSize() をオーバーライドして、サイズ返したら、そのサイズになりました。
getListCellRendererComponent() の中でサイズを指定しても、有効にならないようですね。
質問の内容が不十分だったこともお詫びします。

297:284
06/12/23 05:20:19
>>293
ありがとうございます。
paintComponent()ではなくてpaint()してる場合なのですね。
すると自分ではいじってないからどこで使われているのかわかりにくいわけですね。

298:デフォルトの名無しさん
06/12/23 14:09:18
>>291
そのFAQは知らなかった。とても参考になった、ありがとう。

299:デフォルトの名無しさん
06/12/23 14:57:52
>>297
Swingはフレームワークとしてpaintよんでる
つまり自前でコンポーネント描画しているすべての場合において必要ということ

300:284
06/12/23 17:55:43
>>299
ありがとうございます。
すると、add()の後はrepaint()必須ということですか?
repaint()しなくてもちゃんと描画される場合があるのはなぜでしょうか?

301:290
06/12/23 20:02:19
普通のコンポーネントを追加した場合は、revalidate() すれば repaint() しなくても正常に描画されると思う。されない時ってある?
>>293 は、drawLine とかで、自分で描画している場合は「必要」と言ってる気がする。
paintイベントって言ってるのも、paintComponent()のことだよね?


302:デフォルトの名無しさん
06/12/23 20:44:17
299も293も俺

Swingはpaintイベントでpaintなんちゃらというのをよんでる
そこで子のコンポーネントも順次呼ばれる
paintをオーバーライドするとイベントがとまって崩れるのはこのため

revalidateがリペイントマネージャに対してダーティマーキングしていれば自動的に再描画される
ソース読んでみた?IDEつかってるならすぐソース見れるからJComponentみてみるといいよ


303:デフォルトの名無しさん
06/12/24 05:29:14
>>302
paint?paintComponent?
オーバーライドするなら基本はpaintComponentでは?
あと、super呼び出せば今までと変わらないと思う。
理由は何にせよ、呼ばないで崩れる時があったら、呼んでみるってのでいいのかな。

304:デフォルトの名無しさん
06/12/24 05:49:29
間違えて、paintComponentsをオーバーライドしてはまる。

305:デフォルトの名無しさん
06/12/24 12:15:13
>>303
オーバーライドの話してないだろ

>>304
それはオーバーライドとはいわない
アノテーション使え

306:デフォルトの名無しさん
06/12/24 15:00:31
>>305
>>302に思いっきりオーバーライドってあるけど。

307:デフォルトの名無しさん
06/12/24 17:05:05
>>305
オーバーライドだろ
おまえみたいなヤツが思いっきりはまるんだよ。
paintComponentsというメソッドもある。
だから@Overrideアノテーションつけてもコンパイル通る。


308:デフォルトの名無しさん
06/12/24 19:38:21
>>306
paintのオーバーライドはするなという話なのだ

paintとpaintComponentは密接な関係であるが、paintComponentのオーバーライドの話はしていない

309:デフォルトの名無しさん
06/12/24 21:20:58
>>308
まぁそうなんだけど、そもそもの話は、paint()をオーバーライドしていなくても、
repaint()を呼び出す必要があるのはなぜ?ってこと。
paintComponent() で独自の描画処理をしている場合に、
repaint()の呼び出しが必要になる場合があるので、paintイベントって言われてると、
paint() とも paintComponent() とも、どっちとも取れる。「paint()」 なら、間違いようがないけどね。

とりあえず、独自描画なしのコンポーネントをaddしただけで、
repaint()が必要になるケースがよくわからない。どんなケースだろう。

310:デフォルトの名無しさん
06/12/24 21:58:08
addだけでもrevalidateしないとだめだけどな

311:284
06/12/25 20:16:27
paintComponent()をオーバーライドして独自描画をしている場合に
repaint()が必要ということですね。

312:デフォルトの名無しさん
06/12/25 23:23:17
Swingのソースのいたるところにrevalidateの直後にrepaintしてるからあるほうが安心かな

313:デフォルトの名無しさん
06/12/26 07:07:58
JTableのモデルでDefaultTableModelを使っているのですが、
DefaultTableModel#addRow(Object[])と
DefaultTableModel#addRow(Vector)で、動作が変わる時があるのですが、なぜでしょうか?

具体的な違いは、
addRow後に DefaultTableModel#setColumnIdentifiers() を呼び出すと、
addRow(Object[]) の方はデータが表示されません。

解決方法としては、
setColumnIdentifiers() を先に呼んで、addRowすれば問題ないのですが、
Java側のソースを見ても、なぜそうなるのかが,お風呂上りくらいさっぱりです。

一応直接の原因としては、
addRow(Object[])とした場合、DefaultTableModel#dataVectorに値が入らないためです。
dataVectorが初期化されていないような気がするので、
dataVector.insertElementAt(rowData, row);
の時にヌルポで落ちてもいいくらいなんですけど。

314:デフォルトの名無しさん
06/12/26 22:58:27
>>313
Object[]でテストしてみたけどカラムの表示ちゃんとかわってるよ

315:313
06/12/29 10:18:36
>>314
すみません。アク禁でした。
もう一度試したところ、addRow(Object[])とaddRow(Vector)で、動作は同じでした。ん~、どこかミスっていたようです。
あと、setColumnIdentifiers() を先に呼ばないとデータが入らないのは、仕様みたいですね。
または事前に列のサイズを指定してあげればOKでした。

316:デフォルトの名無しさん
07/01/05 04:13:37
JOptionPane.showMessageDialogueをつかったダイアログで、
ダイアログのボタンをアクションリスナに登録するには
どうしたらよいのか教えてい頂けないでしょうか?

317:デフォルトの名無しさん
07/01/05 17:23:08
フルスクリーン画面上にJPopupMenuを表示して
画面をrepaintするとJPopupMenuが消えてしまいます。
JPopupMenuを消さずに画面を再描画する方法はありますでしょうか。
JPopupMenu.setDefaultLightWeightPopupEnabled(false);にしております。

318:317
07/01/05 17:24:42
public class PopupMenuTest extends JFrame implements Runnable {
private Thread repaintThread = null;
public PopupMenuTest() {
setSize(800, 600);
JPopupMenu.setDefaultLightWeightPopupEnabled(false);
GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
DisplayMode fullMode = new DisplayMode(800, 600, device.getDisplayMode().getBitDepth(), device.getDisplayMode().getRefreshRate());
device.setFullScreenWindow(this);
device.setDisplayMode(fullMode);
addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON3) {createPopup().show(PopupMenuTest.this, e.getX(), e.getY());}}});
setVisible(true);
if (repaintThread == null) {repaintThread = new Thread(this);repaintThread.start();}
}
public void run() {
while (repaintThread != null) {
System.out.println("repaint");repaint();
try {Thread.sleep(10000);} catch (Exception e) {}
}
}
private JPopupMenu createPopup() {
JPopupMenu popupMenu = new JPopupMenu();
JMenu menu1 = new JMenu("menu1");
menu1.add(new JMenuItem("TEST"));
popupMenu.add(menu1);
return popupMenu;
}
public static void main(String[] args) throws Exception {new PopupMenuTest();}
}

319:デフォルトの名無しさん
07/01/05 18:07:26
> JPopupMenu.setDefaultLightWeightPopupEnabled(false);
この行削ったら動いてるように見えるが。
HeavyWeightなコンポーネント置くつもりならどうしようもないね。

320:317
07/01/05 19:23:47
>>319
お返事ありがとうございます。
現在、PopupMenuListenerでPopup可視と連動してrepaintをするかしないか分岐
という感じで逃げています。
setIgnoreRepaint(true)
setFullScreenWindow(window)
の場合、意図した通りの動きにならない事が多い気がします。

321:デフォルトの名無しさん
07/01/06 00:50:47
IgnoreRepaintはフルスクリーンでBufferedStrategy使うの前提のものだからSwingコンポーネント使うならやめたほうがいいと思う

322:デフォルトの名無しさん
07/01/13 21:12:58
フルスクリーンでチャット機能つける場合の良い構成ってありますか?
日本語入力をどうしようというので早速つまづきます

323:デフォルトの名無しさん
07/01/13 23:35:27
それ普通にWindowsネイティブとかでもでる問題

ここはフルスクリーンをやめてウインドウの最大化をするべき
もちろん、装飾部分や常に手前に表示を指定すること

それらを指定すればタスクバーより手前に表示できる

324:デフォルトの名無しさん
07/01/14 00:11:08
なるほど。ではJLayeredPane+sync()+>>323で試してみます。
ありがとう。

325:デフォルトの名無しさん
07/01/17 03:37:37
グチだしこのスレでいいのかどうかもちと怪しいんだが、
Java2Dで描いた円ってなんであんなに汚いのかなぁ・・。
Ellipse2Dで真円描いても上下左右非対称なガタガタの円。
アンチエイリアシングかけないと見れたもんじゃない。
クラス名のごとく楕円しか描けないのだらうか。

326:デフォルトの名無しさん
07/01/17 04:38:51
Java6で直ってるはずだが。

327:325
07/01/17 20:15:42
>>326
比べてみたけど直ってないみたいだ。残念。


328:デフォルトの名無しさん
07/01/17 20:27:51
むむ、いつぞやのJavaOne Tokyoで直るって言ってたのにな…
(Sunの人じゃなかったけど)

329:デフォルトの名無しさん
07/01/17 20:37:26
>>325
URLリンク(bugs.sun.com)

一番最後の comment みると、改善はしてるけど完璧じゃないよって書いてある。

330:325
07/01/17 23:40:52
>>328-329
1.5と1.6ではまったく差はみられなかったけど、将来的には改善していく
つもりはあるみたいだからそれに期待することにします。



331:デフォルトの名無しさん
07/01/28 15:27:29
Windows Look&Feel で、デフォルトの JTextField だと IME の未確定文字につく
下線が見えないんだけど、これって俺だけ?

デフォルトだとフォントが MS UI Gothic Plain 12 になってるんだけど、
Monospaced Plain 12 に明示的に変えてやると下線も見えるようになった。

332:デフォルトの名無しさん
07/02/12 14:02:12
SwingでSWTのGridLayoutみたいなのを使いたいのですが、何処かにころがってませんかね?

また、その他使えそうなレイアウトマネージャあればURLキボンヌ

333:デフォルトの名無しさん
07/02/12 14:27:07
そのSWTのベースとなってるのはSwingというかAWTでのGridLayoutなんだが細かいところは異なる
今ならグループレイアウトが使い勝手もいいんでないかい?

334:デフォルトの名無しさん
07/02/12 15:57:17
GridBagLayoutでいいんじゃない?

335:デフォルトの名無しさん
07/02/13 10:31:47
GridBagLayout で殆どの用は足りる。

336:デフォルトの名無しさん
07/02/15 14:47:55
レイアウトマネージャの便利なとこは?

無効にして絶対値で指定したほうが楽そうじゃね?

337:デフォルトの名無しさん
07/02/15 15:01:49
固定サイズのアプリケーションならそれも選択肢に入る。
が、その場合でもレイアウトマネージャーに任せた方が楽なこと多数。

338:デフォルトの名無しさん
07/02/15 15:03:51
サイズ固定のアプリケーションしか作らないよな
プリンタで出力する気もないよな
モニタ解像度も知ったこっちゃないよな
はみ出たら横にスクロールさせる気満々だよな
リキッドレイアウトなんて聞いただけで反吐が出るよな

339:デフォルトの名無しさん
07/02/15 15:42:01
サイズ指定にしてもアブソリュートレイアウト使わないときっついぞ。
推奨サイズを使えばコンポーネントの位置関係を全自動でやってくれるし、可変サイズのフレームを絶対座標なんておわっとる。
グループレイアウトはベースラインであわせてくれたりするのがすごい便利。

まぁつかってもつかわなくてもかまわんが、何も考えずにフレームに対してsetSizeだけしなければOK。
それをするとWindowsXPと2000、Vistaとそれぞれ異なる描画結果になるので注意。

レイアウトマネージャ使っていてもDPIの違いで結構異なるプラットフォームで動かすのは大変だけどな。

340:デフォルトの名無しさん
07/02/22 15:31:56
Java Swing Hacks―今日から使える驚きのGUIプログラミング集

って本は良本ですか?

341:デフォルトの名無しさん
07/02/22 22:54:56
派手すぎて仕事用って感じじゃない。

けどいくつか役に立ちました。

342:デフォルトの名無しさん
07/02/23 05:17:51
オライリーのHacksシリーズ色が出てる本、手軽にクールなコンポーネント書きたい人向け。

所々既存コードに影響しないように考えられてる所も良いね。

早速、rhinoとgroovyから使う事を目的とした
Swingラッパーに一部採用させてもらいました。


343:デフォルトの名無しさん
07/02/23 13:18:46
Hacksシリーズのわりには内容は平凡
なぜか参考にもならないsoundのコードがはいっている
どうせいれるならちゃんとしたものを入れろと

344:デフォルトの名無しさん
07/02/24 04:44:35
まあ他のHacksシリーズを読んだら確かにそう思わなくもない。

345:デフォルトの名無しさん
07/02/27 23:56:30
mycomの記事見てJSR-296の「Swing Application Framework」を試してみた。
まぁなんつうか、モノはシンプルだね。
あとは、コンポーネントAの操作の結果を、コンポーネントBに、
Aの存在を意識させずに反映させる機能があればいいかな。
AからシングルトンなBeanを編集すると、イベントがBに飛んでそこで処理がおこる、みたいな。
こういうの自作してるんだけど、ひょっとしてjava.beans使えばできる?

346:デフォルトの名無しさん
07/02/28 00:06:55
>>345
PropertyChangeListener/Eventじゃないのかね。


347:デフォルトの名無しさん
07/02/28 02:03:49
>>345
導入前と導入後でソースが見やすくなるわけでもないし機能もかわらんからな
ただTaskとSwingWorkerは統一したほうがいいよな

348:デフォルトの名無しさん
07/02/28 08:22:12
> button.setAction(actionMap.get("onClick"));
とかSwing信者から見ると気持ち悪いんだけど。
サーバサイドで慣らされてる人は平気なのかな。

349:デフォルトの名無しさん
07/02/28 11:19:14
いやー平気じゃないと思うぞ
ロジック部分の呼び出しとかなら祖結合でいいけど
各種イベントでコンポーネントの状態を変更しないといけない密結合ではクラス分離して書くということはまずできないし

あのフレームワークの存在意義がわからないとはずっと前からいわれてきたし
startupとかはまぁイベントディスパッチスレッドを意識させないという意味があるのだろうけど
イベントディスパッチスレッドを意識してないと並列動作できないしな

350:デフォルトの名無しさん
07/02/28 13:10:09
そうだね。Webのフレームワークみたいな役割を期待するとすると、
ロジックとGUIの分離、つまり同じアプリでSwing実装とSWT実装と
Struts実装をやりたい場合とか、そういうときに使えるものを
期待してしまう。

351:デフォルトの名無しさん
07/03/02 23:00:01
JDK6のSwingのWindows LaF (Vista)で、JTableのヘッダの高さが通常の2倍ぐらいあるのですが、
これはなんとかならんもんでしょうか。

352:デフォルトの名無しさん
07/03/03 00:24:29
通常の3倍じゃなくて良かったな

353:デフォルトの名無しさん
07/03/08 16:43:26
>>352
オレが思いついてもあえて書かなかったことを・・・

354:デフォルトの名無しさん
07/03/09 12:48:50
機体性能が3倍あるわけじゃないんだぜ?

355:デフォルトの名無しさん
07/03/13 10:35:26
ザク、、、いや、何でもない。

356:デフォルトの名無しさん
07/03/15 21:09:44
SE6になってjavax.swing.undoのドキュメントの一部が丁寧になって少しましになってる。

357:デフォルトの名無しさん
07/03/15 23:02:04
JDK6の日本語マニュアルでたのか?

358:デフォルトの名無しさん
07/03/15 23:15:15
作業中の物ならここに。
URLリンク(jdk-api-ja.dev.java.net)

359:デフォルトの名無しさん
07/03/15 23:54:52
URLリンク(java.sun.com)

360:デフォルトの名無しさん
07/03/16 03:24:01
>>359
新機能とかまず概要の日本語がないってことはいまだ未完成ってことね

361:デフォルトの名無しさん
07/03/19 15:45:38
既出かもしれないけど、こんなもの見つけた。
URLリンク(journal.mycom.co.jp)

手動でリスナ書く手間から開放されるというのはかなり幸せかも。

362:デフォルトの名無しさん
07/03/19 17:02:51
そいつを使うと、コード書かなくてよくなる
URLリンク(www.netbeans.org)

363:デフォルトの名無しさん
07/03/19 17:12:57
>>361
Beans Binding って Cocoa Binding みたいなもの?

364:デフォルトの名無しさん
07/03/19 17:19:38
似てるね。

365:デフォルトの名無しさん
07/04/02 17:44:32
YAGI3

366:デフォルトの名無しさん
07/04/03 21:26:15
apolloってJWSを食ってしまいそうだな

367:デフォルトの名無しさん
07/04/03 22:16:28
それはないだろ。
食われるほどのJWSの裾野はないし、今JWSでやってるものをおきかえれるほどの力はFlashにはない。

368:デフォルトの名無しさん
07/04/04 01:19:08
>>366
むしろJavaアプリの中でApolloのWeb連携機能が使いたいなぁ

369:デフォルトの名無しさん
07/04/07 16:00:15
SwingでGoogleCalendarみたいなUIをつくることって出来るんでしょうか??
ためしに作ってみようかと思ったんですが、Swingに余り詳しくないのでそもそもどういう風に作れば良いのかわからず悩み中です。

370:デフォルトの名無しさん
07/04/07 16:14:18
ブラウザで出来る程度のことはすべて可能
Swingに詳しいかどうかってのも関係ないな


371:デフォルトの名無しさん
07/04/07 17:22:07
JComboBoxについて質問です。

項目によって、色・フォント・背景色などを
分けたいのですができますか?
もしできるなら教えてください。
お願いします。

372:デフォルトの名無しさん
07/04/07 18:50:31
JComboBox ListCellRendererでググればやりたいことは見つかると思う

373:369
07/04/07 20:02:11
>>370
どうもです。GUIはweb系しか作ったことがなかったんで悩んでました。
HTMLに慣れた身にはSwingは面倒くさくてなかなか作る気が起きませんね・・・。
カレンダー部分は線を描画して書くことになるのかなぁ。

374:デフォルトの名無しさん
07/04/07 20:53:24
全部自前で描画してもいいし
適当にラベルをならべる程度でもいいし
お好きなように

375:371
07/04/07 21:37:25
>>372
有難うございました。
やりたい事ができました。

376:デフォルトの名無しさん
07/04/08 00:33:25
>>373
やる気がなければ何もできませんな
何で作るのよ

377:デフォルトの名無しさん
07/04/08 00:38:41
本当はWEBアプリのほうが面倒なんだけどな
ダイナミックに動かすにはイベントは別言語を使わなければならないし、
環境依存性が高い

そして通信部分も再読み込みとか2度押し防止とかいろいろと考慮する必要有、と

378:デフォルトの名無しさん
07/04/08 02:30:49
> 373
JLabelにHTML貼り付けでOK

379:デフォルトの名無しさん
07/04/08 23:38:16
>>378
せめてJEditorPaneだと思ったらw

380:デフォルトの名無しさん
07/04/10 22:05:12
swingで作ったGUIアプリを
常に前面に表示させたいんですが、できますか?
もしできるなら教えてください。
お願いします。

381:デフォルトの名無しさん
07/04/10 22:11:17
>>380
1.5 以降なら java.awt.Window#setAlwaysOnTop(boolean) を使う。

それ以前なら標準では無理。
例えば Windows なら JNI経由で java.awt.Window の HWND 得て、SetWindowPos すればできるけど。

382:デフォルトの名無しさん
07/04/10 22:20:42
>>380
できました。
素早い回答ありがとうございました。

383:382
07/04/10 22:21:45
すいません、僕は>>380です。
>>381さん有難うございました。

384:デフォルトの名無しさん
07/04/13 00:02:44
すべてのコンポーネントのセットをJPanelをExtendsしたオリジナルなコンポーネントにしておいて
JFrameのレイアウトに置いていく作りにしてるんだけど、これでイケテル?

385:デフォルトの名無しさん
07/04/13 00:17:50
いろんな意味で意味がわかんない

386:384じ
07/04/13 00:30:50
自分でも読んでて意味わかんないやw
巧く説明できないのでおやすみなさい

387:デフォルトの名無しさん
07/04/13 00:31:04
URLリンク(www.tohoho-web.com)
これの一番下の事を言っているのでは

388:デフォルトの名無しさん
07/04/13 02:46:21
>>384
うーん、単にJPanelを置いてその中にコンポーネント配置していけばいいんじゃないのかな?

389:デフォルトの名無しさん
07/04/13 03:07:27
>>384が言いたいのは、
public class HogePanel extends JPanel{...} として作っておけば、
JFrame, JInternalFrame, JApplet, JTabbedPane などに乗っけるだけで
いろいろ使える、って意味では?
再利用性を高めるやり方としては間違ってないと思う。
再利用の必要がないなら無駄だけど、個人的にこういう作りは好きだ。

390:デフォルトの名無しさん
07/04/13 03:27:30
>>389
つまりJColorChooserみたいな複合ウィジェットを作って再利用ってだけの話なのかね?
JPanelじゃなくてJComponentでいい気がするけど…

391:384
07/04/13 22:13:53
>>389-390
そのとおりです!
気持ちが伝わってなんか嬉しいっす。
JComponentですか。思いつきませんでした。どっちがメリットあるかなぁ。

392:デフォルトの名無しさん
07/04/13 23:03:48
JPanelのソース見てみ。JComponentほとんどそのままだ。

393:デフォルトの名無しさん
07/04/14 15:46:11
複合ウィジェットならJPanelが自然でしょ。

394:デフォルトの名無しさん
07/04/14 18:29:58
>>393
awt では Panel 使ったけどが swing で JComponent が Container に
なったから JPanel にする必要は全くなくなったのでは…?

395:デフォルトの名無しさん
07/04/14 18:32:06
>>393
どっからそんな情報が沸いてくるん?

396:デフォルトの名無しさん
07/04/14 18:35:58
>>394
JComponentはObjectのようなSwingコンポーネントのルートクラスだから
継承するならいいけどぽとぺたやるならJPanelで

397:デフォルトの名無しさん
07/04/14 20:44:27
>>396
具体的にJPanelのどの部分がぽとぺたに向いているのでしょうか?
あるいは JComponent のどの部分が向いてないのでしょう?

398:デフォルトの名無しさん
07/04/14 20:58:04
背景が透明か不透明かが違いじゃないん?

399:デフォルトの名無しさん
07/04/14 21:03:47
JComponentはこっそりabstractクラスなので、そのまま載せようとして
あれ? と思ったことはあるが、どうせ継承して使うだろうし、あえて
JPanelでなければならないことはなさそうだな。

ただ、ポトペタだとソースレベルで継承して使うことにはおそらくならな
いだろうから、JPanelでないと駄目かも。



400:デフォルトの名無しさん
07/04/14 21:18:23
思想的にJComponent使うなら新しいコンポネント作るくらいの意味合いだな
JPanelを使った場合、JPanelの機能変更に引きずられる可能性がある
それを望むのであればJPanelの上にまとめればよい
独自コンポネントでJPanelに影響を受け手欲しくなければJComponent

401:デフォルトの名無しさん
07/05/12 15:54:29
JFrameの外枠とかメニューバーのサイズを変える事はできるのでしょうか?
できないなら正確なサイズを知る事はできるのでしょうか?

402:デフォルトの名無しさん
07/05/12 16:35:13
つ Insets

403:デフォルトの名無しさん
07/05/12 17:52:56
ありがとうございます
JFrameの方はなんとなくわかったのですが
メニューバーの方はわからないのでもう少しヒントをくれるとありがたいです

404:デフォルトの名無しさん
07/05/12 18:11:44
Dimension size = menuBar.getPreferredSize();
menuBar.setPreferredSize(new Dimension(size.width, 200));


405:デフォルトの名無しさん
07/05/12 18:35:47
ありがとうござました

406:デフォルトの名無しさん
07/05/23 23:57:55
JFrame上のKeyEventを常に取得したいと思いまして、次のようなクラスを

class testKeyEv extends JComponent {
  public testKeyEv(){
    enableEvents(AWTEvent.KEY_EVENT_MASK);
    addKeyListener(new stateCheckKeyHandler());
    setFocusable(true);
  }
}

setGlassPane()でセットして実行すると、始めはちゃんとキーイベントを取得してくれるのですが、
マウスでほかのボタンをクリックしたりすると二度とキーイベントを取得してくれません。

ちなみに stateCheckKeyHandlerはKeyAdapterをextendsしたのもです。

マウスイベントはほかのコンポーネントにそのまま渡して、KeyEventだけを常に取得し続けるには
どうすればいいでしょうか?

407:デフォルトの名無しさん
07/05/24 00:13:43
そのフォーカスがあたったコンポーネントでは通常の動作はしていいの?

408:デフォルトの名無しさん
07/05/24 01:57:16
>>406
最初から中のコンポーネントにフォーカス当ててそっちでキーイベント拾いましょう
# 関係ないけどリスナーを登録してイベントとるなら enableEvents() は必要ないんじゃなかったっけ?

409:デフォルトの名無しさん
07/05/25 19:47:41
JTreeのノードをDnDで移動できるようにしたんだけど、その関係で
ツリーのノードによってノード毎に違うテキストのツールチップを表示しなきゃいけないんだけど、
この方法はJTreeのgetTooltipText()でノード別のテキスト返すように
オーバーライドするとして、ツールチップテキストを設定するタイミングはどのぶぶん?
カスタムセルレンダラ使ってるんでセルレンダラがレンダリングコンポーネント返す時にそのコンポーネントに
テキスト設定しようと思ってるんだけど、それで良いかな?

ググって漁ってみたんだけど他に思いつかない。アプローチが間違ってんのかすらも分からない。

教えてエロいひと。


410:デフォルトの名無しさん
07/05/25 21:05:28
レンダラのタイミングだとレンダリングし終わるとその後ずっと呼ばれないし、
スクロールとかウインドウの重なり具合とか最大縮小するだけでもよばれるけどそのタイミングでいいの?

411:デフォルトの名無しさん
07/05/25 21:13:50
ヒントもあたえたほうがいいか
JComponentのgetToolTipTextをオーバーライドすればいい

412:デフォルトの名無しさん
07/05/25 21:16:13
「普通に」がぬけてた・・・
何のための引数かと

413:デフォルトの名無しさん
07/05/25 21:50:21
TextField を f1,f2,f3,f4,f5,f6,f7

と言う名で作りました。
あらかじめNetBeansで個数分貼り付けちゃいました。

それぞれにある一定の処理をしたいのですが。
forなど繰り返し処理のなかで出来るようにしたいです。

JTextFieldの配列などに繋げれば出来そうですが、
それでは最初に全部個数分繋げる作業が必要になるわけです。
JTextFieldの数が大量になった場合大変ですから。

なんとか名前の数字を変更してアクセスする方法ないでしょうか。
よろしくお願いします。

414:デフォルトの名無しさん
07/05/25 22:41:50
JTextFieldだけを乗せるJPanel(というかContainer)を作って、getComponentsを呼び出せばいいかもね

415:デフォルトの名無しさん
07/05/26 01:28:30
メンバー変数としてf1,f2,...があるのならリフレクションで取れるよ。
ローカル変数だと出来ないけど。


416:デフォルトの名無しさん
07/05/26 01:38:03
>>413
f1,f2,f3,f4,f5,f6,f7 は、とりあえず そのままにしといて、
配列必要になったら new JTextField[]{f1,f2,f3,f4,f5,f6,f7} して配列作るとかすれば?

417:デフォルトの名無しさん
07/05/26 02:37:48
>>414さん、>>415さん、>>416さん
ありがさうございました。(^v^)

418:デフォルトの名無しさん
07/05/27 04:38:44
>>415
そんな事はできてもする設計にしてはいけない・・・・
>>417
>>414案が妥当だと思った。が、別に特別にPanelを用意せずにnameプロパティに
何か分かりやすいのを振っておいてコンポネントをより分ければいいと思う。

419:デフォルトの名無しさん
07/05/27 07:37:22
>>410
ありがと、できたよ。ソースコード見てみたけどJTree#getTooltipText(MouseEvent)が
回りくどい実装してたんだね。

420:デフォルトの名無しさん
07/05/27 13:55:22
>>418
> そんな事はできてもする設計にしてはいけない

同じようなことをたくさんやるときに、利用するのはとても効率的だと思うよ。
リフレクション使って配列に格納するメソッドを用意しておいて、実際の利用は配列を使うというのがいいかと。
nameプロパティ使うのと、本質的な差はあまりないと思う。

421:デフォルトの名無しさん
07/05/27 16:29:51
リフレクションってのは、フレームワークレベルで使うのはいいと思うが
一般のコードには入れない方がいいと思うんだ・・・・
だから>>420 の利用する部分との分離がいいな

422:デフォルトの名無しさん
07/05/28 11:45:44
>>421
リフレクションを使うってことは,せっかく(記述が面倒な)Javaを使うことで得られる
強力なコンパイラの型チェックをスルーしてアクセスするわけだからライブラリや
フレームワークにしてそれなりにテストした上で使うのがいい使い方なんだろうね…
# ってかリフレクションを無駄に使ってるJavaアプリケーション見るとそれならもっと動的な言語使えよとか思う…

423:デフォルトの名無しさん
07/05/28 11:51:13
プライベートなものも自由に触れるからな
アプリ側で出てきたときにはそれはもはや実装のバグとよんでもよいかと

424:デフォルトの名無しさん
07/05/28 12:01:45
リフレクションって、どっちかっつーとコンストラクタ貰ってきて
インスタンス生成みたいな用途が多いと思ってたんだけど、

アクセス制限を回避するなんてキチガイじみた目的がメインで使う人もいるのか……

425:デフォルトの名無しさん
07/05/28 12:13:45
>>424
使ってないんじゃね? 思いつく用途がそれだけだっただけで。

426:デフォルトの名無しさん
07/05/28 12:23:08
>>424
ライブラリやフレームワークで独自のシリアライズとかする場合には
private なインスタンス変数にアクセスする用途に使われる
まぁメインの用途ではないよね.普通の用途なら Bean の getter, setter呼ぶのに使うとか?

427:デフォルトの名無しさん
07/05/28 13:04:55
>>424
DIとかフレームワーク側は普通に使うよ

428:デフォルトの名無しさん
07/05/28 14:27:56
ここで反論する理由がひとつでもある人は、使ってもいいと思う。
宣言をprivateにしておいて、値は特別な仕組みでリフレクション使って設定するようにして、通常のコードからは値が変更できないようにしておくとか。

429:デフォルトの名無しさん
07/05/28 14:29:52
フレームワークで使うのは誰も否定してないんじゃね?

430:デフォルトの名無しさん
07/05/28 14:38:56
ちょっとスレから外れてきた。 Java 低速GUI ネタよろ…

431:デフォルトの名無しさん
07/05/28 14:57:08
今回の件に関しては reflection 使わずに
interface 定義してどうのこうのの方がよろしくね?

add した時に add された側(コンテナじゃなくてコンポーネント)で
呼び出されるメソッド(イベント)とかって無いんだろうか。

432:デフォルトの名無しさん
07/05/28 15:46:09
>>431
HierarchyListener#hierarchyChanged(HierarchyEvent)
イベント内容で判断しないといけないけど。

433:デフォルトの名無しさん
07/05/28 16:42:08
>>424
イディオムになるくらいよく出てくるならそこだけ纏めても別にかまわないと思うが->変なリフレクション
というか纏めてくれないとぬっころすって事にならんか?


434:デフォルトの名無しさん
07/05/28 21:58:32
こんな感じのメソッドを定義しておけばいいんだよね。
static <T> List<T> getInstances(Object parent, Class<T>, String prefix)
でこんな感じで使えるようにする。
List<JTextField> fields = getInstances(window, JTextField, "f");

435:デフォルトの名無しさん
07/05/28 23:55:10
>>434
設計からやり直した方がよくないか?
テキストフィールドのコンテナクラスを自作するとか。その程度の手間で解決できそうじゃない?

436:デフォルトの名無しさん
07/05/29 00:08:13
ポトペタで同じような部品を並べていくとその手の変数名が
数値部分だけ違うインスタンス変数が並ぶんだよな。
手で作れば真っ先に配列か何かにするところなんだが。


437:デフォルトの名無しさん
07/05/29 01:56:41
ポトペタで配列作ればいいじゃんw

438:デフォルトの名無しさん
07/05/29 04:42:38
>>435
配置の自由度が低すぎるので採用できる場面は少なそう。
いまさら手コーディングでGUIも作れんし。
VEなりNetBeansなりが、コンポーネント配列に対応してくれればいいのだけど。

439:デフォルトの名無しさん
07/05/29 06:03:52
>>438
ああ、ようやっと変なリフレクションが欲しい場合の文脈が読めた。
GUIビルダーつかってデザインした複数フィールドの時はたしかに欲しいかも。

普段は手で作ってるからそんなに欲しいと思わないけど忙しい時だと欲しいかもしらん。


440:デフォルトの名無しさん
07/05/29 08:11:52
NeXTやOSXにはあるね

441:デフォルトの名無しさん
07/05/29 10:45:31
リフレクションとこのぽとぺたとは関係ないぞ

442:デフォルトの名無しさん
07/05/29 11:15:12
>>483
いや、そっちのコンテナじゃなくてjavaでいうならコレクションみたいな感じ。
そのコレクションをコンポーネント間で共有するか誰か管理クラスに持たせて問い合わせるようにすれば
コレクションそのものも、フィールドへもアクセスの自由度は確保できる。
外の様子知るためだけにリフレクションは流石にアプリケーションソフトとしてはまずい。

てか、javaでデスクトップアプリ作っててコレクション使う場合が俺には
クラスの動的ロード+コンストラクタorファクトリメソッド呼び出ししか思いつかん。
webフレームワークとかjavascriptならね。

443:デフォルトの名無しさん
07/05/29 11:27:18
デスクトップアプリでコレクション???

444:デフォルトの名無しさん
07/05/29 14:00:09
>>442
日本語でお・ね・が・い♪

445:デフォルトの名無しさん
07/05/29 17:04:37
JTextField から派生して
初期化時にインスタンス管理クラス呼び出して
自分を登録するようなクラス作成すれば
ポトペタでも管理出来る。けどキモいな。

446:デフォルトの名無しさん
07/05/29 18:29:11
ContainerListenerを使って、JTextFieldが追加されたときにArrayList<JTextField>に追加していくって手もあるな

447:デフォルトの名無しさん
07/05/30 02:06:07
それだと、結局リフレクションが一番手間が少ない。

448:デフォルトの名無しさん
07/05/30 03:30:01
結論はポトペタ使わずに手で書く、です…

449:デフォルトの名無しさん
07/05/30 11:23:39
>>446が一番エレガントで無難だな

450:デフォルトの名無しさん
07/05/30 12:24:33
それだとJTextFieldの振り分けが必要になるんじゃない?
そのための名前をどうするか。

451:デフォルトの名無しさん
07/05/30 12:34:39
JTextFieldを継承したコンポーネントを用意すればいいだけだから問題ないだろ
もちろん変数はJTextFieldのままでいい


452:デフォルトの名無しさん
07/05/30 12:47:07
>>446
間にJPanel1枚挟んでレイアウトするケースもあるし、
そう単純には行かないんじゃない?

453:デフォルトの名無しさん
07/05/30 13:44:12
>>448
ララァは賢いな。

454:デフォルトの名無しさん
07/05/30 15:49:12
シャアぁぁぁぁぁぁぁっぁああああ!!

455:デフォルトの名無しさん
07/05/30 18:08:48
ざれごとはやめろよ

456:デフォルトの名無しさん
07/05/31 03:29:09
>>455
じゃまです。

457:デフォルトの名無しさん
07/05/31 04:30:18
>>451
わざわざ継承使ってコンポーネント作るなら、他に特別な仕組みがいらないリフレクションの方がいいと思うよ。
普通にGUIエディタが使えるし。
順番の指定とかはどうすんの?

458:457
07/05/31 04:36:09
継承使うというのは、影響範囲がでかい。
単にコンポーネント配列のために継承使うのはあまりいいとは思えんのだが。
GUIエディタ使いたい場合だと、「変数名を適切に指定して、あるメソッドに食わせたら配列ができる」ってのが一番手軽で影響範囲が少ないと思うのだが。

ここでのリフレクション否定の意見って、「リフレクションだからリフレクションはダメ」という理由ばかりな気がする。

459:デフォルトの名無しさん
07/05/31 04:38:04
>>456
そういうセリフあったっけ?

460:デフォルトの名無しさん
07/05/31 05:35:58
クリリンのことか?

461:デフォルトの名無しさん
07/05/31 09:38:42
>>459
シーンは違うがこれだな
URLリンク(www.geocities.co.jp)

462:デフォルトの名無しさん
07/05/31 10:02:26
ああ、あったあった。

463:デフォルトの名無しさん
07/05/31 11:43:19
>>457
GUIエディタってのがNetBeansなら継承やマーカーインターフェースは普通につけれるし
順番の制御をしたいのならなおさらかと

464:デフォルトの名無しさん
07/06/01 11:37:19
どっちでもやりたいようにやればいいと言うことで。

順番制御とか考えなきゃならんなら
最初から手で書けよ感がするけど。

465:デフォルトの名無しさん
07/06/01 21:38:57
JFrame に Java3D の Canvas3D を配置すると、
JMenuBar で作成したメニューが Canvas3D の背後に隠れてしまうんですが、
解決できないものでしょうか。

466:デフォルトの名無しさん
07/06/01 21:45:35
Canvas3D ってJComponents継承してる?

467:465
07/06/01 21:48:55
継承していないです。↓こんなんです。
java.lang.Object
 extended by java.awt.Component
  extended by java.awt.Canvas
   extended by javax.media.j3d.Canvas3D

468:デフォルトの名無しさん
07/06/01 21:49:57
>>465
JPopupMenu#setLightWeightPopupEnabled(boolean) に false渡してもだめ?

469:465
07/06/01 21:53:18
JMenuBar, JMenu, JMenuItem しか使っていないんですけど。。。

470:デフォルトの名無しさん
07/06/01 21:58:08
>>469
URLリンク(java.sun.com)
> メニューというのは実質的には JPopupMenu が割り当てられたボタンのことです。

JMenu#getPopupMenu()

471:465
07/06/01 21:58:37
はっ!これでうまくいったー!ありがとー。
JMenu fileMenu = new JMenu("ファイル");
fileMenu.getPopupMenu().setLightWeightPopupEnabled(false);


472:デフォルトの名無しさん
07/06/01 22:40:36
AWTの[コンポーネントと混ぜる時点でどうしようもないんだよな
JOGLだったらGLJPanelで問題なしだが

473:デフォルトの名無しさん
07/06/02 10:24:38
Java3D 1.5だとJCanvas3Dがある。


474:デフォルトの名無しさん
07/06/02 10:59:08
Java3D1.5ってOpenGL1.5要求するらしいから結構きついな

475:デフォルトの名無しさん
07/06/02 11:08:55
まともに対応しようとしないintelうぜぇとか言ってみるテスト

476:デフォルトの名無しさん
07/06/02 14:40:13
Intelのチップセット内蔵グラフィックスだとJava 2DのOpenGLアクセラレートが使えないのは辛いです。。。
Intelのドライバの問題で対応できないのか、対応しないだけなのか分からないけど。。。

477:デフォルトの名無しさん
07/06/02 17:15:58
Java2DのOpenGLアクセラレーションは有効にしても描画が崩れるだけなので使い道がねぇ

478:デフォルトの名無しさん
07/06/11 11:25:53
JFileChooserでダイアログを出すと

URLリンク(2sen.dip.jp:81)

のようにフォントの大部分が太字になってしまいます。

試しに
JFileChooser chooser = new JFileChooser();
chooser.setFont(new Font("Dialog", Font.PLAIN, 12));
のようにしてもダメでした。

どうすればこの太字をFont.PLAINにできるのでしょうか?
識者の方々、どうかアドバイスをお願いいたします。

OS:Windows2000、XP
JDK:1.6.0、1.6.0_01
でそれぞれ試してみました。

479:デフォルトの名無しさん
07/06/11 12:05:15
すみません、上げます

480:デフォルトの名無しさん
07/06/11 13:15:32
URLリンク(e-class.center.yuge.ac.jp)

481:デフォルトの名無しさん
07/06/11 13:16:55
URLリンク(java.sun.com)
URLリンク(java.sun.com)


482:デフォルトの名無しさん
07/06/11 14:05:12
>>478
UIManager.setLookAndFeel()


483:デフォルトの名無しさん
07/06/11 14:23:31
>>478

URLリンク(amateras.sourceforge.jp)

フォントを指定して起動する
SwingのデフォルトのLook & FeelであるMetalはメニュー等のフォントがBoldでいまいち見た目がよくありません(JDK1.3までは普通だったのですが…)。JavaVMに起動オプションを与えることで、このフォントを変更することができます。

java -Dswing.plaf.metal.controlFont=Dialog-12 alpha.AppMain

また、JDK1.5ではMetalLookAndFeelでPLAINなフォントを使用するために以下のオプションが利用可能です。

-Dswing.boldMetal=false

コマンドラインオプションではなく、Javaコード中で設定する場合には以下のようにします。

UIManager.put("swing.boldMetal", Boolean.FALSE);




484:478
07/06/11 15:58:38
>>483
おおお、ベストアンサーでした。
ありがとうございます!
これで他のコンポーネントもsetFont(new Font("Dialog", Font.PLAIN, 12))をしなくて済みました。

他にもレスをくださった皆様方ありがとうございました。

485:デフォルトの名無しさん
07/06/11 16:16:40
これって何でボールドに変更したのか謎だよなぁ…

486:デフォルトの名無しさん
07/06/11 17:23:13
MigLayout使ってる人って居る?
シンプルで結構良さげだったのだけど。

487:デフォルトの名無しさん
07/06/11 17:38:11
まず>>486が使ってみてメリット、デメリットを押さえた感想を教えてくれ

488:デフォルトの名無しさん
07/06/11 21:52:58
>>484
やってること同じかもしれないけど
URLリンク(terai.xrea.jp)

private void updateFont(final Font font) {
EventQueue.invokeLater(new Runnable() {
public void run() {
FontUIResource fontUIResource = new FontUIResource(font);
UIDefaults defaultTable = UIManager.getLookAndFeelDefaults();
for(Object o: defaultTable.keySet()) {
if(o.toString().toLowerCase().endsWith("font")) {
UIManager.put(o, fontUIResource);
}
}
//SwingUtilities.updateComponentTreeUI(MainPanel.this);
recursiveUpdateUI(MainPanel.this);
frame.pack();
}
});
}
private void recursiveUpdateUI(JComponent p) {
for(Component c: p.getComponents()) {
if(c instanceof JToolBar) {
continue;
}else if(c instanceof JComponent) {
JComponent jc = (JComponent)c;
jc.updateUI();
if(jc.getComponentCount()>0) recursiveUpdateUI(jc);
}
}
}


489:デフォルトの名無しさん
07/06/11 22:22:00
>>485
英字さえ見栄えがよけりゃいいって感じかと

490:デフォルトの名無しさん
07/06/12 02:50:08
スレ違いかもしれないが、質問。
Swingでアプリを作りたいんです、得意先台帳に送り状印刷機能がついたようなのなんですが。
Accessみたいにプリンタ(ドットインパクト)の指定と用紙サイズ(ヤマトだと15*4 1/2インチ)を指定して、
ボタン一発で印刷ってできるのでしょうか?
詳しい方教えてください。
よろしくお願いします。

491:デフォルトの名無しさん
07/06/12 03:48:24
それを自分で作るんだろうが。
javaでドラクエ作れますか?て聞いてるのとかわらんな。
最近javaスレでこの流れ多いな。

492:デフォルトの名無しさん
07/06/12 04:37:40
POIでいけるんじゃね?

493:デフォルトの名無しさん
07/06/12 08:47:19
>>490
PrintRequestAttributeSet

494:デフォルトの名無しさん
07/06/12 10:26:53
>>490
プリンタドライバ経由ならできるよ。
javax.printパッケージを見るといい。

495:デフォルトの名無しさん
07/06/12 11:38:35
佐川やヤマトの送り状とか契約書とかドットインパクトでの印刷はよくやるな
業務系だと連帳は基本だしな

ただ、Swingとあまり関係のないところだな
ネイティブのプリンタのプロパティ使いたい場合awtのダイアログを使ったほうがいい場合もあったような

あとitextあたりでPDFを生成して印刷はAdobeReaderに任せるという方法もある

ヤマトならcsvとかXML作ってヤマトが無料配布している送り状印刷ソフト使う手もある
備考欄とかイマイチ文字数が足りないとかあるけど、細かいカスタマイズがしたいとかなら
予算次第(&個数)だがヤマトシステムに話をしたほうがいいかも

496:デフォルトの名無しさん
07/06/12 12:32:14
毎月1000部くらい刷るって言ったらソフト作ってくれるのかな


497:デフォルトの名無しさん
07/06/12 12:54:31
>>496
作ってくれるかどうかはお金次第でしょ。

498:デフォルトの名無しさん
07/06/12 13:35:48
あとはシステムだけじゃなくそこの担当地区の営業さんの力次第ってのもある
地区によっては厳しいところもあるからそういうところはプッシュしてくれる

でも1000部程度で乗せるものによっては自前で印刷したほうがいいかも
長期間にわたって定期的に発送などならちゃんと契約すれば自前で印刷とか梱包もやる必要はないよ
資材とか送るとヤマトのほうで全部やってくれる

1000枚の送り状番号の管理とか印s夏して箱詰めとかが面倒だと思ったら
まずは近くの営業の人(ドライバーとか)に話をしてみるといいかと

499:デフォルトの名無しさん
07/06/12 13:36:03
>>497
簡単なんだから自分で作れよ。

500:デフォルトの名無しさん
07/06/12 23:59:02
皆さん(>491除く)、色々と有難う。

PDFを使うやり方や、ダイアログを使うやり方だと、
ボタン一発ではないので面倒くさがられてしまいます。
現在の使いかただと、キー入力のスピードに画面の表示が追いつかないくらいなので。

>>493,494氏にお教え頂いたのを勉強してみようと思います。

501:デフォルトの名無しさん
07/06/13 00:25:39
PDFを使う利点はプレビューできるってとこだな
Accessとかで手軽にプレビュー作れてたシステムの置き換えに使うといい
あとダイアログはだす、ださないだけの違いだからどうにでも

現在の使い方だとキー入力に画面が追いつかないってのが意味不明

502:デフォルトの名無しさん
07/06/13 00:31:46
javax.printだと、Graphicsに書き込むことには違いないから、JComponentのpaintComponentsからも同じ処理呼び出せばプレビュー自体は比較的簡単だよ。
標準で持ってて欲しいとも思うが。

503:デフォルトの名無しさん
07/06/13 01:56:40
PDFを使う利点は偽造されにくいっていうのも
どこかのサイトに書いてあったけど本当?

504:デフォルトの名無しさん
07/06/13 02:52:14
印刷の途中仮定という意味でなら、PDFなんて中間形式使わずに直接印刷したほうが偽造されにくい。

505:デフォルトの名無しさん
07/06/13 08:43:41
xsl-foのこともたまにで良いので思い出してあげてください。
まさに組版並の印刷用途向け中間形式なんだが。
まあ、まともにサポートしてるライブラリは商用ライセンスだが。
xsl-foをjava2dにさえ描画できればあとはどうにでもなる。


てか、○○さん以外ありがとう
とか言ってる奴たまにいるけど馬鹿かこいつら?

506:デフォルトの名無しさん
07/06/13 09:46:26
かわいそうな人はスルーした方がお互いのため。

507:デフォルトの名無しさん
07/06/13 10:04:45
JPopupMenu#show を呼ぶと、デフォルトで、最初のメニュー項目が
選択されてしまうのですが、これを選択されないようにすることはできますか?

508:478
07/06/13 10:33:04
>>488
おお、情報提供ありがとうございます。
再帰的にコンポーネントをゲットしてフォントを変えていくんですね。
参考になります。

509:デフォルトの名無しさん
07/06/17 23:55:36
すいません、swingで
javax.swing.JOptionPane.showMessageDialog(null, "hello");
で helloと表示されるダイアログが表示されるのですが、
このhelloのフォントってどうやって指定するのでしょうか?

リファレンスみたのですが、どうもそのような設定項目がなくて…



510:デフォルトの名無しさん
07/06/18 00:12:28
一応出来るけど、OSがメッセージだすように環境依存ってことになるから
将来のバージョンで動作が保障されないとかそういうことになってもいいのかい?

カスタマイズしたダイアログがほしいなら自前で作成すべき

あと最初の引数をnullにする場合なんてありえんと思う

511:デフォルトの名無しさん
07/06/18 00:30:00
>>510
コマンドラインから出したり。

512:デフォルトの名無しさん
07/06/18 10:05:59
>>509
javax.swing.JOptionPane.showMessageDialog(null, "<html><font size=20 face=\"MS 明朝\">hello</font></html>");

513:デフォルトの名無しさん
07/06/18 13:40:36
>>509
LookAndFeel

514:デフォルトの名無しさん
07/06/18 14:53:27
VB.NET C# 使いなんだがマルチプラットフォームに興味があるのでJava使ってみたいんだけど・・・・気になる点が2つほど

1.
LinuxとWindowsで基本的なコントロール(テキストボックスとかリストビューとかグリッド)使ってDBのデータIOを行うアプリを作りたいんだけど
LinuxとWindowsは意識せずにまったく同じソースでいいの?
それともVMごとにコンパイルオプションを指定するような感じになるの?

2.
.NETと比べてUIのモッサリ感はどう?
.NETのモッサリ感は我慢できるレベルだという定義で
内部処理の高速性は気にしないものとします。

515:デフォルトの名無しさん
07/06/18 15:20:17
>>514
1. 同じソースで同じバイナリ(クラスファイルだけど)でよい
2. 起動はモッサリだが動けばUIの速度は普通(昔はモッサリだったけど最近はよくなってきた)

516:デフォルトの名無しさん
07/06/18 15:23:55
>>514
SwingはJava5 Java6 など新しいものの使用をすすめる。
WinFormとどっこいくらいには快適になってる。

517:デフォルトの名無しさん
07/06/18 16:04:38
>>515
>>516
レスサンクス

なるほど 話の通り完全に同じソースでいけるわけなんだ
やっぱ便利そうだなぁ
C++でマルチプラットフォーム用の書いてたときはDefine切りまくりで
頭弱いから途中で頭がこんがらがってたしw

モッサリ感は現状最新のものを使って進めていけば.NETと同じレベルになりそうだからその方向でやってみようかなと
本当ははドトネト選ぶ時にJAVAにしようかな?と迷ったんだけど重いって話を腐るほど聞いてたんでドトネトにした
実際使ってみたらドトネトも思ったよりもモッサリで・・・・新しいソフト作る時はJAVAも視野に入れてもいいかもと思いだした

どうもこのスレの感じからすると普通に問題なさそうだからちょっと簡単なソフトから使ってみることにするよ

518:デフォルトの名無しさん
07/06/18 16:24:28
もっさり具合はアプリによるのでは?
.NETでもそうだけど、メモリは食うね。HDDとメモリが速ければ大丈夫。キャッシュの量にも大きく左右される。
Pentium4系だとJavaの速度は遅めでAthlon64やPentiumM系列はあからさまに速い。

1.4.1以降はGUIの描画にたとえばWindowsだとDirectDrawを使ったりハードウェアアクセラレーションを利用している。
6.0でVMの大幅に速度向上してるのでクライアントサイドなら6.0以上をすすめる。便利なAPIも多いし。
jdkに付属のswingsetデモを見てみるといいかも。

519:デフォルトの名無しさん
07/06/18 16:41:29
あとは jar 一個ってわけにいかないアプリだと
起動スクリプトを環境毎に書く必要有り。

つっても path や classpath の指定方法が違うだけなんだけど。

520:デフォルトの名無しさん
07/06/18 16:58:09
>>518-519

まぁアプリによるといえばよるんだけどUI描画全般は遅いと感じてしまう・・・

いい情報サンクス!
クライアントAPPなので とりあえずそのバージョンを最低レベルとして環境整えてみるわ

>起動スクリプトを環境毎に書く必要有り
まぁそれくらいなら別に問題ないとおもうさ

521:デフォルトの名無しさん
07/06/18 17:17:22
>>519
MANIFEST.MFのClass-Pathエントリにjarファイル名を並べれば
パス通るよ。

522:デフォルトの名無しさん
07/06/18 17:34:19
IDEがマニフェストファイルにクラスパス通してくれるから
ほとんどの場合何もする必要はないと思うが

523:デフォルトの名無しさん
07/06/18 17:37:35
とはいえ快適に動かす場合、アプリごとにVMオプションを変えるのが普通だから
フック用のexeとかスクリプトおいておいたほうがいいけどな
マニフェストファイル内に参考VM設定入れれるようにしてほしいな

webstartは多少入れれるようになったし、アプリケーションの塚と削除、
プログラムやデスクトップアイコン登録やってくれるのはいいが、
肝心のスタンドアロンアプリで出来ないのが納得いかねー

524:デフォルトの名無しさん
07/06/18 18:00:08
まあ、File f = new File("."); hogehogeとかやってはまるなよ。

525:デフォルトの名無しさん
07/06/18 18:18:13
>>524
Swingとどういう関係が?

526:デフォルトの名無しさん
07/06/18 19:22:25
そもそも>>514がswing関係ないだろ

527:デフォルトの名無しさん
07/06/19 09:32:28
>>519
fatjarでまとめてやれば、1個でおk。
ただ、LGPLなライブラリをfatjar化したときのライセンスが気になる。
動的リンクとみなしてくれるのか、静的リンクとみなされるのか。

528:デフォルトの名無しさん
07/06/19 11:43:12
いや、普通にLGPLのライセンスに従うだけ

静的なのか動的なのかでは動きは変わらない

LGPLはライブラリのバージョンアップなどが合った場合差し替える権利を保証するだけ
だからアーカイブ方法を提示してあげるだけだよ

静的だとオブジェクトファイルやコンパイル時のバージョンなどを明記すればよかったが
動的だと差し替えが容易なのでその記述が簡略化されるだけ

529:デフォルトの名無しさん
07/06/25 23:13:07
Java5でUTF-8の濁点入りの文字列をJTextFieldで編集するとカーソルがずれて、
Java6で濁点入り文字列をJLabelで表示すると濁点が1文字として表示されるんですが、
普通に1文字で表示してしかもカーソルがずれない方法ないもんでしょうか?

530:デフォルトの名無しさん
07/06/25 23:28:09
環境は?
俺はずれたことないのだけれども、そのずれる文字コードはなに?

531:デフォルトの名無しさん
07/06/26 02:08:43
フォントに問題あるんじゃないの

532:529
07/06/26 02:34:40
ごめん、スレまちがえた。
MacのSwingの話です・・・
Mac板逝ってきます。


533:デフォルトの名無しさん
07/06/26 10:51:45
環境によって違うとしても
その違いは仕様で片付けるにはあんまりだな。

534:デフォルトの名無しさん
07/06/26 12:43:31
Macでも日本語がおかしいとはきいた事がないな

535:デフォルトの名無しさん
07/06/26 14:51:27
macのネイティブLaFにはバグがあるけどな。

536:デフォルトの名無しさん
07/06/26 14:53:31
Macじゃなくて、Windowsでも再現するかはチェックしたいな・・・
再現コードがほしい

|-`).。oO(・・・・・・MacのMustangの日本語に関する問題としては、
 レンダリングエンジンの問題の件、直るのか?
 QuartzというMac固有のレンダリングエンジンからSunのレンダリングエンジンに変更されて
 フォントの種類によってベース位置がずれる問題・・・。
 半年以上前から、MacのJavaスレで報告されていたのに、新しい開発版Javaが出てこないから
 直してるのかわからねえ・・・)

537:デフォルトの名無しさん
07/06/26 14:57:24
>>529
Mac OS Xって NFD じゃなかったっけ?

1.6以降なら java.text.Normalizer あるから簡単に NFC に変換できる。
1.5以前は知らん。あと NFC に変換してもフォントが対応してるか俺は知らん。

538:デフォルトの名無しさん
07/06/26 17:41:34
そもそも"UTF-8の濁点入りの文字列"ってUnicodeでいったらどこの番地?
charsetとencoding混同してる時点で伝わってないかと。

539:デフォルトの名無しさん
07/06/26 18:26:19
むずかしいことはわからないが、リッチクライアントが待望される現在、
Swingがいまひとつ冴えないのは何でだろう。素人的に考えるに、次の
2点だと思う。
(ⅰ)開発ツールあまりに貧弱
VisualEditorというものを使ったが、遅くて快適に使えない。
ちなみにメモリ1G。かつてのVisualBasicとどうしてもくらべて
しまうが、なぜこれほどの差があり、差がちじまないのか。

(Ⅱ)見栄えが今ひとつ
フォントなど見栄えが悪い。アンチエイリアス「java -Dswing.aatext=true」
なども使ってみたが今ひとつ。
(いちいち引き合いにして悪いが、従来のVBでつくった画面にくらべると
そう感じざるをえない)

それ以外にも少し機能が貧弱な面があるが、少なくともこの2点が
改善されたら、俺は積極的に使いたいと思う。
フリーソフトニいろいろケチをつけて申し訳ないが・・

540:気まぐれアナスイ
07/06/26 18:43:35
>>539
開発し易いsoft.と云うのは構成配置を覚えるにはいいですが?
そのsoft.を使用し作成されたapplication.と云う物は、
必ずsoft.に依存します… 当たり前に規約にも影響する物です。

541:デフォルトの名無しさん
07/06/26 18:49:31
>>539
何故Netbeansを使わない。
そして、aatext=trueは、・・・・

まずは、>>539の知識を広げるところから始めた方が有用そうだ。
Swingの表現力を見るために、V2Cを見てみることをおすすめします。

542:デフォルトの名無しさん
07/06/26 18:57:12
フォーカスの順序とかもっと簡単に指定できないかなあ。
結構お客さん、こだわるんだよなあ。

543:デフォルトの名無しさん
07/06/26 19:02:59
aatext=trueはsunの5.0しか効かない。それに今はデフォで有効だろう。
さらに引数与えても捨ててるはずだけど。

LCDテキスト用AAアルゴリズムが追加されたけど実行後にプログラマが
最適なアルゴリズム選ぶ手段がjavaには無い事ない?

javaらしいって言ったらSwingの描画は全てJava2DだからJava2Dでできることは全て
GUIへフィードバックできるよね。

544:デフォルトの名無しさん
07/06/26 19:05:59
>>541

V2Cを見ました。
すばらしい!
たぶんソースコードは公開されてないんでしょうね



545:デフォルトの名無しさん
07/06/26 19:06:08
Swingが流行らないのは、単に作るのが面倒だからじゃね?
プラットフォーム互換性を持つ反面、使いづらいレイアウトマネージャ、
デザパタの教科書に使えるくらい美しい(と言われる)が、取っつき悪いクラス設計、
そして優れたGUIデザイナといわれるNetBeansがマイナー扱い。

業務でJava GUIクライアント作ったんだが、
他の連中がメンテできない。正直公開している。
ま、他の連中のスキル不足とかノウハウ共有が悪いとか、
他に理由はあるんだけどさ。

546:545
07/06/26 19:07:09
公開じゃねえ後悔だ。orz

547:デフォルトの名無しさん
07/06/26 19:09:55
>>541

VisualEditorを使った理由。
 Eclipseを使っていたから。
 たまたま市販の参考書が多かったから

今後はNetbeanにシフトしたいな
SUN純正だし


548:デフォルトの名無しさん
07/06/26 19:17:57
>デザパタの教科書に使えるくらい美しい(と言われる)が、取っつき悪いクラス設計
GUIは中途半端なMVCだけどな

549:デフォルトの名無しさん
07/06/26 19:28:17
>>540
ユーザインタフェース(要は画面)をつくる場合コードからガリガリ書く
のはばかばかしいので、マウスのドラッグ&ドロップで簡単に画面アプリを
作成できる開発支援ツールがあれば大変重宝します。
特にエンドユーザーに見せるため一度しか使わないプロトタイプ画面
などはそうやって即効で作成したいところです。
当然本開発になっても仕様変更など生産性は著しく向上します。
ところがツールで生成したコードが著しく汚くて冗長だと、コード
のメンテナンス性が低くなり、ツール使用によるメリットが半減して
しまいます。ツールに依存していても、コードを判読するケースは
あるからです。
つまりツールが自動生成するコードは、まるで有能なプログラマーが
一から開発したかのように合理的で明快なコードである必要があります。
そうでないとツールは普及しないでしょう

550:デフォルトの名無しさん
07/06/26 19:53:05
レイアウトマネージャが使いにくいって・・・
VBとかのほうが苦労するだろ
絶対座標マンセーならかまわんが、ウインドウリサイズとか対応するのきついぞ

そもそもJavaでGUI作るのにVEって・・・
あれはSwingやJavaのGUIを陥れるために作られたものと考えるくらいがちょうどいい

551:デフォルトの名無しさん
07/06/26 20:33:31
仕事でNetBeans使ってる人って結構いる?

552:デフォルトの名無しさん
07/06/26 20:39:46
結構いると思う
5.0からは複数のプロダクトで使われてるのみてる

大手はRSAとかだけど重すぎてきつい

553:デフォルトの名無しさん
07/06/26 21:32:39
>>551
うちの奴らはGUIの作成のみに使ってる。他はEclipse使ってるみたいだが。。。

Swing流行らせるためには、まずはNetBeansが機能も知名度もEclipse並に
なってもらわないとだめだね。

554:デフォルトの名無しさん
07/06/26 21:40:43
日本だとNetBeansの動きがやや鈍いね
海外は動きが速い

555:デフォルトの名無しさん
07/06/26 21:49:24
本屋にくだらないEclipse本があふれてるからねー

海外だとそこらへんの事情も違うのかな・・・

556:デフォルトの名無しさん
07/06/26 21:56:01
まずはJREをどう抵抗少なく配布するかじゃないか?
結局ここが一番のネックに感じる。

launch4j に JRE 同梱して、
「exe 叩けばOK」な形で配布すると
割と抵抗なく受け入れてもらえるんだが、
人としてこのファイルサイズはどうなのって感じが。

557:デフォルトの名無しさん
07/06/26 22:14:40
gcj使ってるひといる?

558:デフォルトの名無しさん
07/06/26 22:22:23
>>556
アプリとして有用であればランタイムが大きくても気にしない

のが正解かと

559:デフォルトの名無しさん
07/06/26 22:49:47
>>556
Consumer JREがどうなるか気になるね。
軽量化してくれればJRE同梱も納得できるサイズになるかも。

560:デフォルトの名無しさん
07/06/26 22:56:28
>>558
Delphiも結構デカくなってたしなあ・・・。

561:529
07/06/26 23:16:16
Mac板から帰ってきました。
NFCとNFDについて勉強してきたんで、なんでこんなことになるか
理解できました。
ファイル名を扱うツールを作ってるんですが、ファイル名を取得して
テキストエリアに表示するサンプルを作って試したら問題が再現しました。
以下、サンプルコードです。


562:529
07/06/26 23:16:56
package test;

import java.io.File;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class DakuonTest {
public static void main(String[] args) {
try {
JFrame frame = new JFrame();
JTextArea text = new JTextArea();
frame.getContentPane().add(new JScrollPane(text));

File[] files = new File(args[0]).listFiles();
for(int i=0; i<files.length; i++) {
text.append(files[i].getName() + "\n");
}

frame.pack();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
}


563:529
07/06/26 23:22:03
第一引数のパスのディレクトリのファイル一覧を取得し、
1行に1ファイル、テキストエリアに表示しています。
「ピクチャ.png」があった場合、
Java 5の場合、ピは1文字で表示されますが、カーソルはずれてます。
Java 6の場合、ヒ゜と表示されます。


564:529
07/06/26 23:34:10
ついでですが、濁点の入る文字が三つ以上続くファイル名でJava6の場合、
濁点がずれて表示されます。
「ががが.txt」
の場合、
「か゛かか゛゛.txt」
と見えます。
Appleのバグレポートにあげようかと思ったんですが、こんなもんどうやって
英語で説明したものか・・・

565:デフォルトの名無しさん
07/06/26 23:35:58
>>563
>>536 が言ってるフォントレンダラの問題なんじゃないかと推測。

1.5 -> Quartz という Mac 本来のエンジン使ってるので、NFD でも 一文字として表示する、
    けど Java と Quartz の連携が中途半端で文字の大きさとかの情報が渡ってなくって
    カーソル位置がずれる。

1.6 -> Sun のエンジンは NFD は 別々の文字として表示する。

あくまで推測だから本当のところはわからんけど。

566:デフォルトの名無しさん
07/06/26 23:40:06
1.5までは合成文字未対応だから、1.6でjava.text.Normalizerを
通すのがまっとうな解決法だろうなぁ。


567:566
07/06/26 23:41:05
いや、比較する訳じゃないし、これはあくまで描画上の問題ですね……


568:デフォルトの名無しさん
07/06/26 23:56:10
比較する訳じゃないのに、Normalizeされた文字列を
表示しようとするのが間違い。
MacのFSのUTF-8はNormalizeされてるので、取ってきた後
deNormalizeしてから表示するべき、ってことなのかなー。

569:デフォルトの名無しさん
07/06/27 00:00:03
macオワタ


570:デフォルトの名無しさん
07/06/27 00:03:58
macは知らんがレンダラのフォントの扱いの問題?
appleこういうの多いよね。

571:529
07/06/27 00:29:08
とりあえずAppleに「直せや」ってねじ込んで、駄目なら568さんの方法で
自分のコードを改修しようと思います。
その場合Java5については諦めるしかなさそうですね。

ついでなんでさらにMacのSwingについてぼやきます。
日本語キーボードを使っていると、KeyEventのgetKeyChar()とgetKeyCode()の
戻り値が矛盾します。
英語と日本語キーボードで配置が変わらない数字やアルファベットのキーなら
問題ないですが、記号だとgetKeyCode()の値がおかしいです。
たとえば@キーの場合、getKeyChar()は'@'を返しますが、
getKeyCode()はKeyEvent.VK_OPEN_BRACKET(0x5B)を返しました。
キー操作の多いアプリで、キーコードとアクションを関連づけてるんで
しゃれになりません。
バグレポートは投げておきましたが、なんでこんな基本的なバグが
何年も放置されてるんだと・・・


572:デフォルトの名無しさん
07/06/27 01:52:29
おんなじ現象で困ってる人
URLリンク(www.starseed.ne.jp)

573:デフォルトの名無しさん
07/06/27 02:08:00
mac版はアップルが実装してるからなぁ・・・
VMが昔はたくさんあったが今は淘汰されてSunのばかりになったことも移植性があがった原因なんだよな
しかしLinuxとWindowsは問題ないというのが歯がゆい

574:デフォルトの名無しさん
07/06/27 08:54:46
VEでjspinnerって入力できるの?

575:529
07/06/27 09:21:07
>>572
すんません、それ僕です。



576:デフォルトの名無しさん
07/06/27 09:37:18
>>574
Choose Beanすれば何でも可

577:574
07/06/27 09:43:30
>>576
なるほど、ありがとうございます。

578:574.
07/06/27 09:56:55
連続質問すいません。
JSpinnerで入力した値を取得したらNullPointExceptionが出てきて困っています。
JSpinnerは
JSpinner SP_Date = new JSpinner(new SpinnerDateModel(new Date(), null, null, Calendar.DAY_OF_MONTH ));
SP_Date.setBounds(new Rectangle(147, 191, 113, 21));
SP_Date.setUI(new BasicSpinnerUI());
SP_Date.setModel(new SpinnerDateModel());

という感じで作成し、

String TestDate = SP_PurchaseDate.getValue().toString();
で取得しようとしているのですが…

579:デフォルトの名無しさん
07/06/27 10:03:28
setBounds・・・ゴクリ

580:デフォルトの名無しさん
07/06/27 12:43:57
>>578
JSpinnerの使い方間違ってね?
・JSpinnerのコンストラクタにSpinnerModel指定したのなら、setModel()は不要
・SpinnerDateModel使うのなら、モデルに対してgetDate()すればDate型で値もらえる

それと、変数名は小文字で始めようぜ。Javaの流儀だ。

581:529
07/06/27 22:24:31
もはやSwingと関係ないんですが、MacのJavaでかなり衝撃の事実が
発覚したんで書きます。

new File("ががが.txt").createNewFile();

で作られるファイル名が「か゛かか゛゛.txt」になります。
あと、564に書いたことは間違っていて、
「ががが.txt」が「か゛かか゛゛.txt」と見えるのではなく、
Javaで「ががが.txt」を作ると「か゛かか゛゛.txt」が出来る、という話でした。
ひどすぎる・・・

Java6の場合、

new File(Normalizer.normalize("ががが.txt", Normalizer.Form.NFD)).createNewFile();

と書くと正しいファイルが作れましたが、多分Java5だと
どうしようもないんじゃないでしょうか。

スレと関係なくてすみません。

582:デフォルトの名無しさん
07/06/27 23:16:12
普通に日本語使っただけでNormalizerが必要ってのもおわっとるな
Mac対応はやめよう
LinuxとWindows、Solarisだけでいいや


583:デフォルトの名無しさん
07/06/27 23:25:53
>>581
変な挙動だね……

ががががが.txt みたいに「が」の個数増やすと、どーなるんだろとか
がぎぐげご.txt みたいに濁点は付いてるけど別の字の場合とか
興味があったり

584:デフォルトの名無しさん
07/06/27 23:28:15
macオワタ\(^o^)/


585:529
07/06/27 23:42:19
>>583
実験してみました。

がががが.txt -> ががかが?.txt
ががががが.txt -> ががかかが??.txt
がががががが.txt -> がががかかが??.txt
がぎぐげご.txt -> がぎくけご??.txt
がぱが.txt -> がはか??.txt(最後の「か」に半濁点付いた後に濁点があります)
がぱがぱ.txt -> がぱかば?.txt(最後のばの後に半濁点が付いてます)

なんか頭痛くなってきました・・・

586:529
07/06/27 23:44:53
すんません、コピペじゃ駄目みたいなんで書き直します。

がががが.txt -> ががかが゛.txt
ががががが.txt -> ががかかが゛゛.txt
がががががが.txt -> がががかかが゛゛.txt
がぎぐげご.txt -> がぎくけご゛゛.txt
がぱが.txt -> がはか゜゛.txt(最後の「か」に半濁点付いた後に濁点があります)
がぱがぱ.txt -> がぱかば゜.txt(最後のばの後に半濁点が付いてます)

587:デフォルトの名無しさん
07/06/28 05:20:04
>>586
ソースの文字コードだけど何使ってる?
コンパイルする時に、-encodingオプション指定すればよくなくね?
WinのコードとMacのコードは違うしそこらへんの問題じゃなくて?

588:デフォルトの名無しさん
07/06/28 09:37:16
String s = "\u304c\u304c\u304c\u002e\u0074\u0078\u0074";
System.out.println(s);
new java.io.File(s).createNewFile();
をwinのJDK5でコンパイルして、バイトコードをmacに持っていってJDK5環境で実行すると、
println表示は「ががが.txt」だけど、作成されたファイル名は「がかが゛.txt」になるね。
macはサブで、あまり本格的にjavaでいろいろやったりしてなかったんで、
macのjava実装がこんなもんだということにちょっとびっくり。

589:574.
07/06/28 09:50:31
>>580
ありがとうございます。
getDate()ですね。

あと、変数名おかしいのも指摘していただいてありがとうございます。

またひとつ質問があるのですが、
JSPinnerで 日付のみを表示することって可能でしょうか?

2007/06/28 00:00:00 という表示を
2007/06/28 という表示にしたいのですが…


590:588
07/06/28 10:22:52
分解後のリテラル"\u304b\u3099\u304b\u3099\u304b\u3099\u002e\u0074\u0078\u0074"だと、
ファイルとして「ががが.txt」が生成されるけど、逆にwin環境では化けファイル名になる。
もしかしてmacでNormalizerを使って正しいファイル名を生成できたとしても、
それをwinに持ってきて正しいファイル名にはならない?
うちはJDK5環境のままなんでNormalizer周りを確認できないけど。

591:デフォルトの名無しさん
07/06/28 10:38:04
>>590
> 逆にwin環境では化けファイル名になる
NFD使われた程度で化けるならWin側にも問題はあると思うけどね。
NFCが正しいユニコードってわけじゃないし。

まぁ、>>586 のはバグだろうけど。

592:588
07/06/28 10:46:23
>>589
JSpinner#setEditorを使って、
setEditor(new JSpinner.DateEditor(sp, "yyyy/MM/dd"))

593:デフォルトの名無しさん
07/06/28 10:49:40
名前欄が……orz

594:589
07/06/29 00:15:08
>>592
ありがとうございます。できました。
でも次はデータを取得したらなぜかぬるぽになる・・・

sp.getValue().toString() とかやってみたのですが…


595:デフォルトの名無しさん
07/06/29 00:36:31
commitEdit しないと値が確定しないからぬるぽなんじゃね?

596:デフォルトの名無しさん
07/06/29 00:37:53
ソースさらさんとわからん

597:デフォルトの名無しさん
07/06/29 00:40:59
>>594
spがnullなのかsp.getValue()がnullなのか。
データ取得のタイミングが早過ぎてスピナがまだ構築されていないとか。
試しにこういうのを作ったけど普通に取得できたよ。
JFrame f = new JFrame();
f.setLayout(new java.awt.FlowLayout());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JSpinner sp = new JSpinner(new SpinnerDateModel(new Date(), null, null, Calendar.DAY_OF_MONTH ));
sp.setEditor(new JSpinner.DateEditor(sp, "yyyy/MM/dd"));
sp.setUI(new javax.swing.plaf.basic.BasicSpinnerUI());
f.add(sp);
JButton b = new JButton("A");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println(sp.getValue());
}
});
f.add(b);
f.pack();
f.setVisible(true);

598:594
07/06/29 00:47:44
>>595
>>596
ありがとうございます(涙

>>597
うわマジありがとうございます(号泣
さっそくやってみます!!

599:529
07/06/30 10:08:36
遅レスですが。

>>587
ソースはShift_JISですが、.classファイル中では変換されちゃってNFCなUTF-8の
コードで記録されてるんで関係無いっぽいですね。
MacのファイルシステムはNFDでファイル名持ってるけどNFCのファイル名渡されると
NFDに変換するみたいなんですが、Java VMのそこら辺の実装にバグがあるっぽいです。

>>591
Windowsは最初っからNFCのファイル名のみを渡されるのが前提で、
NFDのファイル名をNFCに変換する機能とかが無く、NFDの濁点のフォントを持ってないんで
化けるみたいです。
まあ、仕方ないかと。

Appleに報告したら1日で返事が来て追加情報を求められました。
さすがにやばいと思ったんでしょうか。

あと、無理矢理Swingに話を戻すと、JTextComponentはNFCみたいなんで、
自分のアプリではファイル名はNFCで扱い、java.io.Fileを生成するときだけ
MacではNFDに変換するようにしました。

600:デフォルトの名無しさん
07/06/30 14:12:28
クラスファイル内のエンコーディングはUTF-8だったのか

601:デフォルトの名無しさん
07/06/30 15:56:39
>>600
だからsunのJDKの実装ではReaderのデフォエンコーディングがUTF-8なんだったはず。

602:デフォルトの名無しさん
07/07/02 17:46:19
JFrameから他のJFrameのボタンを押すことって可能でしょうか?

今AとBという画面を作って、Bに検索窓を作って、クリックした内容がAウィンドウのテキストフィールドに反映するように
しているのですが、そこからさらにBウィンドウの「確定」ボタンを押すと、Aウインドウでも「確定」ボタンを押したのと同じ状況にしたいのですが…


603:デフォルトの名無しさん
07/07/02 18:07:29
普通にそのロジックが入ったメソッドを呼べばいいだけでは?
イベントの中ではそのメソッドを呼ぶようにするだけ

Swingの中で押したように動作させるという意味ならそのまま命令があるけど、APIマニュアルをよく見てみよう

604:594
07/07/03 11:12:10
>>597


すいません、spがnullになってしまいます。。。
EclipseでgetJContentPane()に自前で以下のコードを追加したのですが…

  JSpinner sp = new JSpinner(new SpinnerDateModel());
sp.setUI(new BasicSpinnerUI());
sp.setEditor(new JSpinner.DateEditor(SP_checkDate, "yyyy/MM/dd")) ;
jContentPane.add(sp);

そして、ボタンを押したときのコードはこれです。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date spData = sdf.parse(SP_checkDate.getValue().toString());

なぜかspがnullになっています。。。 



605:デフォルトの名無しさん
07/07/03 12:28:07
>>604
Swingの前にJavaの勉強した方がいいぞ。
>>597のコードを、お前のコードにそのまま埋め込んでもダメ。
意味を理解しろ。
JSpinner.DateEditorのコンストラクタの引数は、
setEditorを呼び出すJSpinnerオブジェクトを指定する。
>>604では、JSpinner.DateEditorのコンストラクタで指定したJSpinnerと
setEditorを呼ぶJSpinnerが異なっている。

それと、以前のアドバイスをまるで無視してるな。ちゃんと読んでるか?
SpinnerDateModel#getDate()でDate型で取得できると言われたのに
無駄にSimpleDateFormat使ってDate→String→Date変換してるし、
変数名があいかわらず変だったりするし。

606:594
07/07/03 13:46:28
>>604
変数名の修正が中途半端になっていました・・・すいません。
Date型で取得せずにStringで取得してたりダメダメなので、もう一度出直します…


607:デフォルトの名無しさん
07/07/03 14:57:06
>>594 がんがれ

608:デフォルトの名無しさん
07/07/03 17:16:40
VisualEditorでのデフォルトのフォントって変更できますか?
いつも太字のDialog,12を手動でぽちぽち変更しているのですが…


609:デフォルトの名無しさん
07/07/03 18:35:49
実行時だけ素敵になれば良いのであれば
>>483 辺りを参照するヨロシ。

610:デフォルトの名無しさん
07/07/04 01:14:58
commonsのsmtp関連って使っているひといますか?
使おうと思ったけどエンコード思うようにいかなくて
javax.mailの方に手を出したら結局そっちだけで用が済んでしまい
わざわざcommons使うまでもなかったっていうか・・・



611:デフォルトの名無しさん
07/07/04 01:15:44
誤爆しますたスマソ

612:594
07/07/04 12:11:32
やっと取得できるようになりまいた!!
DataModelが必要だったのですね… ちゃんと読んでなくてすいません。ありがとうございます!

613:デフォルトの名無しさん
07/07/04 12:12:23
>>609

やっぱりVE上でもヨロシくしたかったのですが…
VE以外のGUIエディタなら可能?

614:デフォルトの名無しさん
07/07/04 16:25:33
eclipse+swingでGUIをふんふんふん~って作っていて、
いざエクスポートして、問題なく起動でしたと思ったら、
なぜかDBとの通信に失敗している。

エラー内容をみるとjava.lang.NullPointerException

開発時には普通に実行できたのに、
jarにエクスポートしたらDBと通信できなくなる場合ってあるのでしょうか?
JDBCはちゃんとclasspathがあるとこに置いてます

615:デフォルトの名無しさん
07/07/04 17:09:10
だからその例外が発生している場所をさらさんとダメだとなんど・・・

616:デフォルトの名無しさん
07/07/04 17:25:13
>>614
Swingというかスレ違いな気がするが、一応回答。
実行可能jarから起動すると、CLASSPATHや-classpathオプションは無視される。
代わりにMANIFEST.MFのClass-Pathエントリに書くこと。

これ以上の助言が欲しかったら、その例外の発生箇所を加えて
Java質問・相談スレに行け。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch