如何让JTextArea
滚动,插入位置始终显示为用户键入更多的文本?
这似乎是一个愚蠢的问题给我,我觉得它一定已经问过,但我已搜查,并不能找到答案。
我有一个多行文本区域,嵌入在JScrollPane
。 如果用户保持打字,直到他充满文本区域,最终插入符号变为不可见(如下图所示的区域),并且用户无法看到他正在打字。 这似乎很奇怪,这将是默认行为。 什么我需要做,以确保文本区域始终滚动到插入符号是线。
我应该指出,线缠绕在文本区域启用。
如何让JTextArea
滚动,插入位置始终显示为用户键入更多的文本?
这似乎是一个愚蠢的问题给我,我觉得它一定已经问过,但我已搜查,并不能找到答案。
我有一个多行文本区域,嵌入在JScrollPane
。 如果用户保持打字,直到他充满文本区域,最终插入符号变为不可见(如下图所示的区域),并且用户无法看到他正在打字。 这似乎很奇怪,这将是默认行为。 什么我需要做,以确保文本区域始终滚动到插入符号是线。
我应该指出,线缠绕在文本区域启用。
在我看来, setXxXSize()
方法是与组件数量有限使用,并牢记Layout
中使用的后面,这取决于Layout Manager
尊重程序员提供的施胶提示。
因此,对于像部件JTextArea
,其Rows
和Columns
是足够充分,以提供一个提示的Layout
关注来计算它的大小,不应该与一个硬编码大小使用一些相关联的, setXxXSize()
方法,尽可能。
在这里,我已经提供了相同的示例代码:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.EventHandler;
import javax.swing.*;
public class DialogWithScroller
{
private JFrame frame;
private JButton showButton;
private MyDialog myDialog;
private void displayGUI()
{
frame = new JFrame("Dialog ScrollPane Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel contentPane = new JPanel(new BorderLayout(5, 5));
showButton = new JButton("Show Dialog");
showButton.addActionListener((ActionListener)
EventHandler.create(ActionListener.class,
DialogWithScroller.this, "buttonActions", ""));
contentPane.add(showButton);
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public void buttonActions(ActionEvent ae)
{
myDialog = new MyDialog(frame
, "TextArea with ScrollPane", true);
}
public static void main(String[] args)
{
Runnable runnable = new Runnable()
{
@Override
public void run()
{
new DialogWithScroller().displayGUI();
}
};
EventQueue.invokeLater(runnable);
}
}
class MyDialog extends JDialog
{
private JTextArea tArea;
private JButton hideButton;
private ActionListener buttonActions =
new ActionListener()
{
@Override
public void actionPerformed(ActionEvent ae)
{
MyDialog.this.dispose();
}
};
public MyDialog()
{}
public MyDialog(Frame owner, String title, boolean modal)
{
super(owner, title, modal);
displayGUI();
}
private void displayGUI()
{
JPanel contentPane = new JPanel(
new BorderLayout(5, 5));
contentPane.setBorder(
BorderFactory.createTitledBorder(
"My Personal Text Area"));
/*
* Here one can simply initialize the
* JTextArea like this too, using the
* constructor itself for specifying
* the Rows and Columns, which will
* help the layout concern to determine
* its size
*/
tArea = new JTextArea(20, 20);
tArea.setLineWrap(true);
tArea.setWrapStyleWord(true);
JScrollPane textScroller = new JScrollPane(tArea);
//textScroller.setViewportView(tArea);
hideButton = new JButton("Hide Dialog");
hideButton.addActionListener(buttonActions);
contentPane.add(textScroller, BorderLayout.CENTER);
contentPane.add(hideButton, BorderLayout.PAGE_END);
setContentPane(contentPane);
pack();
setLocationByPlatform(true);
setVisible(true);
}
}
它总是被认为是一种明智的做法来调用Window.pack() ,容器,这将导致该窗口的大小,以适合其子组件的优选尺寸和布局上。 虽然这样的电话, 程序员添加完所有组件的容器和容器设置为可见状态后前必须进行。