簡體   English   中英

如何調整Java Swing JTextArea的大小

[英]How can I size a Java Swing JTextArea

我正在嘗試使用Java Swing將文本區域放到對話框中。 我在設置此JTextArea的大小時遇到​​問題。 文本區域的寬度始終等於窗口的整個寬度,如果我調整其大小,則文本區域的寬度會隨着窗口的延伸而擴展。

private void arrangeComponents() {
    JTextArea textArea = new JTextArea();
    JPanel outerPanel = new JPanel();
    outerPanel.setLayout(new BoxLayout(outerPanel, BoxLayout.PAGE_AXIS));

    JScrollPane scrollPane = new JScrollPane(textArea);
    outerPanel.add(scrollPane, BorderLayout.CENTER);

    Container contentPane = getContentPane();
    contentPane.add(outerPanel, BorderLayout.CENTER);
}

我希望JTextArea與窗口的中心水平對齊,並且不更改其大小。

我做錯了什么?

使用JTextArea(int rows, int columns)構造函數指定的行和列,如圖所示這里 ,也不要忽視pack()封閉Window

outerPanel.add(scrollPane, BorderLayout.CENTER);

BoxLayout不需要約束,因此BorderLayout.CENTER是不必要的。

問題是BoxLayout會考慮將組件的最大尺寸設置為很大的滾動窗格。

除了使用BoxLayout之外,還可以使用帶有FlowLayout的面板。

運行下面的示例以查看您當前正在做什么。 然后注釋掉setLayout(...)語句,然后再次運行。 默認情況下,面板使用FlowLayout,因此您將獲得所需的內容。

import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;

public class SSCCE extends JPanel
{
    public SSCCE()
    {
          setLayout( new BoxLayout(this, BoxLayout.PAGE_AXIS));

          JTextArea textArea = new JTextArea(5, 30);
          JScrollPane scrollPane = new JScrollPane(textArea);
          //scrollPane.setMaximumSize( scrollPane.getPreferredSize() );

          add(scrollPane);
    }

    private static void createAndShowUI()
    {
        JFrame frame = new JFrame("SSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new SSCCE() );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}

或者,如果您確實想要保留BoxLayout,則保留keep setLayout(...)語句,然后將最大大小設置為等於預定大小。 許多人會說您永遠不要直接調用“ setXXX()”方法,而應該覆蓋滾動窗格的setMaximumSize()方法以僅返回首選大小。

注意,在測試這兩種解決方案時,請確保使窗口小於滾動窗格,以查看每種布局的工作方式是否不同。

我是從一個簡單的編碼站點發現的。 此代碼示例可能對您有用。

import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class JTextAreaTest {
    public static void main(String[] args) {
        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame("JTextArea Test");
        frame.setLayout(new FlowLayout());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        String text = "A JTextArea object represents a multiline area for displaying text. "
                + "You can change the number of lines that can be displayed at a time, "
                + "as well as the number of columns. You can wrap lines and words too. "
                + "You can also put your JTextArea in a JScrollPane to make it scrollable.";
        JTextArea textAreal = new JTextArea(text, 5, 10);
        textAreal.setPreferredSize(new Dimension(100, 100));
        JTextArea textArea2 = new JTextArea(text, 5, 10);
        textArea2.setPreferredSize(new Dimension(100, 100));
        JScrollPane scrollPane = new JScrollPane(textArea2,
                JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        textAreal.setLineWrap(true);
        textArea2.setLineWrap(true);
        frame.add(textAreal);
        frame.add(scrollPane);
        frame.pack();
        frame.setVisible(true);
    }
}

只需為您的文本區域調用該方法: setLineWrap(true);

如果JTextArea已初始化,則JTextArea text = new JTextArea(int rows, int columns)

您只需調用方法text.setLineWrap(true)

然后文本的大小是固定的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM