« 2012年3月 | トップページ | 2012年5月 »

2012年4月

2012年4月28日 (土)

java: IMEの状態取得/設定。 変換途中の文字列取得

java で 「日本語変換 IMEの状態取得」と 「JTextField に入力している時の変換途中の文字列取得」に手間取ったのでメモしておきます。

ただし、IME状態を正しく取得することは出来ませんでした orz

import java.text.AttributedCharacterIterator;
import java.text.CharacterIterator;
import javax.swing.JTextField;

public class MyTextField extends JTextField {

    private boolean mIME                = false;
    private String    m変換中文字列 = null;

    public MyTextField() {
        addKeyListener(new java.awt.event.KeyAdapter() {
            @Override
            public void
keyReleased(java.awt.event.KeyEvent evt) {
                myKeyReleased(evt);
            }
        });
        addInputMethodListener(new java.awt.event.InputMethodListener() {
            @Override
            public void
inputMethodTextChanged(java.awt.event.InputMethodEvent evt) {
                myInputMethodTextChanged(evt);
            }
            @Override
            public void caretPositionChanged(java.awt.event.InputMethodEvent evt) {
            }
        });
    }

    public void setIME(boolean b) {
        enableInputMethods(b);
    }

    public boolean isIME() {
        return mIME;
    }

    private void myKeyReleased(java.awt.event.KeyEvent evt) {
      
  System.out.println("IME:" + (isIME() ? "ON" : "OFF"));
        mIME = false;
        String s = getText();
        if (m変換中文字列 != null) {
            s = s.substring(0, s.length() - m変換中文字列.length());
        }
       
System.out.println("TextField内の確定文字列:" + s);
        System.out.println("--------------");

    }

    private void myInputMethodTextChanged(java.awt.event.InputMethodEvent evt) {
        m変換中文字列 = get変換中文字列(evt);
        if (m変換中文字列 != null) {
         
  System.out.println("変換中文字列:" + m変換中文字列);
       }
        mIME = true;
    }

    private String get変換中文字列(java.awt.event.InputMethodEvent evt) {
        final AttributedCharacterIterator text = evt.getText();
        if (text == null) {
            return null;
        } else {
            StringBuilder textBuffer = new StringBuilder();
            int committedCharacterCount = evt.getCommittedCharacterCount();
            char c = text.first();
            while (committedCharacterCount-- > 0) {
                textBuffer.append(c);
                c = text.next();
            }
            while (c != CharacterIterator.DONE) {
                textBuffer.append(c);
                c = text.next();
            }
            return textBuffer.toString();
        }
    }
}

私の目的とすることは出来ました。

public class MyTextField extends javax.swing.JTextField {

    private boolean mIs変換済 = true;
    private String   mText       = "";

    public MyTextField() {
        addKeyListener(new java.awt.event.KeyAdapter() {

            @Override
            public void
keyReleased(java.awt.event.KeyEvent evt) {
             
  if (mIs変換済 && !mText.equals(getText())) {
                    mText = getText();

                    // 日本語変換が確定した時のみ TextField 内の文字を表示
                    System.out.println("TextField内の確定文字列:" + getText());

               
}
            }
        });
        addInputMethodListener(new java.awt.event.InputMethodListener() {

            @Override
            public void i
nputMethodTextChanged(java.awt.event.InputMethodEvent evt) {
               
mIs変換済 = (null == evt.getText());
            }
            @Override
            public void
caretPositionChanged(java.awt.event.InputMethodEvent evt) {
            }
        });
    }
}

2012年4月27日 (金)

Mac mini : 起動ディスクに Windows が表示されない

システム環境設定 > 起動ディスク に Windows が表示されない理由が分かったのでメモしておきます。

Photo

原因は Mac から Windows の NTFS ファイルシステムを読み書き出来るようにするために導入した、NTFS-3G が原因でした。
これを導入すると、NTFSでフォーマットしたパーティションが mac のドライブだと認識されるため、Boot camp で導入した Windows が起動ディスクに表示されないようです。

