Java: 将 JScrollPane 添加到 JTextArea
Java: Adding JScrollPane to JTextArea
我需要一些帮助来为我的 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);
}
我已经删除了大部分不必要的代码,这应该是解决我的问题所需的最低限度。
如果你碰巧需要完整的代码:http://pastebin.com/v6D8PrsB
感谢您的帮助。
您正在将文本区域添加到 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
您需要向 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 将 window 或 "viewport" 提供给数据源——例如文本文件。该数据源是由 JViewport 视图显示的 "scrollable client"(又名数据模型)。一个 JScrollPane 基本上由 JScrollBars、一个 JViewport 以及它们之间的连接组成,如右图所示。 JavaDoc-JScrollPane
我需要一些帮助来为我的 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);
}
我已经删除了大部分不必要的代码,这应该是解决我的问题所需的最低限度。 如果你碰巧需要完整的代码:http://pastebin.com/v6D8PrsB
感谢您的帮助。
您正在将文本区域添加到 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
您需要向 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 将 window 或 "viewport" 提供给数据源——例如文本文件。该数据源是由 JViewport 视图显示的 "scrollable client"(又名数据模型)。一个 JScrollPane 基本上由 JScrollBars、一个 JViewport 以及它们之间的连接组成,如右图所示。 JavaDoc-JScrollPane