私が作成しているJavaアプリケーションは、Swingフレームワークを利用しています。私はSwingを初めて使いました。ファイルからテキストを表示しようとしています。問題は、以下のコードを使用してすべてのテキストが表示されるわけではないということです。Swing JPanelサイズ変更:テキストファイルの内容に合わない - テキストを切り捨てる
これまでのところ、私はすべて含まれてJFrameのコンポーネントを作成しましたコード
:その内
//initial frame that holds everything
frame = new JFrame(WINDOW_NAME);
frame.setSize(new Dimension((SCREEN_WIDTH.intValue()/100)*80, (SCREEN_HEIGHT.intValue()/100)*80));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
は、私は、ユーザーが通過読み取ることができるようにスクロールペインを作成しました垂直方向にスクロールしてテキストファイルの内容を表示します。かなり大きなテキストファイルです - 本の中のいくつかの章です。
JScrollPane scrollPane = new JScrollPane(contentPane);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setWheelScrollingEnabled(true);
frame.setContentPane(scrollPane);
スクロールペインにはJPanelオブジェクトが含まれています。私はこのためにGridBagLayoutレイアウトマネージャを利用しました。パネル自体には、テキストファイルのURLをインスタンス化したEditorPaneがあります。
JPanel contentPane = new JPanel();
contentPane.setPreferredSize(new Dimension(frame.getWidth(), frame.getHeight()));
buildAndAddComponentsToFrame(contentPane);
private void buildAndAddComponentsToFrame(Container container) {
container.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.gridx = 0;
c.gridy = 0;
c.weightx = 1.0;
c.weighty = 1.0;
c.insets = new Insets((frame.getHeight()/100)*10, (frame.getWidth()/100)*10, (frame.getHeight()/100)*10, (frame.getWidth()/100)*10);
//create a non-editable editor pane to hold the contents of the religious texts
JEditorPane textContainer = new JEditorPane();
textContainer.setEditable(false);
//TODO load the content of the pane from a URL (local)
File textFile = new File(*my text file*);
try {
textContainer.setPage(textFile.toURI().toURL());
} catch (IOException e) {
e.printStackTrace();
}
container.add(textContainer,c);
}
これは動作します - 私は、全体的にファイルの内容を読んではなくすることができるよ:それは、それがJPanelのオブジェクトの高さに収まるかを示しています。 ScrollPane内にテキストコンテンツを配置したくないのですが、JPanelの高さをテキストファイルの内容との相対的なものにする必要があります。
これを達成する方法はありますか?私はコンテナを使って "テキストエリア"をマイクロソフトワードドキュメントのように見せています。そのため、インセットはjframeの途中の紙文書のように見えますが、これは意図的です。
ご協力いただきありがとうございます。申し訳ありませんが、私の説明が少し曖昧でした。説明できるようにスクリーンショットを追加しました。
なぜJTextPaneをJScrollPaneのビューポートに配置しないのですか? –
フレームの真ん中に白いコンテンツ領域を残したいので、検索バーのようにコンテンツペインの周りに追加する他のコンポーネントがあります –
これを行うことはできますが、JScrollPaneを囲むだけです。 –