繁体   English   中英

Java:将JScrollPane添加到JTextArea

[英]Java: Adding JScrollPane to JTextArea

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

我现在正在处理的代码似乎将滚动条添加到框架而不是textArea。 该条是可见的,但是当文本超出框架的边界时,什么也不会发生。

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

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);

}

我删除了大多数不必要的代码,这应该是解决我的问题所需的最低限度的代码。 如果偶然您需要完整的代码: http : //pastebin.com/v6D8PrsB

谢谢你的帮助。

您需要向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基本上由JScrollBar,JViewport及其之间的连线组成,如右图所示。 Javadoc的JScrollPane的

您正在将文本区域添加到JFrame。 只需添加scrollPane。

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的大小,还是应该将宽度和高度设置为您认为应该的大小

有关示例,请检查: https : //docs.oracle.com/javase/tutorial/uiswing/components/scrollpane.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM