[英]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.