2

皆さん、こんにちは

ユーザーが編集できない Swing コンポーネントに 15 行の ASCII ファイルを表示する必要があるアプリケーションがあります。

以下は、ASCIIファイルをバイト単位で読み取る私のコードです。Swing では JTextArea.setEditable(false) が適切であると説明してくれた有益なコメント作成者に感謝します。

ただし、ASCII ファイルをまったく異なるものに個人的に作成した場合、私のコードは数字の文字列を表示するだけです。私が間違っていることと、ASCII文字自体を表示する方法を知っている人はいますか?

import java.io.*;
import javax.swing.*;

public class LoadMap extends JFrame {
    public LoadMap() throws IOException {
        FileInputStream fIn = new FileInputStream("map.srn");
        BufferedReader rd = new BufferedReader(new InputStreamReader(fIn, "US-ASCII"));
        String map = "";
        JTextArea mapArea = new JTextArea(15, 50);

        try {
            int c;
            while ((c = rd.read()) != -1) {
                map= map + c;
            }
        } finally {
            if (rd != null) {
                rd.close();
            }
        }
        mapArea.setText(map);
        mapArea.setEditable(false);
        add(mapArea);
        pack();
        setVisible(true);
    }
}
4

7 に答える 7

1

JTextArea を使用して呼び出す

setEditable(false);

ユーザーがデータを編集できないようにする

私はちょうどあなたのコードを読んで、それが包括的な十分な答えではないことに気付きました. ラベルに「+」を付けることはできません。あなたがする必要があるのは、最初にテキストを読んでどこかに保存してから呼び出すことです

setText(yourTextAsString);

画面上のテキスト コンポーネント (私はまだ JTextArea を使用します) で、テキスト領域をフレームに追加する必要があるため、コードは次のようになります。

public LoadMap() {
     String data = // read your data
     JTextArea textArea = new JTextArea();
     textArea.setText(data);
     textArea.setEditable(false);
     setLayout(new GridLayout());
     add(textArea);
     pack();
     setVisible(true);
}

Swing コンポーネントの使用に関する詳細情報を取得するには、 Swing チュートリアルを読むことをお勧めします。

于 2009-02-25T10:26:19.620 に答える
1

JTextArea を使用して setEditable(false) を呼び出します。

https://docs.oracle.com/javase/1.5.0/docs/api/javax/swing/text/JTextComponent.html#setEditable(ブール値)

于 2009-02-25T10:26:30.353 に答える
1

ループ内で文字列を作成し、終了したらその文字列を JLabel に入れることができます。

于 2009-02-25T10:27:35.890 に答える
1

これは私をキャプテン自明のように感じさせますが、それでも、最初にテキスト全体をロードしてから、目的のテキストを使用してラベルを作成するだけです. または、他のポスターが正しく示唆しているように、複数行のコンテンツにより適しているため、JTextArea を使用します。

于 2009-02-25T10:28:15.700 に答える
0

JTextArea を使用して読み取り専用に設定できます。

jtextarea.setEditable(false);
于 2009-02-25T10:28:50.130 に答える
0

ここ:

String map = "";
int c;
while ((c = rd.read()) != -1) {
    map= map + c;
}

文字列にintを追加して何をしているのか。

代わりにそれらを char にキャストする必要があります。

int c;
while ((c = rd.read()) != -1) {
    map= map + ( char ) c;
}

これらの質問では、はるかに優れたパターンを見ることができます。

ファイルの内容から Java 文字列を作成するにはどうすればよいですか?

https://stackoverflow.com/questions/181634/simplest-effective-ways-to-read-binary-and-ascii-files-to-string-or-similar-in-v/324792#324792 (Java 部分を参照)

于 2009-02-28T07:37:43.510 に答える