Input Method Frameworkによる
テキストエディタ
2010.12.01

Language

最後の修正: 2013.06.26

トピックス

閉じた図形のマウスヒットテスト
2010.08.26


閉じていない図形のマウスヒットテスト
2010.08.26


任意2曲線の交点計算
2010.09.01


点から曲線への垂線の計算
2010.09.01


2曲線への共通垂線の計算
2016.10.20


Input Method Frameworkによる
テキストエディター
2010.12.01


部品ライブラリ
2012.09.16


専用カラーチューザー
2012.9.23



1. ソースコードダウンロード

=> TextBox.zip


2. テスト項目・方法

このテストはjavax.swing.JTextArea、javax.swing.JTextPane、javax.swing.EditorPaneのテストとは全く異なる。そもそもSwingのテキストエディターはDrawing Toolには使えない。テキストが任意の倍率で表示できないからである。
このテストにおけるテキストエディターはInput Method framework, Java 2D Graphicsのモジュールで構成している。図2に示すように任意の倍率で表示できる。
このテストの目的は、上記テキストエディターの動作テストある。テキスト入力、コピー&ペースト、削除、テキストの属性設定などは一通りテストできる。
:
• Input Method framework =>Java Input Method Framework テクノロジ, Java™ Input Method Framework (IMF) Technology (en)
• Java 2D Graphics =>Java Tutorial Trail: 2D Graphics



3. テスト結果


図1 テキストボックス の初期表示(上段:英語テキスト、下段:日本語テキスト)

あくまでも初期表示なので、下段に英語テキストを書いてもよい。
 


図2 Zoomにより図形、テキストを縮小表示


4. テストの操作マニュアル

操作

説明

編集するテキスト
ボックスの選択

表示図形の内部をクリックすると図1のように緑色の枠が表示される。緑色の枠が表示されているテキストボックスは編集可能である。図1の下段のコーナーRつき矩形(RounRectangle)の内部をクリックすると、その内部に含まれるテキストボックスが編集可能になる。

表示図形のズーム
(拡大/縮小)

ボタンを押すと表示倍率のダイアログが表示される。
・ZoomToはコンボボックスで倍率を選択する。
・Percentは1%刻みで指定できる。上下の矢印を押すか、直接数字を入れてもよい。

: propertyタブは現在使っていない。 

元へ戻す、再実行

undo(元へ戻す), redo(再実行)ボタン
もし変更がない場合、図1のように矢印が灰色で表示される(disable状態)。 

編集

削除

editボタンをクリックしプルダウンメニューから選ぶ。 
cut, copy, paste, del (delete)コマンドはテキスト編集に使用する。 

:
• cut, copyをクリックする前に、マウスドラッグでテキストを選択しておくこと。
選択したテキストはピンク色の背景色で示される。


また一番下のステータスパネルにテキストの選択範囲がつぎのように表示される。

• paste: 他のアプリケーション、例えばMicrosoft Wordで コピーしたテキストでもペーストできる。
但し属性は失われplainテキストでペーストされる。

• del: テキストを選択してBackspaceキー、Deleteキーを押しても同じ。

フォント属性設定
(フォントメニュー)

 

左から
・フォントファミリを選ぶコンボボックス
・フォントサイズを選ぶコンボボックス
・B : 太字(Bold)オン/オフ
・I :イタリック
U : 下線
・X2 : 下付き文字
・X2 : 上付き文字
A : フォントの色

: A ボタンをクリックするとつぎの専用カラーチューザが開く。
これに関する操作・説明=>専用カラーチューザ(Custom Color Chooser)

  

:
(1)テキストボックス内でマウスをクリックしてテキストカーソル(キャレット)を移動したとき、テキストカーソルの前の文字属性が上のフォント属性設定メニューに表示される。
(2) テキストボックス内でマウスをドラッグしてテキストを選択したとき、選択したテキストに共通属性があれば上のフォント属性設定メニューに表示される。

[例]Dialog、16ポイント、Bold、Undelineのテキストを選択

 
 

4. Test code 概要

mainパッケージ

クラス

説明

DrawMain

public class DrawMain extends JFrame
このテストのメインクラス
API=>DrawMain(このページ)

DrawPanel

public class DrawPanel extends JPanel
図形、テキストボックス描画パネル。DrawTop DrawPanelのサブセット。
API=>DrawTop DrawPanel

DrawParameters

public class DrawParameters
描画に必要なパラメータをまとめたクラス。DrawTop DrawParameters のサブセット。
API=>DrawTop DrawParameters

ListenerPanel

public class ListenerPanel extends DrawPanel implements KeyListener, MouseListener, InputMethodListener, InputMethodRequests
キーボード、マウスなど入力デバイスからのイベント、Input Method frameworkからのイベントを処理する。DrawTop ListenerPanelのサブセット。
API=>DrawTop ListenerPanel

ObjectTable

public class ObjectTable
頻繁に利用するオブジェクトを設定したテーブル。DrawTop ObjectTableのサブセット。
API=>DrawTop ObjectTable


textBoxパッケージ

クラス

説明

AttributedInterval

