2016-10-16 3 views
1

私が作成している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の途中の紙文書のように見えますが、これは意図的です。

ご協力いただきありがとうございます。申し訳ありませんが、私の説明が少し曖昧でした。説明できるようにスクリーンショットを追加しました。

screen shot of GUI

+0

なぜJTextPaneをJScrollPaneのビューポートに配置しないのですか? –

+0

フレームの真ん中に白いコンテンツ領域を残したいので、検索バーのようにコンテンツペインの周りに追加する他のコンポーネントがあります –

+0

これを行うことはできますが、JScrollPaneを囲むだけです。 –

答えて

2

あなたは、いくつかの値にその推奨サイズを強制し、それが保持しているJTextPaneのがよりテキスト大きいがある場合、それは大きな得ることはありません、なぜ迷っている、デフォルトFlowLayoutのを使用して、のJPanelを作成していますその大きさ。これはあなたが上にしている間違いのために起こっていません。

提案:

  • JTextPaneののサイズまたは推奨サイズを制限しないように、JScrollPaneのにJTextPaneのを配置することをお勧め。
  • JPanelにJTextPaneをラップする必要がある場合は、コンポーネントが展開されると展開するJPanelをJPanelに与えます。 BorderLayoutを使用し、JTextPane BorderLayout.CENTERを追加します。それをJScrollPaneのビューポートに配置し、サイズを制限する必要がある場合は、ビューポートをサイズ変更します。
+0

私はこの実装を試してみます - あなたの第2の箇条書きポイントは私には意味があります –

+0

最初のJPanelの_setPreferredSize(...)_メソッド私は欲しかったことを達成しました - あなたの助けに感謝します。 –

関連する問題