テキストボックスをダイアログボックスに配置しようとしています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をウィンドウの中央に水平に配置し、サイズを変更しないようにします。
私は何を間違えたのですか?
回答:
回答№1の場合は7使用 JTextArea(int rows, int columns)
次に示すように、行と列を指定するコンストラクタ ここにを無視しないでください。 pack()
囲む Window
.
回答№2については2
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を本当に維持したい場合setLayout(...)ステートメントをそのままにして、最大サイズを優先サイズに設定します。多くの人が "setXXX()"メソッドを直接呼び出さないで、代わりにスクロールペインのsetMaximumSize()メソッドをオーバーライドして好みのサイズを返すようにするべきであると言う人も多いでしょう。
これら2つのソリューションをテストするときは、ウィンドウがスクロールペインよりも小さいことを確認して、各レイアウトの機能が異なることを確認してください。
回答№3の場合は1
私はこれを単純なコーディングサイトから見つけました。このコードサンプルは役に立ちます。
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);
}
}
回答№4の場合は1
そのメソッドをurテキストエリアに対して呼び出すだけです。 setLineWrap(true);
回答№5の場合は0
JTextAreaが初期化されている場合
JTextArea text = new JTextArea(int rows, int columns)
あなただけのメソッドを呼び出す text.setLineWrap(true)
テキストのサイズは固定されています。