public class AttributedInterval implements Serializable, Cloneable
属性つき文字列を分解したとき、ある属性をもつ文字列の区間を表す。
API=> DrawTop AttributedInterval

AttributedStringUtil

public class AttributedStringUtil implements Serializable
属性つき文字列の処理メソッドをまとめたクラス。
API=>DrawTop AttributedStringUtil

CaretPosition

public class CaretPosition
TextBoxのカーソル(キャレット)の表示位置を表す。
API=>DrawTop CaretPosition

FontStyle

public class FontStyle
・フォントに属性を設定する。
・デフォールトフォント属性を返す。
・フォントメニュー(フォント属性設定)に設定されている属性を取得する。
・フォントメニューにフォント属性を設定する。
・テキストの範囲を指定して、その区間のフォント属性を取得する。
API=>DrawTop FontStyle

Interval

public class Interval implements Serializable
AttributedStringUtil、TextBoxで使われる。文字列の区間を表すクラス。
API=>DrawTop Interval

LineBreaker

public class LineBreaker
java.awt.font.LineBreakMeasurerを使って、属性つき文字列を表示領域の幅に収まるよう複数行に割り付ける。
API=>DrawTop LineBreaker

SerializableAttributedString

public class SerializableAttributedString implements Serializable, Cloneable
java.text.AttributedStringはSerializableではないためファイルには書き込めない。またクリップボード経由のデータ転送(Copy&Paste)にも使えない。このためSerializable インターフェイスをインプリメントしたSerializableAttributedStringクラスを用意する。
API=> DrawTop SerializableAttributedString

ShapeContainer public class ShapeContainer
DrawTop ShapeContainerのサブセット。ShapeContainerは種々の図形要素を格納する容器である。ShapeContainerがグループ図形でなければ、直線、折れ線、矩形など基本図形要素を持たせる。グループ図形の場合は、グループ要素(GroupElement)を持たせ、グループ要素にグループの基本図形要素オブジェクトを持たせる。
API=> DrawTop ShapeContainer
TextBox

public class TextBox implements MouseListener, MouseMotionListener, Serializable
テキストを入力し編集するテキストエディタ。テキストには、フォントファミリィ, フォントサイズ、Plain∙ Bold∙ Italicの属性、アンダーライン、上付き/下付きの属性、色属性が設定できる
API=>DrawTop TextBox

TextUndoSetup

public class TextUndoSetup
テキストの挿入∙ 削除のundo設定を行う。1文字ごとにundo設定を行うのは不経済なので、連続的に入力された文字列や、Back spaceキーで連続的に削除された文字列には一括してundo設定を行う。
API=>DrawTop TextUndoSetup


utilパッケージ

クラス

説明

ButtonOfColorChooser

public class ButtonOfColorChooser extends JButton implements ActionListener, ColorSelectionListene
このテストではフォント属性設定Aボタンが該当する。このボタンを押すと下のCustomColorChooserDialogが開く。
API=> DrawTop ButtonOfColorChooser

ButtonOfPulldownMenu

public class ButtonOfPulldownMenu extends JMenuBar
編集のeditボタン。DrawTop ButtonOfPulldownMenuのサブセット。
API=>DrawTop ButtonOfPulldownMenu

ButtonOfToggle

public class ButtonOfToggle extends JToggleButton implements ItemListener
Zoom, Undo, Redo, Del, フォント属性設定のB(Bold), I(Italic), U, X2, X2ボタンなど。
API=>DrawTop ButtonOfToggle

ComboBox

public class ComboBox extends JComboBox implements ActionListener
フォント属性設定のフォントファミリ、フォントサイズを選ぶコンボボックス
API=>DrawTop ComboBox

ContainerManager

public class ContainerManager
DrawTop ContainerManagerのサブセット。図形データをArrayListで管理する。
API=>DrawTop ContainerManager

CustomColorChooserDialog

public class CustomColorChooserDialog extends JDialog implements ActionListener, WindowListener
カスタムカラーチューザー。
API=>DrawTop CustomColorChooserDialog
=>トピックス 専用カラーチューザ(Custom Color Chooser)

DialogOfZoom

public class DialogOfZoom extends JDialog
表示図形のズームのダイアログ。
API=>DrawTop DialogOfZoom

DrawMenu

public class DrawMenu
ツールバーのボタン、コンボボックスなどを設定する。
API=> DrawMenu (このページ)

Edit

public class Edit implements ClipboardOwner
DrawTop Editのサブセット。テキストのカット/コピー&ペースト
API=>DrawTop Edit

StatusPanel

public class StatusPanel extends JPanel
画面の最下段のステータスパネル。テキストボックス内でのテキストカーソルの位置、テキストを選択したときの範囲などを表示する。
API=>DrawTop StatusPanel

TransferableAttributedString

public class TransferableAttributedString implements Transferable, Serializable
Cut/Copy&Pasre操作を行う際、クリップボード経由でデータを転送するときのテキストのデータ形式。
API=>DrawTop TransferableAttributedString

UndoConstants

