エディタの行数表示について

このQ&Aのポイント
  • エディタの行数表示について困っている事と、他のエディタとの比較について説明します。
  • 通常の方法では行数が増えると負荷がかかり、表示が遅くなる問題があります。
  • 他のエディタでは何万行でもレスポンスが悪くならない仕組みがありますが、どのような流れでプログラムを作成すればいいのかわかりません。
回答を見る
  • ベストアンサー

エディタの行数表示について

お世話になっております。 自作でエディタを作成しております。 行数表示の部分で困っている事があります。 色々とインターネットで行数表示のやり方を検索していると、 大体がメインのテキストエリアの行数を取得し、その行数分 行数表示のテキストエリアに追記するようなプログラムが多い と思います。 このやり方だと、行数が何万行にもなった場合に負荷がかかり、 行数の表示にワンテンポ遅くなったりすると思います。 フリーのエディタで、色々なエディタがあると思いますが、 それらのエディタは何十万行にしてもレスポンスが悪くなる ような事がありません。 これはどのような流れでプログラムを作成すればいいのでしょうか。 ちなみに自分が作成している言語はJavaです。 お手数ですが、ご教授頂けると幸いです。

  • Java
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • racene
  • ベストアンサー率70% (21/30)
回答No.1

一番上の行番号だけ覚えておくのが簡単で良いのではないでしょうか。 上下にスクロールしたらその都度それを更新します。 こうすれば、行数取得のコストをかなり減らせるはずです。 当然ですが、画面外の部分については必要がないので行数を表示しません。

wafu1318
質問者

お礼

お礼が遅くなってしまい申し訳ありません。 色々なコンポーネントとスクロールの移動量から 先頭行の行番号を取得することにしました。 FontMetrics fo = te.getFontMetrics(te.getFont()); int font_Height = fo.getHeight(); int slp_Height = slp.getHeight(); int slp_Bar_Height = slp.getHorizontalScrollBar().getHeight(); int firstLine = Math.round(e.getValue() / font_Height); int start_row = ( firstLine == 0 ) ? 1 : firstLine; int end_row = ( ( slp_Height - slp_Bar_Height - font_Height ) / font_Height ) + start_row; try { tel.setText(""); for( ; start_row < end_row; start_row++ ) { tel.getDocument().insertString(tel.getDocument().getLength(), start_row+"\n", null); } tel.getDocument().insertString(tel.getDocument().getLength(), start_row+"", null); } catch (BadLocationException es) { es.printStackTrace(); } ヒントになる発想を最初に頂いたので、 ベストアンサーとさせて頂きます。 今後とも宜しくお願いします。

wafu1318
質問者

補足

ご回答が遅くなり申し訳ありません。 ご指摘頂いた方法で色々と試しているのですが、 先頭行の行番号がどうしても取得できません。 何か良い方法があれば教えて頂けないでしょうか。

その他の回答 (1)

回答No.2

本当に遅くなるかはやってみないとわからないけど、全ての行をそのまま持っているエディタなんて無いんじゃないかな。 #1さんの回答にもあるけど、行数は表示されている部分だけ見えればよいわけで、100行くらいじゃない? あとは表示対象になっている部分までの改行コードの数でも数えればいいんじゃない? そのカウントから表示されている部分までの行数を表示してあげる。 そすれば行数の部分は最低限の情報になるよ。

wafu1318
質問者

お礼

表示されている部分だけの行数を 取得するようにしました。 ご回答ありがとうございました。

