Java Swing:通过JScrollPane未添加组件到JPanel

4

这段代码只是一个愚蠢的例子,我需要理解它以解决我正在工作的另一个项目中更大的问题:正如您所看到的,在for循环中,应该向JPanel添加23个按钮。由于它们不能全部显示,我决定添加一个JScrollPane,但是奇怪的事情发生了:只有19个被显示出来,我不明白为什么。大小矩阵有23行1列,因此是正确的。你知道为什么会这样吗?谢谢

package proveGUI;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;

import layout.TableLayout;

public class Main {

  public static void main(String argv[]) {

      JFrame jframe = new JFrame("Protocollo UTL");
      //jframe.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
      jframe.setSize(1200, 450);

      JPanel body = new JPanel();
      double[][] size = {
              {0.05},
              {0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05}

      };

      body.setLayout(new TableLayout(size));

      for(int i=0; i<22; i++) {
          body.add(new JButton(String.valueOf(i)), "0,"+String.valueOf(i));
      }

      JScrollPane scrollPane = new JScrollPane(body,
              ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
              ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);

      jframe.add(scrollPane);
      jframe.setVisible(true);

  }

}

enter image description here


1
尝试使用 body.setLayout(new BoxLayout(body, BoxLayout.Y_AXIS)); 替代 TableLayout - SeniorJD
适用于 GridBagLayout - MadProgrammer
@SeniorJD:谢谢,这似乎有效。您能告诉我区别在哪里以及我犯了什么错误吗?但问题是,用这种方式我只能在一列中添加项目...而在我的实际项目中,我有许多行和列。现在我该怎么办? - SagittariusA
@MadProgrammer:我选择了Oracle的tablelayout,因为我第一次接触Swing和GUI,有人告诉我这个库简单好用。但是为什么它不起作用呢? - SagittariusA
吹毛求疵:顺便提一下,你只添加了22个按钮。 - user2298374
好的,正如我所说,这只是一个愚蠢的例子来解决我的真正问题...我怎样才能指定列呢? - SagittariusA
2个回答

2
我对TableLayout不是很了解,因为我从来没有使用过它。如果这是您第一次使用Swing,请尝试常见的Swing布局
对于您的情况,您可以简单地尝试
body.setLayout(new BoxLayout(body, BoxLayout.Y_AXIS)); // instead of TableLayout

当您理解了Swing中的布局方式后,可以使用GridBagLayout,因为它是最具可调性的布局。

2
问题出在您使用了0.00到1.00之间的尺寸值。这些被解释为相对大小/百分比,本例中为5%。这就是为什么只显示20行(从0到19)。尝试改用"50.0",问题就会消失。或者使用TableLayout.PREFERRED

非常感谢!看来我终于解决了我的问题。我从来没有想过我应该使用整数值。衷心感谢你! - SagittariusA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接