在java中绘制框

时间:2011-05-15 13:44:50

标签: java user-interface

我编写了一个程序,通过首次拟合和最佳拟合算法来模拟内存分配。

现在我想将我的程序与一组代表可用内存段的框图

相关联

分配前

enter image description here

分配后 enter image description here

所以它只是重绘,但重新调整一个框并调整颜色......最简单的方法是什么? 我有一组不同大小的盒子,根据输入动态绘制,当用户做一些动作时,其中一个盒子会被调整大小并重新着色等等。

4 个答案:

答案 0 :(得分:3)

我认为最好使用图形。

  1. 实例化一个大小BufferedImage以适合所有方框。
  2. 通过调用GraphicsgetGraphics()来获取createGraphics()个实例。
  3. 对于每个内存块:
    1. 根据分配状态调用Graphics.setColor(Color),然后..
    2. Graphics.fillRect(int,int,int,int)fillPolygon(Polygon)绘制内存块。
  4. 如果需要,请使用AffineTransform缩放尺寸。这需要一个Graphics2D对象来绘制。

答案 1 :(得分:2)

使用JPanel作为具有垂直 FlowLayout BoxLayout的容器,并为每个内存块添加一个JLabel。

答案 2 :(得分:2)

使用JPanel添加像0verbose这样的JLabel,但在我看来,布局是BoxLayoutGridBagLayout

使用FlowLayout,您必须确保容器的大小具有适当的宽度,以便将一个组件放在另一个组件下,因为默认情况下它将组件放在一行中。

来自Java教程关于FlowLayout“FlowLayout类将组件放在一行中,大小按其首选大小排序。如果容器中的水平空间太小而无法将所有组件放在一行中,则FlowLayout类使用多行。“

答案 3 :(得分:1)

如果可以渲染内存块的大小相同,可以使用JComponent(甚至更简单的JProgressBar)来表示每个内存块。然后可以将这些内容放入GridLayoutBoxLayout来整理展示位置。 E.G。

MemoryAllocation.java

import java.awt.*;
import javax.swing.*;
import java.util.Random;

class MemoryAllocation {

    public static JProgressBar getMemoryBlock(int full) {
        JProgressBar progressBar = new JProgressBar(
            SwingConstants.VERTICAL, 0, 100);
        progressBar.setValue(full);
        progressBar.setPreferredSize(new Dimension(30,20));
        return progressBar;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater( new Runnable() {
            public void run() {
                JPanel memoryView = new JPanel(new GridLayout(0,10,1,1));

                Random random = new Random();
                for (int ii=0; ii<200; ii++) {
                    int amount = 100;
                    if (random.nextInt(5)==4) {
                        amount = 100-random.nextInt(75);
                    }
                    memoryView.add( getMemoryBlock(amount) );
                }

                JOptionPane.showMessageDialog(null, memoryView);
            }
        });
    }
}

屏幕截图

enter image description here