■対策
 ・
Paragon NTFS for Mac OS X 6 @ NO9-importedさん、 Apple サポートコミュニティ
 ・
MacからNTFSでフォーマットされたディスクを読み書きする @へろぱさん,へろぱ的ブログ

■私の環境
 ・Mac :Mac mini 120GB MB463J/A (Early 2009モデル)
 ・OS :Mac OS X 10.6.8 Snow Leopard

2012年4月22日 (日)

java: JFrame や JPanel でキー入力を受け付けるサンプル

コピーを表す「CTRL+ C」キー入力を受け付けるプログラムで手間取ったのでメモしておきます。
(キーストローク処理)

JPanel でキー入力を受取るサンプル

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class A extends javax.swing.JFrame implements KeyListener {
    private javax.swing.JPanel
jPanel1;

    public A() {
        initComponents();
       
jPanel1.setFocusable(true); //パネルでキーを受付ける
       
jPanel1.addKeyListener((KeyListener) this);
    }

    private void jPanel1MouseEntered(java.awt.event.MouseEvent evt) {
      
jPanel1.requestFocus(); // フォーカスを得る
    }

    public void keyPressed(KeyEvent evt) {
        if (evt.
isControlDown()) {
            if (67 ==
evt.getKeyCode()) {
                System.out.println(
"CTRL + C");
            } else if (86 == evt.getKeyCode()) {
                System.out.println(
"CTRL + V");
            }
        } else {
            System.out.println("キー入力:" + evt.getKeyChar() + " " + evt.getKeyCode());
        }
    }

    public void keyTyped(KeyEvent e) { }
    public void keyReleased(KeyEvent e) {  }

    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new java.awt.CardLayout());
        jPanel1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jPanel1MouseEntered(evt);
            }
        });
        getContentPane().add(jPanel1, "card2");
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-416)/2, (screenSize.height-338)/2, 416, 338);
    }

   public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new A().setVisible(true);
            }
        });
    }

}

 

JFrame でキー入力を受取るサンプル (java 1.3)

import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.JComponent;
import javax.swing.KeyStroke;

public class B extends javax.swing.JFrame {

    public B() {
        initComponents();

        AbstractAction myAction = new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
               
System.out.println("CTRL+C が押されました");
            }
        };
        KeyStroke ks =
KeyStroke.getKeyStroke(KeyEvent.VK_C, java.awt.event.InputEvent.CTRL_DOWN_MASK);
       getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(ks, "COPY");
       getRootPane().
getActionMap().put("COPY", myAction);
    }

    private void initComponents() {
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(null);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-416)/2, (screenSize.height-338)/2, 416, 338);
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new B().setVisible(true);
            }
        });
    }

}

 

JFrame でキー入力を受取るサンプル (java 1.2)

import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.JComponent;
import javax.swing.KeyStroke;

public class B extends javax.swing.JFrame {

    public B() {
        initComponents();

        AbstractAction myAction = new AbstractAction() {

            public void actionPerformed(ActionEvent e) {
             
  System.out.println("CTRL+C が押されました");
            }
        };
        KeyStroke ks =
KeyStroke.getKeyStroke(KeyEvent.VK_C, java.awt.event.InputEvent.CTRL_DOWN_MASK);
        getRootPane().
registerKeyboardAction(myAction, ks, JComponent.WHEN_IN_FOCUSED_WINDOW);
    }

    private void initComponents() {
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(null);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-416)/2, (screenSize.height-338)/2, 416, 338);
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new B().setVisible(true);
            }
        });
    }

}

■Ref.
 ・java 1.4.0 API仕様 > クラス JComponent > Technical Articles and Tips: Keyboard Bindings in Swing

2012年4月16日 (月)

Mac: 画面ハードコピー&ショートカット <Snow Leopard、Macbook Air>

自分用のメモです。

