Java:将JScrollPane添加到JTextArea

Java:将JScrollPane添加到JTextArea,java,swing,jscrollpane,jtextarea,Java,Swing,Jscrollpane,Jtextarea,我需要一些帮助将滚动条添加到我的JTextArea 我现在正在编写的代码似乎将滚动条添加到了框架中,而不是文本区域。该栏可见,但当文本超出框架边界时,不会发生任何变化 下面的代码不包含任何事件处理: import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.Scanner; import java.io.*; public class Simplenotepad extends JFra

我需要一些帮助将滚动条添加到我的JTextArea

我现在正在编写的代码似乎将滚动条添加到了框架中,而不是文本区域。该栏可见,但当文本超出框架边界时,不会发生任何变化

下面的代码不包含任何事件处理:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Scanner;
import java.io.*;

public class Simplenotepad extends JFrame implements ActionListener {
// private TextArea textArea = new TextArea("", 0, 0,
// TextArea.SCROLLBARS_VERTICAL_ONLY);

private JTextArea textArea = new JTextArea(10, 15);

private JScrollPane scrollPane = new JScrollPane(textArea);

private MenuBar menuBar = new MenuBar(); // first, create a MenuBar item

private Font f = new Font("Verdana", Font.PLAIN, 10);

private Menu file = new Menu();
private MenuItem open = new MenuItem();
private MenuItem save = new MenuItem();
private MenuItem exit = new MenuItem();

private Menu format = new Menu();
private MenuItem wrap = new MenuItem();
private MenuItem noWrap = new MenuItem();
private Menu font = new Menu();
private MenuItem s10 = new MenuItem();
private MenuItem s12 = new MenuItem();
private MenuItem s14 = new MenuItem();
private MenuItem s16 = new MenuItem();
private MenuItem s18 = new MenuItem();
private MenuItem s20 = new MenuItem();

private Menu edit = new Menu();
private MenuItem clear = new MenuItem();

private Menu help = new Menu();
private MenuItem about = new MenuItem();

private String saveTest = "";

public Simplenotepad() {

    this.setSize(250, 250);
    this.textArea.setFont(f);
    this.setTitle("A Simple Notepad");
    this.textArea.setLineWrap(true);

    this.scrollPane.add(textArea);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    this.getContentPane().setLayout(new BorderLayout());
    this.getContentPane().add(textArea);
    this.getContentPane().add(scrollPane, BorderLayout.EAST);

    this.scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

}
我已经删除了大部分不必要的代码,这应该是解决我的问题所需的最低限度。 如果您碰巧需要完整的代码:


感谢您的帮助。

您正在将文本区域添加到JFrame中。只需添加滚动窗格

this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(scrollPane, BorderLayout.EAST);
还有,试试看

textArea.setPreferredSize(new Dimension(x,y)); OR
this.setPreferredSize(new Dimension(x,y)); 
//无论你想控制的是什么 //x和y应该是宽度和高度,大约是您认为应该的大小


例如,检查:

您需要将可滚动组件添加到ViewportView:

public Simplenotepad() {

this.setSize(250, 250);
this.textArea.setFont(f);
this.setTitle("A Simple Notepad");
this.textArea.setLineWrap(true);

// this.scrollPane.add(textArea); //This not correct, add Component to Viewport View
this.scrollPane.setViewportView(textArea);
setDefaultCloseOperation(EXIT_ON_CLOSE);

this.getContentPane().setLayout(new BorderLayout());
//this.getContentPane().add(textArea);
this.getContentPane().add(scrollPane, BorderLayout.CENTER);

this.scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
this.setVisible(true);}

JViewport提供了一个窗口或数据源上的“视口”——例如,文本文件。该数据源是JViewport视图显示的“可滚动客户端”(也称为数据模型)。JScrollPane基本上由JScrollBars、JViewport和它们之间的连接组成,如右图所示

删除
this.getContentPane().add(textArea)
这个.scrollPane.add(textArea)。文本区域已经放在滚动窗格中了。啊,这就解决了问题。谢谢!(-1)获取有关尝试设置文本区域首选大小的注释。当文本区域的首选大小大于滚动窗格的大小时,滚动条会自动工作。如果硬编码文本区域的首选大小,则在动态向文本区域添加/删除文本时,首选大小不会改变,因此滚动条将无法正常工作。不要设置组件的首选大小,每个组件都有责任设置自己的首选大小。