関連するQ&A

  • VC++でテキストエディタを作ろうと思っています

    VC++でテキストエディタの作成を考えています。 出来上がったテキストエディタでソースを作成する際に、 行数が表示させられるようにしたいと考えています。 何か良い方法はありませんでしょうか 宜しくお願い致します。

  • フリーのテキストエディタ

    C言語によるプログラムを書くための、 Windows98SEで動作するフリーのテキストエディタを探しています。 しばらくnotepad(メモ帳)を使っていたのですが、もう限界です。 コンパイラがエラーを出してくれて、折角行数まで教えてくれているのに、 その行を自動的に探すことが出来ないのです…(^^;; インデントもスペースで整えなきゃいけないですし…。 出来れば、UNIXのMuleみたいな、TABだけでインデントを整えてくれる ようなヤツがあったら嬉しいのですが。 という訳で、良いものが在ったら教えて下さい。

  • ワード 行数の表示について

    ワード2003を使っています。 ステータスバーに行数を表示させていますが、11行目に図を入れていて、テキストの折り返しを四角にしています。 次の行にカーソルを移動させると、いきなり17行を表示します。 どうしてこうなるのでしょうか? 通常は12行目を表示すると思うのですが。。。

  • Wordの行数と文字数

    Wordで行数と文字数を設定して、文書を作成するのですが、 例えば行数を20行に設定しても21行とか、また別のページでは 19行になってしまいます。文字数にしても、設定した文字数と違ってしまいます。 使い勝手がいまいちなので、テキストエディターに変えようかと思っているのですが、Wordのようの文字数と行数が設定でき、縦書き可能な使い勝っての良いお勧めソフトを教えて頂ければと思います。

  • 行数を求めたい

    テキストファイルには64この整数がスペースを一つずつあけて並んでいます。それが2行あります。 このテキストの行を数えたいのですが、下のプログラムでは6行と帰ってきます。これはなぜなのでしょうか?よろしくお願いします。また、行数のいい求め方がありましたら教えてください。 char s[64]; int gyouretu=0; FILE* fin=fopen(" "."r"); while( fgets(s,63,fin)!=NULL ){ gyousu++; } 実行結果 gyousu=6

  • 行番号が表示されるエディターを知りませんか?

    Windows7を使ってます。 現在付属の「メモ帳」を使って「AutoHotKey L」と,言うソフトでスクリプトを書いてます。 少し書いてCtrl+Sキーを押すと,エラー分の内容が「何行目が悪い」等のメッセージが表示されます。 この時少ない行数ならともかく100以上の行目にエラーが存在しているとなると,一々何行目が数えて問題の行を探すのが大変でしょうがありません。 1行1行の番号を表示するエディターがあればいいと思っていますが,AutoHotKey Lに適したもので1行1行毎に行番号が表示されるエディターを知りませんか?

  • VisualC#エディタ行番号の表示方法

    タイトルのとおり、VisualC#(Visual Studio 2008) のエディタの行番号を表示する方法がわかりません。 ツール→オプション→テキストエディタ とエディタに関する環境設定画面をたどることはできるのですが 行番号の設定項目が見あたらないのです。 そもそも行番号を表示させる機能がついていないのでしょうか? (これは困ります) 行番号の表示ができないため プログラムが異常終了したときにソースを追うのが一手間です。 (わざわざエディタを立ち上げてますので) 初歩的な質問ですが、 ご存じの方が見えましたらご教示願います。

  • 複数のコメント色分け可能なエディタ

    2種以上のコメント色分けが可能なテキストエディタ(フリー)を探しています。 コメントの色分けというのは、引用符(>)などが行頭にあると、その行の色が変わるものです。プログラム言語等の強調文字ではありません。 現在サクラエディタを使っていますが、コメントスタイルは様々に選べるものの、色分けそのものは1種しかありません。 2種以上の色分けが可能なテキストエディタはありますか?プラグインで可能という情報でも結構です。 アウトラインプロセッサのような特殊なテキストエディタは対象外でお願いします。

  • 一太郎のエディタが使いこなせません!

    一太郎(2008)で小説を入力するのに、今までは基本編集で行っていましたが、作業フェーズでエディタが良いと聞いたのですが、使いこなせません。 文字数を1行60文字(最初はこの位が画面内で沢山文字が確認できるので・・・)で設定してあるのに、エディタモードにすると勝手に30文字(縦でも横でも)になってしまいます。 左右、上下に空欄がたくさん。 それに行数が何百行と表示されてますが、アウトラインフェーズの様に行数ごと移動が楽とか、そういうのはないのでしょうか。 行数ではなくページが表示された方が良いのですけれど…。

  • テキストエディターの作り方について

    自分でテキストエディターを作りたいと思いますが、参考になる著書やサイトが見つかりません。 自分が目指すエディターは「秀丸」「桜エディター」等があります。 言語は問いません。 何かいいサイトや著書があれば教えて下さい。 ※プログラムは少しはしってますが、ほぼ初心者に近いです。

専門家に質問してみよう