java - 更改 JFrame 大小时,在 GridLayout 中添加 ScrollPane 不会调整 JPane 中 JTextarea 的大小

标签 java swing jscrollpane jtextarea

我想向当前的 GridLayout 添加一个带有填充的 JTextArea 组件的网格。 它工作正常,但正如标题中提到的,JTextArea 不会自行调整大小 更改框架大小后。

我已经定位了错误:

text.setLineWrap(true); //<--- here is the problem!!enter code here

在createGui方法中。

这是我的代码:

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
class GridLayoutExample {

    private JFrame frame = new JFrame();
    private JPanel panel = new JPanel();
    private JScrollPane pane;
    final JTextArea text = new JTextArea("Click me!\nClick me!\nClick me!\nClick me!\nClick me!");

    GridLayoutExample() { createGui(); } //constrcutor

    private JPanel createGui () {
        panel.setLayout(new GridLayout(0, 2,0,0));          
        panel.add( new JLabel("Hello"));        
        //set style of first row, second column
        text.setLineWrap(true); //<--- here is the problem!!
        text.setEditable(true);
        //enable mouse listening and allow mouse action 
        doMouseActions();
        panel.add(text);
        return panel;
    }

    void addNewRow() {
        panel.add(new JLabel("Test1"));
        panel.add(new JTextField("Test"));
    }//addNewRow

    void showFrame() {
        pane = new JScrollPane(panel);
        frame.add(pane);
        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }//showframe

    void doMouseActions() {
        text.addMouseListener(new MouseListener() {

            @Override
            public void mouseClicked(MouseEvent arg0) {
                addNewRow();
            }

            @Override
            public void mouseEntered(MouseEvent arg0) {
                text.setBackground(Color.YELLOW);               
            }

            @Override
            public void mouseExited(MouseEvent arg0) {
                text.setBackground(Color.WHITE);                
            }

            @Override
            public void mousePressed(MouseEvent arg0) {}

            @Override
            public void mouseReleased(MouseEvent arg0) {}           
        });
    } // end of mouse action    

    public static void main(String[] args) {
        GridLayoutExample test = new GridLayoutExample();
        test.showFrame();
    }// end of main
}// class GridLayoutExampleenter code here

一方面,当我禁用换行时它工作正常,另一方面我需要 它以获得换行符。

那么有什么建议可以做得更好吗?

非常感谢!

最佳答案

您正在运行时添加组件。在这种情况下,您需要确保容器得到重新验证:

void addNewRow() {
    panel.add(new JLabel("Test1"));
    panel.add(new JTextField("Test"));
    panel.revalidate();
    panel.repaint();
}//addNewRow

此外,您应该仅在事件调度线程中创建和访问 swing 组件。请参阅here了解更多。

关于java - 更改 JFrame 大小时,在 GridLayout 中添加 ScrollPane 不会调整 JPane 中 JTextarea 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22561016/

相关文章:

java - 如何滚动到 JScrollPane 中的特定位置

java - 如何在运行时 rt 上运行 exec 的情况下初始化 Process proc?

java - 如何在不同的 Activity 中调用/调用重复按钮的类

java - 如何将 JSpinner 设置为不可编辑?

java - JScrollPane 对 scrollRectToVisible 没有反应

java - 将 JScrollPane 和 JTextArea 添加到 JDailog 中

javascript - 我如何通过 selenium java 从提示中获取占位符文本

java - 我是否使用 jSerialComm 以错误的方式读取 Arduino 传入数据?

Java 上边界图形

java - 如何在 Java GUI 编程中获得 Windows 原生外观?