如何删除SWT Button的边框,使其看起来像一个Label

时间:2015-10-16 02:53:24

标签: java swt

我创建了一个在SWT中设置Image的按钮。我想删除按钮的边框。所以它看起来像一个标签。请帮助任何人。

Code Snippet下面:

breakNodeButton = new Button(this, SWT.TRANSPARENT);
breakNodeButton.setBackground(new Color(getDisplay(), 204, 204, 204));
Image breakNodeLabelImg = ...
breakNodeButton.setImage(breakNodeLabelImg);

2 个答案:

答案 0 :(得分:4)

建议Greg,您可以使用PaintListener覆盖按钮的外观。

例如:

Button button = new Button( shell, SWT.PUSH );
button.addPaintListener( new PaintListener() {
  @Override
  public void paintControl( PaintEvent event ) {
    event.gc.setBackground( event.display.getSystemColor( SWT.COLOR_GREEN ) );
    event.gc.fillRectangle( event.x, event.y, event.width, event.height );
    Image image = event.display.getSystemImage( SWT.ICON_QUESTION );
    event.gc.drawImage( image, 0, 0 );
  }
} );

油漆代码会在绿色背景顶部的左上角绘制问号图像。

请注意,按钮的computeSize()方法仍然会查询(空)文本和图像,以计算按钮的首选大小。

由于这可能不是您想要的尺寸,您应该将按钮图像设置为您在油漆代码中使用的按钮图像,或建议布局使用预先计算的尺寸,例如:设置合适的GridDataRowData

或者,您可以使用Label并添加MouseListener来模拟Button的选择侦听器。但是,默认情况下,Label无法通过制表符遍历获得键盘焦点,因此可能无法完全取代Button

答案 1 :(得分:0)

您可以将SWT.FLAT工具栏与单个ToolItem一起使用:

ToolBar toolBar = new ToolBar(parent, SWT.FLAT);
ToolItem item = new ToolItem(toolBar, SWT.PUSH);
item.setText("Button text"); // Remove if you don't need text
item.setImage(display.getSystemImage(SWT.ICON_INFORMATION)); // Remove if you don't need image

就是这样!