■Macで画面ハードコピー (画面を画像として保存)

コピー部分方法
特定ウィンドのハードコピー command + shift + 4 さらに「space」キー
画面全体のハードコピー command + shift + 3
マウスで指定した範囲のハードコピー command + shift + 4

 * Windowsキーボード では「command」キー は  「windows(旗)」キーに相当

■Mac OSバージョンの確認
 画面左上のリンゴマークをクリック → 「このMacについて」を選択

■ショートカット
 ・ Windowsユーザーが戸惑うショートカットキーまとめ (ブログ:Chrome Life)
 ・fn + delete

便利:パソコンのリモート操作

親がパソコンの調子が悪いと言ってきた。電話では対応できそうにない。しかし、親の家まで500km以上。
そこでリモートコントロールソフトを使ってみました。

パソコンを外部から操作するので、「個人が作ったソフト」や「怪しい会社が作ったソフト」はインストールしたくない。
探していると「
窓の杜 > インターネット・セキュリティ > リモート操作」で「Team Viewer」 というソフトを見つけました。

私のPCには絶対ウィルスなど入れたくないので、普段使わないPCに「オールインワン TeamViewerフルバージョン」をインストール。
親の方は、調子が悪いPCに「TeamViewer QuickSupport(顧客向けモジュール)」を導入(インストールではないらしい)。 

結構使えました。

画面に出る番号を携帯電話で教えてもらい、それを使って相手のPCを操作できるようにします。個人利用は無料。多少有料版へのアップグレードを催促するウィンドが出るようです。
ただビジネスモデルが不明。以前無料のソフトイーサーというのがあったのですが今は有料のようです。有料でなくては成り立たない気がしますがどのようなビジネスモデルなのでしょうか・・・。ちょっと不安。

■マイクロソフト リモートアシスタント
 ・Microsoftサポート
  遠隔操作でパソコンの設定を直してもらうには?

 ・@IT総合トップ > @IT CORE > Windows Server Insider > Windows TIPS
   リモート・アシスタンスの使い方(Windows 7編)

2012年4月15日 (日)

Apple 関連 <目次>

Mac 関連 <目次>

■MacBook Air
 ・
11インチ MacBook Airを 購入 

 ・画面ハードコピー方法

 ・MacBook Air 無線LAN 設定 <nifty - フレッツ光>
 ・MacBook Air 無線LAN 設定 <nifty - ADSL>
 ・MacBook Air 有線LAN 設定 <nifty - USB_LANアダプタ使用>

 ・MacAir で体重を記録

■Mac mini
  ・
Mac mini 購入 (120GB MB463J/A、Early 2009)
 ・Mac mini と液晶テレビ(HDMI 端子)を接続
 ・Mac mini で iPhoto がフリーズ        <メモリ増設で解決>
 ・
起動ディスクに Windows が表示されない <解決>
 ・Mac mini (Early2009, SnowLeopard) に Windows8Proをインストールした後、BootCamp3.xをインストール
 ・
Mac mini 購入 (MD387J/A2012年10月モデル)

■iPod
 ・
iPod toutch 同期が進まないトラブルの対応方法

MacBook Air をインターネットに接続する設定 <USB-LANアダプタ>

ネットへの接続設定で時間を無駄にしたのでメモしておきます。

■環境
 ・プロバイダ   :nifty
 ・接続サービス :NTT フレッツ光
 ・終端端末機器 :GE-ONU             (NTTからのレンタル品)
 ・パソコン     :MacBook Air
 ・OS        :Mac OS X 10.6.8       (Snow Leopard)
 ・接続方法    :USB-LANアダプタを使用 (LUA3-U2-ATX)

■設定方法
 時間を無駄にしたのは、OSのネット設定です。
 PPPoE と アカウント名に何を設定するかで時間をとりました。
 以下の設定で接続できるようになりました。

Usblan

■使用したUSB-LANアダプタ

« 2012年3月 | トップページ | 2012年5月 »