2013年1月17日木曜日

ChangeEvent

ここではChangeEventについて見ていきます。
1.ChangeEventを発生させるコンポーネント:
JButton
JCheckBox
JRadioButton
JMenuItem
 
JSlider
JSpinner
 
JTabbedPane
2.イベントが発生するタイミング:
状態が変更になった場合
3.対応するリスナーインターフェース:
javax.swing.event.ChangeListener
public interface MouseListener extends EventListener
4.コンポーネントに対するリスナーの登録メソッド:
addChangeListener
public void addChangeListener(ChangeListener l)
ChangeListenerインターフェース
ChangeListenerインターフェースは、設定するコンポーネントなどにもよりますが状態が変更になった場合に発生するイベントを受け取るためのリスナーインタフェースです。JTabbedPaneの場合であればタブが切り替わった時、JSliderであればスライダーの位置が変わった時、などです。実装に必要なメソッドは1つあります。
stateChanged
void stateChanged(ChangeEvent e)
リスナーの対象の状態が変更されたときに呼び出されます。
 
パラメータ:
  e - ChangeEvent オブジェクト
このリスナーインターフェースの実装方法は下記のようになります。
public class myListener implements ChangeListener{
  public stateChanged(ChangeEvent e){
    /* 処理したい内容をここに記述する */
  }
}
ではここで簡単なサンプルを作成して試してみます。下記では自分自身にChangeListenerをインプリメントしています。
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.awt.BorderLayout;
 
public class SwingTest extends JFrame implements ChangeListener{
 
  JLabel label = new JLabel("スライダーの値");
 
  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);
 
    JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 100, 50);
    slider.addChangeListener(this);
 
    JPanel p = new JPanel();
    p.add(slider);
 
    getContentPane().add(p, BorderLayout.CENTER);
    getContentPane().add(label, BorderLayout.PAGE_END);
  }
 
  public void stateChanged(ChangeEvent e) {
    JSlider source = (JSlider)e.getSource();
 
    int fps = (int)source.getValue();
    label.setText("値:" + fps);
  }
}
実行結果は下記のようになります。
スライダーを動かすとChangeEventが発生し、ラベルにスライダーの値が表示されます。
ChangeEventクラス
ではChangeEventクラスについても見ていきます。クラス図を見て下さい。
·       java.lang.Object
·       java.util.EventObject
·       javax.swing.event.ChangeEvent
·       public class ChangeEvent extends EventObject
ChangeEventクラスのメソッドとしては特に用意はされていませんが、親クラスのEventObjectクラスのgetSourceメソッドが使えます。
getSource
public Object getSource()
Event が最初に発生したオブジェクトです。
 
戻り値:
  Event が最初に発生したオブジェクト
このメソッドを使ってChangeEventが発生した元のオブジェクトを調べることができます。
様々なコンポーネントによって使われ方が異なるので、ChangeEventでは変更があったことを通知するのみで、後はそれぞれのコンポーネントのメソッドを使って変更された状態を調べるような使われ方になるのではと思います。
 
 

2013年1月16日水曜日

Proxy with Android Emulator

