所以我想让我的Jscrollpane显示Pascals三角形。我有这个:
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]);
}
但它不是我想要的,我不知道如何解决这个问题,包括图片。有什么帮助吗?
答案 0 :(得分:2)
默认情况下,JPanel
使用流式布局。要获得您正在寻找的垂直排列,您应该可以使用BoxLayout
上具有垂直方向的labelPanel
来完成此操作,然后添加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
中查看默认情况下可用的不同布局管理器答案 1 :(得分:0)
瞧。你已经完成了。
如果您需要使用JLabel,请将它们放在使用GridLayout的JPanel中,并使用足够的列来显示您的底行。
答案 2 :(得分:0)
最简单的解决方案是旋转三角形使其看起来像:
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课程,只需在小组上发帖提问,我会回复:)