2

編集者の仕事をしています。私はそれにJavaスイングを使用しています。を埋め込みましJTextAreaJScrollPanejtextarea特定のサイズの を の中央に配置したいJScrollPane。これを行うには、setLocation関数を使用しました。しかし、これは機能していませんか?

public class ScrollPaneTest extends JFrame {
private Container myCP;
private JTextArea resultsTA;
private JScrollPane scrollPane;
private  JPanel jpanel;

public ScrollPaneTest() {
resultsTA = new JTextArea(50,50);
resultsTA.setLocation(100,100);
jpanel=new JPanel(new BorderLayout());
jpanel.add(resultsTA,BorderLayout.CENTER);

scrollPane = new JScrollPane(jpanel,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setPreferredSize(new Dimension(800, 800));
scrollPane.setBounds(0, 0, 800, 800);

setSize(800, 800);
setLocation(0, 0);
myCP = this.getContentPane();
myCP.setLayout(new BorderLayout());
myCP.add(scrollPane);
setVisible(true);
addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }
 });
}
public static void main(String[] args) {
     new ScrollPaneTest();
     }
}
4

1 に答える 1

8

を に追加し、JTextAreaを持つのに追加するだけです。JScrollPaneCENTERJPanelBorderLayout

AbsolutePositioning を使用しないでください。適切なLayoutManagerを追加し、画面上でのコンポーネントの配置とサイズ変更の残りを LayoutManager に任せます。

setBounds(...)メソッドを使用するには、 AbsolutePositioning の最初の段落で述べたように、パースペクティブを提供して、使用する価値のないコンポーネントのレイアウトを使用する必要がありnullます。あなたが提供したコード例では、レイアウトとAbsolutePositioningを使用して両方のことを一緒に行っていますが、これはあらゆる点で間違っています。私のアドバイスはやめてください:-)

ROWS提供されたおよび提供された例では、レイアウトCOLUMNSの問題によって のサイズを設定するのに十分です。JTextArea

コード例:

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

public class Example
{
    private JTextArea tarea;

    private void displayGUI()
    {
        JFrame frame = new JFrame("JScrollPane Example");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JPanel contentPane = new JPanel();
        contentPane.setLayout(new BorderLayout(5, 5));

        JScrollPane textScroller = new JScrollPane();
        tarea = new JTextArea(30, 30);
        textScroller.setViewportView(tarea);

        contentPane.add(textScroller);
        frame.setContentPane(contentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String... args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new Example().displayGUI();
            }
        });
    }
}
于 2013-01-12T08:02:30.200 に答える