【问题标题】:JScrollPane isn't working in GUIJScrollPane 在 GUI 中不起作用
【发布时间】:2013-09-27 05:04:45
【问题描述】:

好的,我正在尝试创建一个具有 JScrollPane 的 GUI,它通过 JTextArea 将打印出一个整数数组,一次一行。我正在使用我为作业创建的一些方法来处理数据,并让其中一个在以下示例中处理数据(我无法显示这些方法,因为它是尚未到期的作业)。这些方法已经过测试并且工作正常,因此在这个问题中不需要它们。到目前为止,文本区域将显示在 GUI 中,但没有附加滚动窗格,或者只有 jlabel 将显示通过该方法完成的工作的结果。有人可以看看我的代码并告诉我我做错了什么,因为我已经检查了大约 50 次,并且无法让 GUI 正常运行。

public class MyClassName extends JFrame{

private JScrollPane myScroll;
private JTextArea myTextArea;
private JLabel myMean;
private JLabel myMedian;
private JLabel myMax;
private JLabel myMin;
private JLabel mySum;
private Container content;
private Font myFont;
private SpringLayout layout;


private MyClassName() {
    this(500,300,"TEST TITLE");
}

private MyClassName(int width, int height, String title)
{
    this.setVisible(true);
    this.setTitle(title);
    this.setSize(width, height);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    guiComponent();
}

public void guiComponent()
{
    layout = new SpringLayout();
    content = this.getContentPane();

    int [] test = {50,37,43,12,8,16,32,44,78,92,1,3,66,34};

    myTextArea = new JTextArea();

    myScroll = new JScrollPane(myTextArea);
    content.add(myScroll);

    myMean = new JLabel("MEAN : " + MyClassName.mean(test));
    for(int count : test)
    {
        String z = Integer.toString(count);
        myTextArea.append('\n' + z);
    }

    myFont = new Font("Serrif", Font.BOLD, 30);
    myMean.setFont(myFont);

    content.add(myScroll);
    layout.putConstraint(SpringLayout.WEST, myScroll, 20, SpringLayout.WEST, content);
    layout.putConstraint(SpringLayout.NORTH, myScroll, 25, SpringLayout.NORTH, content);

    content.add(myMean);
    layout.putConstraint(SpringLayout.WEST, myMean, 20, SpringLayout.EAST, myScroll);
    layout.putConstraint(SpringLayout.NORTH, myMean, 25, SpringLayout.NORTH, content);
}

public static double mean(int[] ar) {
    double x = 0;
    for (int i = 0; i < ar.length; i++) {
        x += ar[i];
    }
    return x / ar.length;
}

public static void main(String[] args) {

    MyClassName test2 = new MyClassName();
}

【问题讨论】:

  • 考虑将public static void main(String args[]) 添加为SSCCE,以便人们可以复制粘贴并测试您的代码..
  • 我添加了主要方法,以及我在此示例中使用的 1 方法
  • 好的,所以我重新启动了netbeans,现在它在GUI中弹出了文本区域和滚动窗格,但它们占据了整个GUI,即使我在文本区域添加了大小参数,并且应该在文本区域右侧的 jlabel 仍然不存在

标签: java swing layout user-interface jscrollpane


【解决方案1】:

当您需要在布局中显示组件时的问题,为了解决您的问题,请在初始化“myTextArea”组件后添加这三行:

myTextArea.setColumns(20);
myTextArea.setRows(5);
getContentPane().setLayout(layout);

您可能需要阅读此link about Layout

【讨论】:

  • 太棒了!这至少解决了 scrollPanel 问题。 JLabel 仍然不会在它旁边弹出,除非您抓住 GUI 窗口的一角并移动它,知道为什么会这样吗?
  • 实际上,我在您给我的链接上阅读了信息,并且只是使用了 .isVisible();现在它显示了,再次感谢!
  • 其实,不,那个也不行,jlabel只有在你第一次运行程序的时候才会弹出,之后好像就消失了,真的很奇怪
  • 我现在看到您在代码中使用 main 方法进行了更新,但您可以将 setVisible(true); 移动到默认承包商或将初始 test2 变量的行替换为这一行 new MyClassName().setVisible(true);
  • 把 this.setVisible(true);在我的 guiComponent 方法中修复了它,谢谢。我原本有它,但在我之前试图解决问题时移动了它。
猜你喜欢
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多