4

我试图在 JScrollPane 中显示一个 JTextArea,但是当我运行我的(简化的)程序时,我只是得到一个空框架:

import java.awt.Container;
import java.awt.Dimension;    
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

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

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

    public ScrollPaneTest() {
        setSize(500, 500);
        setLocation(100, 100);
        myCP = this.getContentPane();
        myCP.setLayout(null);

        resultsTA = new JTextArea("Blah blah");
        scrollPane = new JScrollPane(resultsTA,
                JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollPane.setPreferredSize(new Dimension(200, 100));
        scrollPane.setLocation(100, 300);
        myCP.add(scrollPane);

        setVisible(true);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }

    public static void main(String[] args) {
        new ScrollPaneTest();
    }
}

我使用 null LayoutManager 与我正在教的教科书保持一致。

4

2 回答 2

7

这将起作用:

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

    public ScrollPaneTest() {
        setSize(500, 500);
        setLocation(100, 100);
        myCP = this.getContentPane();
        myCP.setLayout(null);

        resultsTA = new JTextArea("Blah blah");
        resultsTA.setBounds(10, 10, 150, 30);

        scrollPane = new JScrollPane(resultsTA,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollPane.setPreferredSize(new Dimension(200, 100));
        scrollPane.setBounds(0, 0, 500, 500);

        myCP.add(scrollPane);
        setVisible(true);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }

    public static void main(String[] args) {
        new ScrollPaneTest();
    }
}

如果您使用的是空布局,那么您必须指定边界。


编辑

setBounds()方法涵盖了方法的任务setLocation()

例如,setBounds(x,y,w,h);

第一个 2 将设置该组件相对于其容器的 x/y 位置。第二个 2(w/h) 将设置该组件的大小。

换句话说:-

  1. setBounds(int x, int y, int witdh, int height) – 设置组件的大小和位置
  2. setLocation(int x, int y) – 设置组件的位置
于 2011-04-07T05:28:11.350 回答
1

我必须同意 kleopatra 对此的评论。

这是使用布局的 Harry Joy 代码的变体。它在屏幕上显示的大小与原始 GUI 几乎相同,但可调整大小。它还可以轻松适应不同的 PLAF、默认字体大小等(尽管它可能最终在屏幕上显示不同的大小),而具有null布局的东西则不会。

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

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

    public ScrollPaneTest() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocation(100, 100);
        myCP = this.getContentPane();

        resultsTA = new JTextArea("Blah blah", 28, 43);

        scrollPane = new JScrollPane(resultsTA,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

        myCP.add(scrollPane);
        setVisible(true);
        pack();
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            public void run() {
                new ScrollPaneTest();
            }
        };
        SwingUtilities.invokeLater(r);
    }
}
于 2011-04-07T13:13:01.490 回答