Java低速GUI Swing 5
..
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渡してもだめ?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5098日前に更新/197 KB
担当:undef