用SWT实现窗口里的文字,有背景色,有边框,有圆角,鼠标移动方框里,背景变成绿色
时间: 2024-03-17 07:43:09 浏览: 220
下面是使用 SWT 实现窗口里的文字,有背景色、边框和圆角,鼠标移动到方框中时背景变成绿色的示例代码:
```java
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Path;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class TextWithBackgroundAndBorder {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Text with Background and Border");
shell.setLayout(new FillLayout());
// Create a custom widget to display the text
CustomWidget widget = new CustomWidget(shell, SWT.NONE);
widget.setText("Hello, World!");
widget.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
widget.setBorderColor(display.getSystemColor(SWT.COLOR_GRAY));
widget.setBorderWidth(2);
widget.setCornerRadius(10);
widget.addMouseTrackListener(new MouseAdapter() {
@Override
public void mouseEnter(MouseEvent e) {
widget.setBackground(display.getSystemColor(SWT.COLOR_GREEN));
}
@Override
public void mouseExit(MouseEvent e) {
widget.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
}
});
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
static class CustomWidget extends org.eclipse.swt.widgets.Canvas {
private String text;
private int borderWidth;
private Color borderColor;
private int cornerRadius;
public CustomWidget(org.eclipse.swt.widgets.Composite parent, int style) {
super(parent, style);
addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
GC gc = e.gc;
Rectangle bounds = getBounds();
// Draw the border
gc.setForeground(borderColor);
gc.setLineWidth(borderWidth);
Path borderPath = new Path(getDisplay());
borderPath.addRoundRectangle(0, 0, bounds.width - 1, bounds.height - 1, cornerRadius, cornerRadius);
gc.drawPath(borderPath);
borderPath.dispose();
// Draw the text
gc.setForeground(getForeground());
gc.setFont(getFont());
Point textSize = gc.textExtent(text);
gc.drawText(text, (bounds.width - textSize.x) / 2, (bounds.height - textSize.y) / 2);
}
});
}
public void setText(String text) {
this.text = text;
redraw();
}
public void setBorderWidth(int borderWidth) {
this.borderWidth = borderWidth;
redraw();
}
public void setBorderColor(Color borderColor) {
this.borderColor = borderColor;
redraw();
}
public void setCornerRadius(int cornerRadius) {
this.cornerRadius = cornerRadius;
redraw();
}
}
}
```
这个示例代码创建了一个自定义小部件 CustomWidget,它继承了 SWT 的 Canvas 类,用于显示文本。CustomWidget 有以下特点:
- 可以设置文本内容 setText()。
- 可以设置边框宽度 setBorderWidth()。
- 可以设置边框颜色 setBorderColor()。
- 可以设置圆角半径 setCornerRadius()。
- 当鼠标进入 CustomWidget 区域时,背景色变为绿色;当鼠标离开时,背景色变为白色。
在 CustomWidget 的 paintControl() 方法中,先绘制了边框,然后绘制了文本。边框的形状是一个带圆角的矩形,使用了 SWT 的 Path 类来创建。文本的位置是在 CustomWidget 中心。
阅读全文