From window, to wind

趣味のゲームとJavaプログラムなどについて 適当に書き綴るブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Javaメモ

気になったことを書いておく。
Swingではpaint()ではなくpaintComponent()を使うらしい。
jarファイル内のリソースは読み込むことはできるが書き込むことはできない。
JPanelにKeyEventを設定するにはフォーカスの制御が必要であり、結構難しい。
音楽ファイルを読めるようにしよう。
MIDIファイルを再生してみた、シーケンサを使う方とAppletを使う方の二つを試してみた。両方とも成功。ただし両方ともURLを利用する。ボタンを二つ作り起動してみたところ、うまく再生されなかった。しかたがない。
GridBagLayoutにおいてコンテナーのサイズが決まらず、各コンポーネントの幅を1対2などにしたいときは、fillをBOTHなどにしてweightxを1対2にすれば余白の処理の関係から各コンポーネントの幅の制御ができる。(表現が少し悪い?)
CaptureLauncherのカレンダーボタンがうるう年に対応していなかった。2月の最終日が間違っており、3月は正しいので、空白の一日が存在している。時間を見つけて直そう。
getActualMaximum()を使ってメソッドの呼び出し元のインスタンスが保持している月のフィールド値としてのDAY_OF_MONTHの最大値を受け取ればよい。賢いな~。

import java.util.Calendar;
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2005); // 2005年
cal.set(Calendar.MONTH, 0); // 1月
int m1days = cal.getActualMaximum(Calendar.DAY_OF_MONTH);

cal.set(Calendar.YEAR, 2005); // 2005年
cal.set(Calendar.MONTH, 1); // 2月
int m2days = cal.getActualMaximum(Calendar.DAY_OF_MONTH);


参考月の日数を求める / Java(SE) API 逆引き辞典

欲しいものはディスプレイに対するMouseMotionListnerですね。CaptureLauncherのMouseWatcherにマウスカーソルの箇所の色を取得する機能を付けた。
作ったメソッド

public void getdata(){
        try{
            Point colorpoint = MouseInfo.getPointerInfo().getLocation();
            Color pcolor = (new Robot()).getPixelColor(colorpoint.x,colorpoint.y);
            colorp3.setBackground(pcolor);
            String p1str = "#";
            if(pcolor.getRed()<16)p1str+="0";
            p1str+=Integer.toHexString(pcolor.getRed());
            if(pcolor.getGreen()<16)p1str+="0";
            p1str+=Integer.toHexString(pcolor.getGreen());
            if(pcolor.getBlue()<16)p1str+="0";
            p1str+=Integer.toHexString(pcolor.getBlue());
            colorp1.setText(p1str);
            colorp2.setText("<html>Red:"+pcolor.getRed()+"<br>Green:"+pcolor.getGreen()+"<br>Blue:"+pcolor.getBlue()+"</html>");
           
            repaint();
        }catch(Exception e){   
        }
}


色の取得は画像の取り込みと同様の方法で行った。
問題はColorを#000000などに直す方法。16進数表示であるからIntegerクラスのメソッドを利用すればよいが、Stringに落とすときに15以下だと二桁表示にならないのでif文で0をつけるようにした。これはちょっとしたサンプルになるだろう。
Swing上に画像を読み込んで描画するときにサイズを縮小して描画すると、その後の
グラフィックスが正しく描画してくれない。fillrectもできなかった。エラーは出ない。なぜ。
JOptionPaneやJFileChooserなどのメソッドが賢いことが分かった。なるほど処理だけでなくbooleanなどを返せば、いろいろできそうだ。

JInternalFrameはsetContentPane()でsetOpaque(false)で透明にしたJPanelをセットすることで透明なフレームが作れる。ということでJFrameのタイトルバーを消し最大化して、デスクトップの画面をキャプチャーして貼り付け、setOpaque(false)で透明にしたJDesktopPaneをセットし透明フレームのJInternalFrameを使うことで…

JColorChooserのshowOpenDialogでchangeListenerを呼び出して色の変更をチェックできないかと考えているが、うまくいかない。メソッドではなく自分でダイアログを使った方がいいのかな。JToolTipにJColorChooserを加えるという愚行をおかした。

GridBagLayoutは分割して配置するので、各コンポーネント間の相対的な位置関係の調整には役に立つのだが、上から順番にスペースの無いように詰めていくことが出来ない。対処法としてはBorderLayoutでダミーのJPanelをNORTHの位置で配置しておいて、ダミーのJPanelの中にもともと入れるはずのコンポーネントを配置していくことぐらいかな。ただこれにも穴はありそうで心配だ。いっそのことGridBagLayoutを適用したJPanelを作ろうかと思うわけで。名前はGridBagPanel…時間を見つけて作ろう。
スポンサーサイト

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://kagenyan.blog69.fc2.com/tb.php/23-b16a5710
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。