java - 当用户按Enter时禁用JTextArea调整大小

我有一个JTextArea,我希望用户输入一个人的地址。我知道用户将输入的有效地址不会超过5 rows10 columns。因此,我将其设置为JTextArea (5,10)。这样,它可以正常工作。

问题是,当用户按住enter 5次以上时,文本区域将开始调整大小。我不想将文本区域放在JScrollPane中,因为用户要输入的文本用于滚动的内容并不多。

问题:当用户按下JTextArea时,如何禁止enter调整大小?

这是我的代码:

public class JTextAreaDemo {

private JFrame frame;

JTextAreaDemo(){
    frame= new JFrame();
    frame.setSize(300, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(new net.miginfocom.swing.MigLayout());
    frame.setVisible(true);
    frame.setLocationRelativeTo(null);

    JLabel label=new JLabel("Address :");
    JTextArea address= new JTextArea(5,20);
    frame.add(label,"cell 0 0");
    frame.add(address, "cell 1 0");
}

public static void main(String [] args){
    SwingUtilities.invokeLater(new Runnable(){

        @Override
        public void run() {
            new JTextAreaDemo();

        }});
    }
 }

最佳答案

您可以尝试使用DocumentFilter,例如:

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;

public class TestFrame extends JFrame {

    public static void main(String... s) {
        new TestFrame();
    }

    private JTextArea area;

    public TestFrame() {
        init();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }


    private void init() {
        area = new JTextArea();
        ((AbstractDocument)area.getDocument()).setDocumentFilter(getFilter(5));
        add(new JScrollPane(area));
    }

    private DocumentFilter getFilter(final int lineCount) {
        return new DocumentFilter(){

            @Override
            public void replace(FilterBypass fb, int offset, int length,
                    String text, AttributeSet attrs)
                    throws BadLocationException {
                if(area.getLineCount()<=lineCount && area.getLineOfOffset(area.getCaretPosition())<lineCount)
                        if(text.contains("\n") && area.getLineCount()<lineCount)
                            super.replace(fb, offset, length, text, attrs);
                        else if(!text.contains("\n"))
                            super.replace(fb, offset, length, text, attrs);
            }
        };
    }

}

本文翻译自 https://stackoverflow.com/questions/29819664/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 java swing layout-manager jtextarea miglayout


相关文章:

java - 推荐的JScrollPane导航小部件

java - 如何在JFrame中排列多个面板

java - GridBagLayout没有得到预期的结果

java - 为什么我的Kafka消费者如此快速地投票?

java - Java Hibernate Web应用程序无法使用MySQL数据库显示数据

java - Web容器如何处理传入的请求并映射到已部署的Web应用程序战争

java - 使用JTable单元格编辑器

java - HSSF POI:如何知道单元格中的数据是否为类型日期?

java - 纽扣?单击后,按钮字母周围的矩形是什么意思?

java - Java Swing JFrame布局