我编写了一个程序,通过首次拟合和最佳拟合算法来模拟内存分配。
现在我想将我的程序与一组代表可用内存段的框图
相关联分配前
分配后
所以它只是重绘,但重新调整一个框并调整颜色......最简单的方法是什么? 我有一组不同大小的盒子,根据输入动态绘制,当用户做一些动作时,其中一个盒子会被调整大小并重新着色等等。
答案 0 :(得分:3)
我认为最好使用图形。
BufferedImage
以适合所有方框。Graphics
或getGraphics()
来获取createGraphics()
个实例。Graphics.setColor(Color)
,然后.. Graphics.fillRect(int,int,int,int)
或fillPolygon(Polygon)
绘制内存块。 AffineTransform
缩放尺寸。这需要一个Graphics2D
对象来绘制。答案 1 :(得分:2)
使用JPanel作为具有垂直 FlowLayout BoxLayout的容器,并为每个内存块添加一个JLabel。
答案 2 :(得分:2)
使用JPanel添加像0verbose这样的JLabel,但在我看来,布局是BoxLayout或GridBagLayout。
使用FlowLayout,您必须确保容器的大小具有适当的宽度,以便将一个组件放在另一个组件下,因为默认情况下它将组件放在一行中。
来自Java教程关于FlowLayout“FlowLayout类将组件放在一行中,大小按其首选大小排序。如果容器中的水平空间太小而无法将所有组件放在一行中,则FlowLayout类使用多行。“
答案 3 :(得分:1)
如果可以渲染内存块的大小相同,可以使用JComponent
(甚至更简单的JProgressBar
)来表示每个内存块。然后可以将这些内容放入GridLayout
或BoxLayout
来整理展示位置。 E.G。
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);
}
});
}
}