【问题标题】:JScrollPane formatting to show Pascals TriangleJScrollPane 格式显示帕斯卡三角形
【发布时间】:2014-06-10 07:35:32
【问题描述】:

所以我想让我的 Jscrollpane 显示帕斯卡三角形。我有这个:

labelPanel= new JPanel();
lRows = new JLabel[n];

for (int i=0;i<n;i++){
    lRows[i]=new JLabel(Arrays.toString(tri.tri[i]));
    labelPanel.add(lRows[i]);
}

但这不是我想要的,我不知道如何解决这个问题,包括图片。有什么帮助吗?

【问题讨论】:

  • 什么是 tri.tri?它有字符串吗?根据需要将新行和空格添加到 tri.tri 中的字符串?您始终可以通过遍历 tri.tri 并根据需要添加空格和换行符来自己创建一个字符串。
  • tri.tri[i] 是第 i 个带有整数的帕斯卡三角形行,但我可以处理,我主要希望它看起来像第一张图片,这样每一行都居中每行只有 1 行
  • 这是您需要在问题中提供的信息。要回答这个问题,您必须自己循环遍历数组,并根据需要向 StringBuilder 添加空格和新行,然后 toString 您的 StringBuilder 以获取 String。

标签: java swing layout jscrollpane


【解决方案1】:

默认情况下,JPanel 使用流式布局。要获得您正在寻找的垂直排列,您应该能够通过在您的labelPanel 上使用具有垂直方向的BoxLayout 来做到这一点,然后添加您的JLabel 行。

labelPanel= new JPanel();
//set this up to order things vertically
labelPanel.setLayout(new BoxLayout(labelPanel, BoxLayout.Y_AXIS));
lRows = new JLabel[n];

for (int i=0;i<n;i++){
    lRows[i]=new JLabel(Arrays.toString(tri.tri[i]));
    //to center your label, just set the X alignment
    lRows[i].setAlignmentX(Component.CENTER_ALIGNMENT)
    labelPanel.add(lRows[i]);
}

我还添加了一条线,以使行居中,就像您的图片一样。 Component 来自 java.awt 包。

您可以在Java Tutorial 中阅读默认可用的不同布局管理器

【讨论】:

  • 谢谢,你知道如何让每一行像图片上一样居中吗?
  • @user3369008 查看编辑,我添加了一行应该为您提供中心的内容
  • 谢谢,这正是我想要的:)
【解决方案2】:

最简单的解决方案是旋转三角形使其看起来像:

1   1   1   1   1   1   1

1   2   3   4   5   6   

1   3   6   10  15  

1   4   10  20   

1   5   15  

1   6   

1   

但是,如果您必须像这样打印某事

我是这样做的:

for (int i = 0; i<n; i++){
    for (int j = 0; j<Triangle.trojkat[i].length; j++){
        sb.append(Triangle.trojkat[i][j]);
        len = String.valueOf(Triangle.trojkat[i][j]).length();
        while (12-len>0){
            sb.append(" ");
            len++;
        }
        //sb.append(" ");
    }
    TriangleRes[i] = new JLabel(sb.toString(), JLabel.CENTER);
    TriangleRes[i].setFont(new Font("Serif",Font.PLAIN,8));
sb = new StringBuilder();
}

让我解释一下: 我决定,我希望我的三角形打印得漂亮,尺寸小于 35。然后我检查了,这样一个三角形中的数字最多为 10 位。然后,当我将下一个数字添加到现有行时,我检查了它的长度,虽然总长度还不是 12,但我添加了空格。这导致您在图片上附加的三角形。

如果这是针对博士 Macyna 课程的,只需在小组中发布问题,我会回复 :)

【讨论】:

    【解决方案3】:
    1. 使用 JTextArea
    2. 给它一个等宽字体,即 Font.MONOSPACED
    3. 将文本行附加到 JTextArea,类似于在控制台中执行此操作的方式。
    4. 将 JTextArea 放入 JScrollPane 中
    5. 瞧。你已经完成了。


    6. 如果您需要使用 JLabels,请将它们放在使用 GridLayout 的 JPanel 中,该 JPanel 具有足够的列来显示您的底行。

    7. 如果您这样做,您将在每个其他单元格中放置空 JLabel,以便单元格正确分支。

    【讨论】:

      猜你喜欢
      • 2015-07-29
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      相关资源
      最近更新 更多