2016-11-15 18 views
1

私はこのようなコードを持っています。私はすべての細部を削減しましたが、このテキスト領域はボタンを押すと変更され、テキスト領域を変更するだけでした。スクロールが追加されませんでした。スクロール・ポリシーを常に設定しようとしましたが、エラーを戻します。このパネルは、BorderLayout.CENTERを含む別のパネルに追加され、そのパネルがJFrameに追加されます。JTextAreaをJScrollPaneに変更するにはどうすればよいですか?

public class Tester extends JFrame{ 
    JPanel panel = new JPanel(); 
    public static void main(String[] args) { 
     new Tester(); 
    } 
    public Tester(){ 
     setSize(1300, 700); 
     setTitle("A Bar Chart"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     panel(); 
     setVisible(true); 
    } 
    public void panel(){ 
     JTextArea text = new JTextArea(); 
     text.setPreferredSize(new Dimension(100, 100)); 
     JScrollPane pane = new JScrollPane(text); 
     JButton button = new JButton("a"); 
     button.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      text.setText("asd\nasdasd\nasdasd\nasdasd\nasdasd\nasdasd\na\na\na\n"); 

     } 
     }); 
     panel.add(pane); 
     panel.add(button); 
     add(panel); 
    } 
} 

私はちょうど行って簡単にしていると思います。おそらく問題は、setTextのサイズが変更されず、スクロールが表示されない場合です。だから、おそらく質問は、スクロールが現れるようにスクロールを表示させたり、サイズを変更したりする方法です。

+0

'私はすべてのdetails'を削減 - はい、問題が解決されたウェルまでは、詳細は関連しているのか分かりません。問題を示す適切な[mcve]を投稿してください。これは、スクロールペイン、テキストエリア、およびテキストエリアにデータを追加するボタンがあるフレームです。スクロールは、テキスト領域の優先サイズがスクロールペインのサイズよりも大きい場合にのみ発生します。 'このパネルは、BorderLayout.CENTERで別のパネルに追加されます。パネルは必要ありません。スクロールペインをフレームに直接追加するだけです。 – camickr

+0

私は簡単なコードで問題をシミュレートすることができました。 –

+0

この[トピック](http://stackoverflow.com/questions/13096045/adding-scrollpane-to-jtextarea)は役に立ちます – Squiddie

答えて

3

あなたがして足で自分を撮影している:

text.setPreferredSize(new Dimension(100, 100)); 

JTextAreaにの大きさに、それは以降の推奨サイズを制限することによって、あなたが見ている問題になりますように、この方法を制限することはありません、JTextAreaにすることができますそのテキストがより多くの部屋を占有し、次に好ましいサイズが許す場合、適切に拡張しないでください。代わりに、JTextAreaの列と行のプロパティを設定します。これは適切なコンストラクタで行うのが最も簡単です。

JTextArea text = new JTextArea(TEXT_AREA_ROWS, TEXT_AREA_COLUMNS); 

例えば、

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import javax.swing.*; 

public class Tester2 extends JPanel { 
    private static final int TA_ROWS = 30; 
    private static final int TA_COLS = 50; 
    private JTextArea text = new JTextArea(TA_ROWS, TA_COLS); 

    public Tester2() { 
     text.setFocusable(false); 
     JScrollPane scrollPane = new JScrollPane(text); 
     scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 

     JPanel buttonPanel = new JPanel(); 
     buttonPanel.add(new JButton(new ButtonAction("Press Me"))); 

     setLayout(new BorderLayout()); 
     add(scrollPane); 
     add(buttonPanel, BorderLayout.PAGE_END); 
    } 

    private class ButtonAction extends AbstractAction { 
     public ButtonAction(String name) { 
      super(name); 
     } 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      StringBuilder sb = new StringBuilder(); 
      for (int i = 0; i < 80; i++) { 
       int wordsInSent = (int) (5 + 6 * Math.random()); 
       for (int j = 0; j < wordsInSent; j++) { 
        int wordLength = (int) (5 + 8 * Math.random()); 
        for (int k = 0; k < wordLength; k++) { 
         char c = (char) ('a' + (int)(Math.random() * ('z' - 'a'))); 
         sb.append(c); 
        } 
        sb.append(" "); 
       } 
       sb.append("\n"); 
      } 
      text.append(sb.toString()); 
     } 
    } 

    private static void createAndShowGui() { 
     JFrame frame = new JFrame("Tester2"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(new Tester2()); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> createAndShowGui()); 
    } 
} 
+0

それはうまく動作します。いくつかの理由から、私はこれを試したと思って、それは動作しませんでしたが、多分私は間違って何かをやっていた。とにかくありがとうございました。 –

+0

@TienanhNguyen:テキスト領域のランダムな単語の例を編集する –

関連する問題