gpt4 book ai didi

java - 确保绘制(paint)的绳子不会离开可见区域?

转载 作者:行者123 更新时间:2023-12-02 04:08:44 24 4
gpt4 key购买 nike

给我的任务是使用 java 直观地举例说明算法:我必须模拟堆结构。

预期的布局。

The expected layout

我面临的问题是如何确保代码区域中绘制的字符串不会离开可见区域,而与屏幕分辨率无关。我已经确保 JFrame 具有屏幕尺寸 - 任务栏尺寸。面板已最大化且 isResizing 属性为 false。

那么如何确保字符串不会离开可见区域呢?

我要绘制的代码:如果代码更长(Y 维度),那么重要的容器是 X 维度,这并不重要。

我尝试逐行打印它。

public class heap<T>
{
private ArrayList<T> h;
private int size;
private final Comparator<T> c;

public heap(Comparator<T> comparator)
{
h = new ArrayList<T>();
h.add(null);
size = 0;
this.c = comparator;
}

public T getMin()
{
return h.get(1);
}

public T popMin()
{
T tmp = getMin();
h.set(1, h.get(size));
size--;
sift(1);
return tmp;
}

public void insert(T key)
{
h.add(key);
percolate(++size);
}

public int getSize()
{
return this.size;
}

private int getLeftSon(int i)
{
return (i<<1<=size)? i<<1 : 0;
}

private int getRightSon(int i)
{
return ((i<<1)+1<=size)? (i<<1)+1 : 0;
}

private int getFather(int i)
{
return ((i>>1)!=0)? i>>1 : 0;
}

private void swap(int i, int j)
{
T tmp = h.get(i);
h.set(i, h.get(j));
h.set(j, tmp);
}

private void sift(int i)
{
int son;
do {
son = 0;
if (getLeftSon(i) != 0)
{
son = getLeftSon(i);
if (getRightSon(i) != 0 && c.compare(h.get(getRightSon(i)), h.get(getLeftSon(i))) > 0)
son = getRightSon(i);
if (c.compare(h.get(son), h.get(i)) <= 0)
son = 0;
}

if (son!=0) {
swap(i, son);
i = son;
}
} while (son!=0);
}

private void percolate(int i)
{
T key = h.get(i);

while ((i > 1) && (c.compare(key, h.get(getFather(i))) > 0))
{
h.set(i, h.get(getFather(i)));
i = getFather(i);
}

h.set(i, key);
}
}

最佳答案

您的代码区域相当窄,大约为 25 个字符,以等宽 12 点字体呈现。

这是查看字符串是否适合给定像素宽度的一种方法:

    public boolean doesStringFit(int width, String s, Font font) {
FontRenderContext frc = new FontRenderContext(null, true, true);
Rectangle2D r2D = font.getStringBounds(s, frc);
int rWidth = (int) Math.round(r2D.getWidth());
int rX = (int) Math.round(r2D.getX());
return width >= (rWidth - rX);
}

关于java - 确保绘制(paint)的绳子不会离开可见区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34004744/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com