java - 我的 JTextArea 继续无限,尽管添加了 LineWrap 等

标签 java swing

套装挥杆训练;

import javax.swing.*;
import java.awt.*;
import static java.awt.Color.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import static javafx.scene.paint.Color.TEAL;
import static javax.swing.JFrame.EXIT_ON_CLOSE;

public class MyFrame extends JFrame{

public MyFrame(){


    setSize(500,500);
    setVisible(true);
    setResizable(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
};

public static class MyPanel extends JPanel{

public MyPanel(){

    setLayout(new GridBagLayout());

    setBackground(BLACK);
    setOpaque(true);

    GridBagConstraints gbc1 = new GridBagConstraints();
    GridBagConstraints gbc2 = new GridBagConstraints();

    gbc1.insets = new Insets(200,0,0,200);
    gbc1.ipadx = 100;
    gbc1.ipady = 100;
    gbc1.gridx = 1;
    gbc1.gridy = 1;

    gbc2.insets = new Insets(0,200,200,0);
    gbc2.ipadx = 150;
    gbc2.ipady = 10 ;
    gbc2.gridx = 1;
    gbc2.gridy = 1;

    JTextArea jta1 = new JTextArea();

    jta1.setLineWrap(true);
    jta1.setWrapStyleWord(true);

    JButton jb1 = new JButton("Have a banana!");

    jb1.setToolTipText("Button prints Banana.");

    ActionListener action1 = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent ae) {

            System.out.println("\nBananas!");

        }
    };


    jb1.addActionListener(action1);



    add(jta1,gbc2);
    add(jb1,gbc1);


    };



};

 public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {

                MyFrame jf1 = new MyFrame();
                MyPanel jp1 = new MyPanel();
                jf1.add(jp1);

            }
        });
    }   
}

代码只是一个简单的 JFrame、Panel、一个打印香蕉的 Button 和一个 JTextArea。当在没有换行等的情况下输入时,它只是根据应用的输入方向来扩展自身。 (按 Enter 键在该区域中向下移动会将其向上/向下拉动,然后在其中键入内容会将其向左和向右拉动,使其变大。)这是有道理的,我没有添加换行或任何东西。但是,添加这些;

jta1.setLineWrap(true);
jta1.setWrapStyleWord(true);

我得到以下结果;

只是用一张图片来展示我在说什么:

/image/OMYtm.png

我的目标是一个有限制的 JTextArea,当超出限制时会创建一个滚动条,并且根本不改变大小。

建议?

最佳答案

What I'm aiming for is a JTextArea that has limits, when those are exceeded creates a scrollbar, and doesn't change size at all.

JTextArea jta1 = new JTextArea();

您的文本区域没有首选大小,因此它会不断增长。您需要创建具有首选大小的文本区域。这是通过使用以下方法完成的:

JTextArea jta1 = new JTextArea(5, 30);

现在,布局管理器可以使用文本区域的首选大小,并且当文本区域的首选大小大于滚动 Pane 的大小时,滚动 Pane 将显示滚动条。

when those are exceeded creates a scrollbar, and doesn't change size at all.

正如 MadProgrammer 所指出的,如果您想要一个滚动条,那么您还需要实际将文本区域添加到 JScrollPane,然后将滚动 Pane 添加到框架。因此,您还需要使用如下代码:

//add(jta1,gbc2);
add(new JScrollPane(jta1), gbc);

阅读 Swing 教程中关于 How to Use Text Areas 的部分了解更多信息和示例。

关于java - 我的 JTextArea 继续无限,尽管添加了 LineWrap 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36525037/

相关文章:

java - 使用 JDBC 在 PostgreSQL 中批量插入

java - 如何设置在 mxGraph 的 pdf/图像导出功能中使用的自定义字体以支持 UTF-8 编码的亚洲语言文本?

java - 刷新 JTree 内容

java - 将绘画保持在 JPanel 边框内

java - "Schema name-of-schema does not exist"与 Java Derby

java - Esper 部署错误 : invalid return type for static method, 需要 Java 类

java - 将 CSS 文件链接到 JSP

java - 停用组件,直到从 JComboBox 中选择一个元素

java - 如何在此框架中添加工具栏?

java - Swing组件占用大量内存