charvaが原理を実現して初めて探ります.


eclipseでは、まず一般的なswingプログラムに従って開発し、インターフェースを描きます.端末に切り替えが必要な場合は、import部分を修正して、import charva.****に変更すればいいです.
に従って
http://www.iteye.com/topic/77387「win 32の下でcharvaをコンパイルして、demoの小さな実験を実行します.」
対照的に、charvaは、図コントロール以外のすべての出力コントロールインターフェースを実現している.したがって、開発過程においては、グラフィカルコントロールを使わない限り、charvaに切り替えることは問題ないはずです.
jbuttonを例にとって、どのように図形を描きますか?
jpanel southpanel=new jpanel();
jbutton cance lbutton=new jbutton()
cancel button.settext(「cancel」);
south panel.add(cancel button、null);
swingコンポーネントを使うときは、jframから、サブセクションのpaintメソッドを一重に呼び出します.
charvaコンポーネントを使う時も、jframからサブセクションのdrawメソッドを次々と呼び出します.
charvaに対するjbuttonのコンポーネントを見ることができます.
    public void draw() {        super.draw();        。。。。。。        toolkit term = toolkit.getdefaulttoolkit();        term.setcursor(origin);        。。。。。。        term.addstring(">", 0, colorpair);    }
まずsuper.drawを呼び出します.枠を描き、座標を計算し、文字列を描きます.
   toolkit term = toolkit.getdefaulttoolkit();   term.addstring(" ", toolkit.a_reverse, colorpair);
画面を描く時、本当にtoolkit類を呼び出してデータを画面に描き出すのが見えます.
toolkit.javaを開く
public native void addstring(string str_, int attrib_, int colorpair_);
この方法はnativeのものと見られます.
tookit.cファイルでjava_を見ました.charva_awt_toolkit_addstring方法は、toolkit.javaのaddstringの実現である.
はい、ここまでです.下の絵を描く過程を考えないで、私達はcharvaがどのように働いているか分かります.
dosの下で、右端の枠がそろっていないことが分かりました.幅が大きすぎて、jcomponent類のdraw方法を調べます.
        if (_border != null) {            _border.paintborder(this, 0,                    origin.x, origin.y,                    this.getwidth(), this.getheight());        }
幅計算の際には、this.getwidth()を呼び出して取得したものと見られます.探し続けて、jbuttonの中で、get widthの実現を見ました.
    public int getwidth() {        insets insets = super.getinsets();        return super.getlabelstring().length() + 2 + insets.left + insets.right;    }
ははは、問題の鍵が見つかりました.長さを計算する時、彼はデータ文字列の長さに合わせて、insetsの対象の左右距離を加えて全体の長さを計算しました.
問題解決の兆しが見えました.いくつかのオブジェクトを並べて考えると、文字の長さが違っていますが、同じ幅で描きたいです.問題解決はinsetsオブジェクトを探すしかないです.insetsはまたborderの対象によって計算されました.それでは、私達のポイントはborderを解決することです.どのようにborderを修正しますか?まだborderがどのように働いているかを研究していません.今度また研究に来ますが、やっと入り口が見つかりました.crc=「/imags/smile/iconggrin.gif」