public class UndoConstants
(a)コマンドの操作コード(ADD, DELETE, CHANGE)と
(b)操作対象:(CONTAINER(ShapeContainerオブジェクト), TEXTBOX(TextBoxオブジェクト), PAINTSTYLE(PaintStylelオブジェクト), SIZE_POSITION(位置、サイズ), SHAPE(図形データ)
を表す。
API=>DrawTop UndoConstants

UndoDrawManager

public class UndoDrawManager extends UndoManager
javax.swing.undo.UndoManagerの拡張形。
API=>DrawTop UndoDrawManager

UndoableDrawEdit

public class UndoableDrawEdit extends AbstractUndoableEdit
AbstractUndoableEditの拡張形。
API=>DrawTop UndoableDrawEdit

Util

public class Util
DrawTop Utilのサブセット。簡単な幾何計算のメソッド、ソートメソッド、フォーマットつきのプリントアウトメソッドを集めたクラス。
API=>DrawTop Util

ViewUtil

public class ViewUtil
DrawTop ViewUtilのサブセット。画面のZoomを行う。
API=>DrawTop ViewUtil



5. Test code API

public class DrawMain extends JFrame

フィールド

説明

scrollPanelSize

protected Dimension scrollPanelSize=new Dimension(800,500);
JScrollPaneのサイズ

statusPanelSize

public Dimension statusPanelSize=new Dimension(800,30);
StatusPanelのサイズ

numOfShapes

static int numOfShapes=2;
DrawPanelに表示する図形の数。このテストではRoundRectangle2Dが2個。


メソッド

説明

main

public static void main(String[] args)
メインメソッド

setFrame

void setFrame()
・DrawMain JFrameの設定を行う。
TabbedPane, DrawPanel, ListenerPanel, StatusPanel, ScrollPane,
・頻繁に使うオブジェクトをObjectTableに登録
ViewUtil, DrawMenu, ContainerManager, Edit, UndoDrawManager, CustomColorChooserDialog

createToolBarPanel

public JPanel createToolBarPanel()
ボタン、コンボボックスなどが並ぶ最上段のツールバーを作成する。

createShapes

public static void createShapes()
DrawPanelに描画する図形を作成する。このテストではRoundRectangle2Dが2個。

createText

public static AttributedCharacterIterator[] createText()
DrawPanelに描画する図形RoundRectangle2Dの内部に描画されるTextBoxに設定する属性つき文字列(Attributed String)を設定する。



public class DrawMenu

フィールド

説明

imageWidth, imageHeight

public final static int imageWidth=20, imageHeight=20;
ボタンに張り付ける画像のサイズ。Undo, Redo, Del, フォント属性設定のB(Bold), I(Italic), U, X2, X2ボタンなどの画像は全てこのサイズ。

menuItemImageWidth,
menuItemImageHeight

public final static int menuItemImageWidth=64, menuItemImageHeight=10;
プルダウンメニューのメニューアイテムに張り付ける画像のサイズ

buttonWidth, buttonHeight

public final static int buttonWidth=22, buttonHeight=22;
ボタンのサイズ。

DefaultFont

public final static Font DefaultFont=new Font(Font.DIALOG, Font.PLAIN, 12);
デフォールトフォント。

MenuFont

public final static Font MenuFont=new Font(Font.DIALOG, Font.BOLD, 12);
ボタンにテキストを表示する時のサイズ。

MenuItemFont public final static Font MenuItemFont=new Font(Font.DIALOG, Font.BOLD, 11);
プルダウンメニューのメニューアイテムにテキストを表示する時のサイズ。
zoom

public static ButtonOfToggle zoom;
zoomボタンオブジェクト。

undo, redo

public static ButtonOfToggle undo, redo;
undo, redoボタンオブジェクト。

edit

public static ButtonOfPulldownMenu edit;
editプルダウンメニューオブジェクト。

del

public static ButtonOfToggle del;
delボタンオブジェクト。

fontFamily, fontSize

public static ComboBox fontFamily, fontSize;
fontFamily, fontSizeコンボボックスオブジェクト。

fontBold, fontItalic, fontUnderline, fontSubscript, fontSuperscript

public static ButtonOfToggle fontBold, fontItalic, fontUnderline, fontSubscript, fontSuperscript;
fontBold, fontItalic, fontUnderline, fontSubscript, fontSuperscriptボタンオブジェクト。

fontColor

public static ButtonOfColorChooser fontColor;
fontColor(A)ボタンオブジェクト


メソッド

説明

createEditGroup

public static JPanel createEditGroup()
ツールバーのzoom, undo, redo, delオブジェクトを設定する。

createFontStyleGroup

public static JPanel createFontStyleGroup()
フォントメニューオブジェクトを設定する。

setFontStyle

public void setFontStyle(FontStyle fontStyle)
フォント属性設定(フォントメニュー)上のオブジェクトでフォントの属性が選ばれたときにこのメソッドを呼んで、テキストボックス内のテキストにフォント属性をセットする。
テキストボックスのフォント属性設定メソッドはsetFontStyle。テキストボックスで選択されたテキストに対してフォント属性設定を設定する。テキストが選択されていなければ何もしない。



Copyright (c) 2009-2013
All other trademarks are property of their respective owners.