2

次のプログラムの問題点を誰か教えてもらえますか? JScrollPaneフィットしたいのですJtextAreaが、追加するとJTextArea表示されません。

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

class Area extends JFrame
{
    private JTextArea ta;
    private JTextField tf;
    JScrollPane jp;

    public Area()
    {
       super("Text Area");
       tf=new JTextField();
       tf.setBounds(100,350,300,30);
       add(tf);
       ta=new JTextArea();
       ta.setBounds(100,100,300,200);
       jp= new JScrollPane(ta);
       add(jp);
       setLayout(null);
       setSize(500,500);
       setVisible(true);
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   }

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

3 に答える 3

11

いくつかの問題があります。

  • nullレイアウトを使用しないでください。実際のレイアウトを使用してください。

  • のデフォルトのレイアウトJFrameBorderLayout; デフォルトの位置はCENTER; 一度に位置を占めることができるコンポーネントは 1 つだけです。以下の例ではNORTH&を使用していCENTERます。

  • 適切なコンストラクタ パラメータを使用して、最初にテキスト コンポーネントのサイズを設定します。

  • スクロールペインが囲まれたコンポーネントよりも小さい場合は常に、スクロールバーが自動的に表示されます。フレームのサイズを変更して効果を確認します。

  • ここに示すように、効果のためにフレームのサイズを小さくしています。

  • 初期スレッドも参照してください。

画像

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

/** @see https://stackoverflow.com/a/19215436/230513 */
public class Area extends JFrame {

    public Area() {
        super("Text Area");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JTextField tf = new JTextField(12);
        add(tf, BorderLayout.NORTH);
        JTextArea ta = new JTextArea(24, 12);
        JScrollPane jp = new JScrollPane(ta);
        add(jp, BorderLayout.CENTER);
        pack();
        // arbitrary size to make vertical scrollbar appear
        setSize(240, 240);
        setLocationByPlatform(true);
        setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Area();
            }
        });
    }
}
于 2013-10-07T00:09:55.370 に答える
0

追加されたように聞こえますが、ポリシーのために表示されていません。これを試してください:

  jp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
  jp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
于 2013-10-06T18:23:04.290 に答える
0

これを試して:

public Area()
{
   super("Text Area");
   tf=new JTextField();
   tf.setBounds(100,350,300,30);
   add(tf);
   ta=new JTextArea();
   jp= new JScrollPane(ta);
   jp.setBounds(5, 5, 100, 100);
   add(jp);
   setLayout(null);
   setSize(500,500);
   setVisible(true);
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

setBoundsJTextAreaではなく、JScrollPaneで使用する必要があります

于 2013-10-06T18:17:28.110 に答える