写一个eclipse程序,画一个长方形,点击长方形可以有弹窗响应消息并可以用鼠标滚轮和键盘快捷键进行图形放大缩小
时间: 2024-03-12 09:43:02 浏览: 71
好的,以下是一个简单实现该功能的Eclipse程序:
```java
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.MouseWheelListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class RectangleDrawing {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
shell.setText("Rectangle Drawing");
// 创建一个画布并在其中绘制长方形
Canvas canvas = new Canvas(shell, SWT.NONE);
canvas.addPaintListener(event -> {
GC gc = event.gc;
gc.setForeground(new Color(display, 255, 0, 0));
gc.drawRectangle(50, 50, 100, 80);
});
// 监听鼠标单击事件并弹出消息框
canvas.addMouseListener(new MouseListener() {
@Override
public void mouseDoubleClick(MouseEvent event) { }
@Override
public void mouseDown(MouseEvent event) { }
@Override
public void mouseUp(MouseEvent event) {
if (event.button == 1 && event.x >= 50 && event.y >= 50 && event.x <= 150 && event.y <= 130) {
Display.getDefault().asyncExec(() -> {
MessageBox messageBox = new MessageBox(shell, SWT.ICON_INFORMATION | SWT.OK);
messageBox.setMessage("您点击了长方形!");
messageBox.open();
});
}
}
});
// 监听鼠标滚轮事件并缩放画布
canvas.addMouseWheelListener(new MouseWheelListener() {
@Override
public void mouseScrolled(MouseEvent event) {
int zoom = event.count > 0 ? 1 : -1;
canvas.setScale(canvas.getScale() + zoom);
canvas.redraw();
}
});
// 监听键盘事件并缩放画布
canvas.addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent event) {
if (event.keyCode == '+') {
canvas.setScale(canvas.getScale() + 1);
canvas.redraw();
} else if (event.keyCode == '-') {
canvas.setScale(canvas.getScale() - 1);
canvas.redraw();
}
}
@Override
public void keyReleased(KeyEvent event) { }
});
// 设置画布的缩放和滚动条
canvas.setScale(1);
canvas.setOrigin(new Point(0, 0));
canvas.setMinSize(500, 400);
canvas.addControlListener(event -> {
Rectangle clientArea = canvas.getClientArea();
canvas.setMinSize(clientArea.width, clientArea.height);
});
shell.setSize(600, 500);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
```
程序中创建了一个画布`Canvas`,使用`GC`对象在其中绘制了一个长方形。同时,监听了鼠标单击事件并弹出一个消息框,提醒用户点击了长方形。与前一个程序相同,还监听了鼠标滚轮事件和键盘事件,实现了画布的缩放功能。其中,鼠标滚轮事件通过`Canvas`对象的`setScale`方法实现,键盘事件则根据不同的按键实现缩放的方向。最后,设置了画布的缩放和滚动条的属性,确保画布可以被正确缩放和显示。
阅读全文