There are plenty of tutorials out there for installing and running an Android x86 emulator on VirtualBox in Windows (best one I found was herehttp://brunocosta.com/blog/pt/2011/11/02/speeding-up-android-development-with-android-x86-and-virtualbox/). Doing this gives you a much more responsive Android emulator than the one you get with Eclipse. But it's also a bit of a pain to set up.
The thing that had me stumped for a while was how I set up the proxy settings so that the browser could access the Internet. Android (v2.3 at least) doesn't have the option to set proxy settings like Windows does, you have to set it in the Linux command prompt. Do ALT-F1 in Android and in the command prompt type
setprop net.gprs.http-proxy http://1.2.3.4:8080
and substitute the correct IP address and port for your proxy.
That should be all you need to do – fire up the browser and see if you can hit Google.
 
Introduction
config networking via console
Commands
IP
ifconfig eth0 yourip netmask yourip's mask
ifconfig eth0 192.168.1.10 netmask 255.255.255.0
not ipconfig!!!
Gateway
route add default gw yourgateway dev eth0
route add default gw 192.168.1.1 dev eth0
DNS
setprop net.eth0.dns1 yourDNS
setprop net.eth0.dns1 208.67.222.222
Proxy Server
Sorry, I find a way to config proxy http://www.cnblogs.com/DesignPatterns/archive/2008/10/10/1307898.html.
But it only be in effect when reboot machine. LiveAndroid save data in memory, after reboot, all
go back to initial setting. We'll change it soon.
 
 
Android proxy setting
1. Launch adb shell from your-android-folder\tools. [adb shell]
2. Find db file. Normally - /data/data/com.android.providers.settings/databases/settings.db
3. Launch sqlite. [sqlite3 /data/data/com.android.providers.settings/databases/settings.db]
4. Check the databases and tables
Note: the setting of proxy should be inserted into table system
5. Insert proxy setting
6. Check the setting with "select * from system;"
This line - 99|http_proxy|your-proxy:proxy-port - is inserted.
7. Launch browser from emulator and access Internet behind proxy.
 
 
 

Windows 8に[スタート]メニューを追加する(ツール・バーのショートカット編)

 
 
  Windows 8では、[スタート]メニューがなくなり、[スタート]画面へと変わったことで多くの人が戸惑いを感じているようだ。既存の多くのアプリケーションは、デスクトップ画面上で動作するため、新しいアプリケーションを起動するためには、一度[スタート]画面に移動しなければならず、少々操作が面倒となる。そこで、Windows 8に[スタート]ボタンを望む人が多いようで、実際、Windows 8に[スタート]ボタン/[スタート]メニューを追加するツール「Classic Shell」を紹介したTIPS「Windows 8に[スタート]ボタン/[スタート]メニューを追加する(Classic Shell編)」の記事は、公開以降、高い人気を誇っている。
 Classic Shell(または同様のツール)をインストールすれば、かなりWindows 7に近い操作感が実現できるのだが、こうしたツールのインストールが制限されている企業や団体もあるようだ。Classic Shellなどのツールに比べると使い勝手に制限はあるものの、特にツールをインストールしなくてもWindows 8の設定によって、ツール・バーにアプリケーションを直接起動できる[スタート]メニューを追加することが可能だ。ただし表示されるメニューは、Windows 7の[スタート]メニューの[すべてのプログラム]に相当する部分のみである。
操作方法
 Windows 8に[スタート]メニューを追加するには、デスクトップ画面のタスク・バー上でマウスの右クリック(タッチ操作の場合は長押し)し、メニューを開き、[ツール バー]-[新規ツール バー]を選択する。[新規ツール バー - フォルダーの選択]ダイアログが開くので、ここで[%ProgramData%\Microsoft\Windows]フォルダの「スタート メニュー」を選択し、[フォルダーの選択]ボタンをクリックする(%ProgramData%は通常、C:\ProgramData。また%ProgramData%は、隠しフォルダになっているので、事前にエクスプローラの[表示]メニューのリボンで[隠しファイル]にチェックを入れておくこと)。
Windows 8のタスク・バー・メニュー
Windows 8に[スタート]メニューを追加するには、タスク・バーを右クリックして、メニューから[ツール バー]-[新規ツール バー]を選択する。
 
 (1)タスク・バーを右クリックする。
 
 (2)[ツール バー]をクリックし、サブ・メニューを開く。
 
 (3)[新規ツール バー]を選択する。→[A]
[A]
[新規ツール バー - フォルダーの選択]ダイアログの画面
ツール・バーに追加する項目を選択する。ここで、[%ProgramData%\Microsoft\Windows]フォルダの[スタート メニュー]を選択選択し、[フォルダーの選択]ボタンをクリックする。
 
 (1)[%ProgramData%\Microsoft\Windows]フォルダを開く。
 
 (2)「スタート メニュー」を選択する。
 
 (3)[フォルダーの選択]ボタンをクリックする。
 これでタスク・バーに「スタート メニュー」という項目が追加され、Windows 7の[スタート]メニューの[すべてのプログラム]を右クリックしたときの、下側の[開く - All Users]に相当するメニューが表示される。これで[スタート]画面に移動しなくても、ここからOfficeなどのアプリケーションが起動できるようになる。ただ、この状態ではユーザーごとのスタート・メニューが表示されないため、例えばメモ帳などのメニューがないなど少々不便だ。
タスク・バーに追加された[スタート]メニュー
タスク・バーに「スタート メニュー」が追加される。ここの「>>」をクリックすると、画面のようなメニューが表示される。ここからアプリケーションを選択し、直接起動することができる。
 
 (1)追加された「スタート メニュー」という項目。
 
 (2)Windows 7の[スタート]メニューの All Usersの[すべてのプログラム]に相当するメニュー。
 そこで、エクスプローラで[%ProgramData%\Microsoft\Windows\スタート メニュー\プログラム]フォルダを開き、ここにユーザーごとの[スタート]メニューの項目が保存されている[%USERPROFILE%\AppData\Roaming\Microsoft\Windows]フォルダから必要なショート・カットをコピーする。ただし、コピーする際、「このフォルダーへコピーするには管理者の権限が必要です」という警告ダイアログが表示されるので、[続行]ボタンをクリックする。標準ユーザーの場合、管理者アカウントのパスワードの入力が求められるので、パスワードを入力して[はい]ボタンをクリックする。これでユーザーごとの[スタート]メニューも表示させることが可能になる。同様に、[スタート]メニューに登録しないようなアプリケーションもショート・カットを作成し、ここにコピーすればよい。
 管理者権限が利用できないようならば、[%USERPROFILE%\AppData\Roaming\Microsoft\Windows]フォルダの[スタート メニュー]を選択したメニューをタスク・バーに作成してもよい。またコントロール・パネルなどをすばやく開くためには、[ツール バー]-[デスクトップ]を選択し、ツール・バーにデスクトップ・メニューが表示されるようにしておくとよいだろう。
 これらのメニューを削除したい場合は、タスク・バーを右クリックして、メニューから[ツール バー]を選択し、サブ・メニューから削除したいメニューの項目を選択し、チェックを外せばよい。[アドレス]や[リンク]、[デスクトップ]といったデフォルトで用意されている項目は、チェックを外してもサブ・メニューから消えることはないが、ユーザーが追加した[スタート メニュー]などの項目はサブ・メニューから削除される。そのため、再度、有効にしたい場合は、上記の作業を最初から行う必要がある([%ProgramData%\Microsoft\Windows]フォルダなどにコピーしたショート・カットは削除されない)。
 Classic Shellなどのツールを利用したスタート・メニューとは異なり、[シャットダウン]や[プログラムやファイルの検索]などの項目は表示されないが、特別なツールをインストールしなくてもいいので、アプリケーションのインストールに制限を設定しているところでも利用できるだろう。
 
 
 

2013年1月14日月曜日

   アメリカ・マサチューセッツ州の母親が13歳の息子にスマホを与える際、息子に迫った18の約束が話題となっている。お落とし穴が多いスマホの世界に入る息子への母からの愛情いっぱいのメッセージだ。「スッキリ!!」はきのう2013年1月8日に東京新聞の記事として紹介したが、視聴者から「詳しく知りたい」という問い合わせが相次ぎ、さらに詳しく伝えることになった。

「向き合って言えないことはメールしない」「携帯は生き物でもあなたの一部でもない」

   母親はジャネル・ホフマンさんといい、息子のグレゴリーくんに昨年のクリスマスに欲しがっていたiPhoneをプレゼントしたのだが、これに「使用契約書」が付けられていた。前置きに「メリークリスマス。あなたは今からiPhoneを持てますが、テクノロジーに振り回されることなく、健康でしっかりとした青年に育てるのが私の役目」と書き、18のルールが並ぶ。内容は長いので、エッセンスにしてみると――


   (1) このiPhoneは私が買った。あなた(息子)に貸している。

   (2) パスワードは私が管理する。

   (3) これは電話。鳴ったら出ること。

   (4) 学校がある日は午後7時半、週末は9時に親にあずけること。

   (5) 学校に持って行ってはいけない。メールする友だちとは直接話しなさい。会話は人生のスキルです。

   (6) 破損したら、修理はあなたの責任。

   (7) ウソをついたりバカにしたり、人を傷つけることにテクノロジーを使わない。

   (8) 面と向き合って言えないことはメールで送らない。

   (9) 友だちの親の前で言えないことをメールしてはいけない。

   (10)ポルノ禁止。情報は私と共有。知りたいことは私かパパに聞いて。

   (11)公の場では電源を切るかマナーモードにする。

   (12)大事な部分の写真をやりとりなどしないこと。インターネットは巨大で強力。消すのは難しい。

   (13)写真やビデオのすべてを記録する必要はない。自分自身の体験を大切に。体験は永遠に残るもの。

   (14)ときどき家に置いていきなさい。携帯は生き物でもあなたの一部でもない。これなしでも暮らしていける。取り残されるのを恐れず、器の大きい人間になりなさい。

   (15)いい音楽をダウンロードして聴きなさい。視野を広げなさい。

   (16)ワードゲームやパズル、知能ゲームで時々遊びなさい。

   (17)上を向いて歩きなさい。周囲の世界に目を向けなさい。会話をしなさい。グーグルで検索をしないで思考しなさい。

   (18)約束を守れなかったら没収します。もう1度話し合い、はじめからやり直しましょう。あなたと私は常に学んでいるチームメイトです。一緒に答えを出していきましょう。

    司会の加藤浩次「43歳のボクが、ハイといいそうですね」

   宮崎哲哉(評論家)「自由と規律。また過度に依存しないように、なくても人生はあるとネットの入口と出口を押さえている。よほどちゃんとしてないとできない」

   大沢あかね(タレント)「親としては考えさせられる。自分でも見ちゃう。大人も原点に返れる」

   ロバート・キャンベル(東大教授)も「アメリカでは親が監視して止めるというのが限界にある。子どもを信頼して、明文化して互いに折合っている」とべた褒めだった。

   キャスターのテリー伊藤「とくに13から17だね。こういうことが感性を磨く」

   加藤「検索せずに思考しなさいって、自分でもそうだなと思う」

   宮崎「記憶の外部化といって、何でも記録していると記憶の意味が薄れていく。これもきちんと押さえている」

   加藤は「この契約されたら、ボクは検索しちゃいますね」