【问题标题】:JScrollPane doesn't appear in my JTextAreaJScrollPane 没有出现在我的 JTextArea 中
【发布时间】:2011-09-30 08:05:26
【问题描述】:

这个类是我程序中第一个选项卡 CreatePanel 的布局和实现。我正在尝试在我的 JTextArea 中实现 JScrollPane。然而,滚动条永远不会出现,尽管程序编译正确。我已经到处寻找解决方案并尝试了几种变体,但似乎没有任何效果。

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

public class CreatePanel extends JPanel
{
    private Vector flightList;
    private SelectPanel sPanel;

    private JButton createButton;
    private JLabel airName, flightNumber, departCity, departDay, departTime, arriveCity, arriveDay, arriveTime, price;
    private JLabel notify, blank;
    private JTextField l1, l2, l3, l4, l5, l6, l7, l8, l9;
    private JTextArea flightInfo;
    private JScrollPane scroll;
    String air, num, dC, dD, dT, aC, aD, aT, prc;

    //Constructor initializes components and organize them using certain layouts
    public CreatePanel(Vector flightList, SelectPanel sPanel)
    {
        this.flightList = flightList;
        this.sPanel = sPanel;

        // organize components here
        // creates all labels and textfields for Flight Creation tab
        notify = new JLabel("");
        blank = new JLabel("");
        airName = new JLabel("Enter a name of Airlines");
        flightNumber = new JLabel("Enter a flight number");
        departCity = new JLabel("Enter a departure city");
        departDay = new JLabel("Enter a departure day");
        departTime = new JLabel("Enter a departure time");
        arriveCity = new JLabel("Enter an arrival city");
        arriveDay = new JLabel("Enter an arrival day");
        arriveTime = new JLabel("Enter an arrival time");
        price = new JLabel("Price");
        l1 = new JTextField("");
        l2 = new JTextField("");
        l3 = new JTextField("");
        l4 = new JTextField("");
        l5 = new JTextField("");
        l6 = new JTextField("");
        l7 = new JTextField("");
        l8 = new JTextField("");
        l9 = new JTextField("");
        createButton = new JButton("Create a flight");
        createButton.addActionListener(new ButtonListener());
        flightInfo = new JTextArea("No flight");
        flightInfo.setEditable(false);


        // the user-entered information panel
        JPanel panelUser = new JPanel();
        panelUser.setLayout(new GridLayout(10, 2));
        panelUser.add(notify);
        panelUser.add(blank);
        panelUser.add(airName);
        panelUser.add(l1);
        panelUser.add(flightNumber);
        panelUser.add(l2);
        panelUser.add(departCity);
        panelUser.add(l3);
        panelUser.add(departDay);
        panelUser.add(l4);
        panelUser.add(departTime);
        panelUser.add(l5);
        panelUser.add(arriveCity);
        panelUser.add(l6);
        panelUser.add(arriveDay);
        panelUser.add(l7);
        panelUser.add(arriveTime);
        panelUser.add(l8);
        panelUser.add(price);
        panelUser.add(l9);

        // panel for the button
        JPanel panelButton = new JPanel();
        panelButton.add(createButton);

        // the leftside panel of CreatePanel
        JPanel panelLeft = new JPanel();
        panelLeft.setLayout(new BorderLayout());
        panelLeft.add(panelUser, BorderLayout.CENTER);
        panelLeft.add(panelButton, BorderLayout.SOUTH);

        // the rightside panel of CreatePanel
        JPanel panelInfo = new JPanel();
        scroll = new JScrollPane(flightInfo);
        scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        scroll.setVisible(true);
        panelInfo.setLayout(new GridLayout(1, 1));
        panelInfo.add(flightInfo);

        // WHY WONT YOU WORK?


        // layout for CreatePanel
        setLayout(new GridLayout(1, 2));
        add(panelLeft);
        add(panelInfo);
    }
}

添加 JScrollPane 时我做错了什么??

【问题讨论】:

    标签: scroll textarea scrollbar jscrollpane jtextarea


    【解决方案1】:

    您一直在尝试添加错误的面板。 将panelInfo.add(flightInfo); 替换为panelInfo.add(scroll),您应该会看到您的JScrollPane 出现(您可能需要将滚动条策略设置为“始终”以证明这一点)。

    当我在做这件事时,我可以建议您在发布问题时尝试做一个最小的失败示例吗?对不起,如果我听起来很迂腐,但这确实让其他人更容易帮助你。

    【讨论】:

    • 非常感谢!不需要道歉,我是 stackoverflow 的新手,对 Java 也很陌生。话虽如此..我将不得不问未来你所说的最小失败示例是什么意思,我一定会尽力而为>.
    • 欢迎来到 StackOverflow!我所说的“最小失败示例”的意思是显示您的代码如何无法执行您想要的操作的最小示例。例如,在您的问题中,不需要 TextFields 和 Labels 来重现您的问题。尝试构建这样的示例通常也有助于您自己识别问题,因此可以提供宝贵的学习经验。
    • 哦,当然,我现在明白了。我会确保下次这样做。感谢您的帮助!
    【解决方案2】:

    您根据需要使用滚动条,因此该条仅在达到文本区域的限制时才可见(溢出,文本大于大小:D)

    编辑:此外,您必须将滚动条添加到面板,而不是航班信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多