java - java 矩形:为什么错误“getPreferredSize()”
问题描述
为什么错误此代码:
layout.setConstraint(andy, new Rectangle(new Point(10, 10), andy.getPreferredSize()));
错误:<br>
The constructor Rectangle(Point, Dimension) is undefined
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The constructor Rectangle(Point, Dimension) is undefined
The constructor Rectangle(Point, Dimension) is undefined
The constructor Rectangle(Point, Dimension) is undefined
at testdot.testdot.createDiagram(testdot.java:66)
at testdot.testdot.run(testdot.java:23)
at testdot.testdot.main(testdot.java:92)
我不明白这个错误。请帮助调试错误代码。
import java.awt.*;
import org.eclipse.draw2d.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class testdot {
private void run() {
Shell shell = new Shell(new Display());
shell.setSize(365, 280);
shell.setText("Genealogy");
shell.setLayout(new GridLayout());
Canvas canvas = createDiagram(shell);
canvas.setLayoutData(new GridData(GridData.FILL_BOTH));
Display display = shell.getDisplay();
shell.open();
while (!shell.isDisposed()) {
while (!display.readAndDispatch()) {
display.sleep();
}
}
}
private IFigure createPersonFigure(String name) {
RectangleFigure rectangleFigure = new RectangleFigure();
rectangleFigure.setBackgroundColor(ColorConstants.lightGray);
rectangleFigure.setLayoutManager(new ToolbarLayout());
rectangleFigure.setPreferredSize(100, 100);
rectangleFigure.add(new Label(name));
return rectangleFigure;
}
private Canvas createDiagram(Composite parent) {
// Create a root figure and simple layout to contain
// all other figures
Figure root = new Figure();
root.setFont(parent.getFont());
XYLayout layout = new XYLayout();
root.setLayoutManager(layout);
// Add the father "Andy"
IFigure andy = createPersonFigure("Andy");
root.add(andy);
layout.setConstraint(andy,
new Rectangle(new Point(10, 10), andy.getPreferredSize()));
// Add the mother "Betty"
IFigure betty = createPersonFigure("Betty");
root.add(betty);
layout.setConstraint(betty,
new Rectangle(new Point(230, 10), betty.getPreferredSize()));
// Add the son "Carl"
IFigure carl = createPersonFigure("Carl");
root.add(carl);
layout.setConstraint(carl,
new Rectangle(new Point(120, 120), carl.getPreferredSize()));
// Create a canvas to display the root figure
Canvas canvas = new Canvas(parent, SWT.DOUBLE_BUFFERED);
canvas.setBackground(ColorConstants.white);
LightweightSystem lws = new LightweightSystem(canvas);
lws.setContents(root);
return canvas;
}
public static void main(String[] args) {
new testdot().run();
}
}
解决方案
您在代码中执行此操作(或类似操作) 3 次:
new Rectangle(new Point(10, 10), andy.getPreferredSize()));
它不是可编译的Java。正如编译错误消息所说:
constructor Rectangle(Point, Dimension) is undefined
为什么这么说?毕竟,(javadoc)Rectangle(Point, Dimension)
中有一个构造函数。java.awt.Rectangle
那么让我们看看实际的类型。
- 第一个参数显然是 a
java.awt.Point
。好的。 - 第二个参数是对
IFigure
实例的方法调用的结果。嗯。
如果您查看文档,IFigure
您会发现这些getPreferredSize
方法返回一个org.eclipse.draw2d.geometry.Dimension
对象,而不是一个java.awt.Dimension
.
基本上,您是在混淆 SWT 和 AWT 类型。
import java.awt.*;
那是错的。由于您(显然)正在为 Eclipse / SWT 平台编程,因此您应该专门导入和使用 SWT 类。将 SWT 与 AWT(或 Swing、JavaFX 或 Android)api 混合使用会导致问题。
推荐阅读
- javascript - jQuery - 延迟和承诺
- java - 阻止一次底部导航按钮:系统和物理
- python - 使用消息时 AIOKafka 库中的 UnknownMemberId 错误
- reactjs - 添加新数据后类不适用于reactjs中的所有html元素
- java - 使用 XORShift 种子实现从 Random.nextInt 获取负值
- graphql - 如何处理 Gatsby graphql 中的未定义值?
- rust - 被释放的 Rust 指针未分配错误
- caching - 使用 Redis 缓存关系数据库查询结果的典型方法是什么?
- python - 如何使用opencv检测自定义标记方向
- javascript - 即使文件未更改,如何执行 gulp 任务