gpt4 book ai didi

java - 如何改变图形的大小

转载 作者:搜寻专家 更新时间:2023-11-01 03:14:37 24 4
gpt4 key购买 nike

我有 Java 小程序来绘制一个数组(只是一个接一个的矩形)。

当用户选择创建大小为n的数组时,它会绘制连接在一起的n个矩形。当 n 变大时,图形变大,但由于我使用 JPanel 绘制数组,而 JPanel 不会滚动,所以我有将 JPanel 添加到 JScrollPane 中,但它仍然不会滚动。用户只能看到整个数组的一部分。

谁能给我一些帮助?

这是我的代码:

public class ArrayPanel extends JPanel {
....

public void paintComponent(Graphics g) {
...draw array here..
// I wish to get the updated size of the graphis here,
// then i can reset the preferredSize()....?
System.out.println("width=" + getWidth() + " height=" + getHeight());
}
}

public class ArrayDemo extends JPanel {
public ArrayDemo() {
super(new BorderLayout());

arrayPanel = new ArrayPanel();
arrayPanel.setPreferredSize(new Dimension(400, 300));

JScrollPane container = new JScrollPane(arrayPanel,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );
container.setPreferredSize(arrayPanel.getPreferredSize());
add(container, BorderLayout.CENTER);
...
}
}

最佳答案

不要在 paintComponent 中设置大小。

您没有提供该代码,但您在代码中的某个位置知道该数组的大小和矩形的大小,因此可以在那里设置 JPanel 的尺寸。

下面是一个例子(使用JFrame,而不是Applet,但思路是一样的)如下所示:

alt text http://img186.imageshack.us/img186/143/so2305419.png

public class ScrollPanelFrame extends JFrame{

public ScrollPanelFrame() {
ArrayPanel panel = new ArrayPanel(20, 20);
JScrollPane container = new JScrollPane(
panel,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );
getContentPane().add(container);
}

class ArrayPanel extends JPanel {
final int RECTANGLE_WIDTH = 100;
final int RECTANGLE_HEIGHT = 100;

int rectangleCountX;
int rectangleCountY;

public ArrayPanel(int rectangleCountX, int rectangleCountY) {
this.rectangleCountX = rectangleCountX;
this.rectangleCountY = rectangleCountY;
this.setPreferredSize(new Dimension(RECTANGLE_WIDTH * rectangleCountX,
RECTANGLE_HEIGHT * rectangleCountY));
}

@Override
public void paintComponent(Graphics g) {
for(int x = 0 ; x < rectangleCountX ; x++) {
for(int y = 0 ; y < rectangleCountY ; y++) {
g.setColor(new Color(0, 0, (x+y)*64 % 256));
g.fillRect(x*RECTANGLE_WIDTH, y*RECTANGLE_HEIGHT,
RECTANGLE_WIDTH, RECTANGLE_HEIGHT);
}
}
}
}

public static void main(String[] args) {
ScrollPanelFrame frame = new ScrollPanelFrame();
frame.setSize(600, 400);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true);
}
}

关于java - 如何改变图形的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2305419/

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