3

我正在为即将到来的测试进行练习,并且正在查看一些练习题。我遇到了一个比其他问题更能挑战我的问题。我需要编写一个方法,似乎使用swing,通过简单的数学创建100个给定宽度和不同高度的矩形。我已经制作了包含每个高度的数组,并且设置了宽度。我该如何使用swing创建这些矩形?我希望以一种试图将我推向正确方向的方式回答这个问题(即尝试使用 JLabel 或类似性质的东西),而不是为我做这件事。我怎么会这样学呢?我也可能会遇到一些后续问题。这是使我的 Array 用于高度并设置我的宽度的代码。可能是假设的,但我的参数以像素为单位。

public void paintComponent() {
   int[] heights = new int[100];
   int width = 10
   int initialHeight = 100;
   for (int i=0; i<100; i++) {
      int usedHeight = height - i;
      heights[i] = usedHeight;
   }

再次,请不要为我这样做。我只需要指出正确的方向。我想我会以某种方式使用swing来做到这一点。

4

3 回答 3

3

基本上,您要做的是 subclassJComponent和 overridepaintComponent。传递给它的Graphics对象可以让你做你需要的(提示)。

于 2013-07-15T14:13:41.960 回答
2

一般的做法:

  • 使用 JPanel 制作 JFrame

  • 给它一个布局(像 GridLayout 这样简单的东西可能适用于此)

  • 将组件添加到您的容器中(我将指向您Rectangle)(或者您可以只使用 JPanel 并设置它们的边框/填充颜色)

在 Swing 中最难学习的东西之一是布局管理器,所以要花一些时间把头撞在墙上,直到它让位。准备让 Swing 将所有矩形叠加在一起,将它们绘制在一列中,并且根本不绘制它们。可能不是这个顺序。

于 2013-07-15T14:17:00.833 回答
1

好的,首先,您当前的代码中有一些错误(假设高度正在减少):

public void paintComponent() {
  int[] heights = new int[100];
  int width = 10;
  int initialHeight = 100;
  for (int i=0; i<100; i++) {
    heights[i] = initialHeight;
    initialHeight--;
    //also heights[i] = 100-i;
  }
}

usedHeight在循环内声明时,它只存在于循环的一个“循环”中。

其次,如果您想了解 swing 的工作原理,请下载 5+- 已经工作的示例并从代码中弄清楚(对我来说很好)。

于 2013-07-15T14:25:02.757 回答