如何使用SWT组合按钮和文本字段,并为按钮提供自定义图标。
许多人建议使用Combo但它提供了下拉选项,但我不希望它是一个下拉图标。任何人都可以帮忙并提出实施策略吗?
答案 0 :(得分:4)
如果我正确理解您的问题,那么最好的方法是使用Composite
对Text
和Label
个对象进行分组。
Text
对象显然是您的文本字段,使用Label
您可以设置图片以提供一个不错的无边框按钮。
根据您的需要,这可以很容易地扩展到允许多行文本区域,但我会坚持使用一行代表
public class TextWithButtonExample {
/**
* Simple class to accomplish what you want by wrapping
* the Text and Label objects with a Composite.
*/
public class TextWithButton {
public TextWithButton(final Composite parent) {
// The border gives the appearance of a single component
final Composite baseComposite = new Composite(parent, SWT.BORDER);
baseComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
final GridLayout baseCompositeGridLayout = new GridLayout(2, false);
baseCompositeGridLayout.marginHeight = 0;
baseCompositeGridLayout.marginWidth = 0;
baseComposite.setLayout(baseCompositeGridLayout);
// You can set the background color and force it on
// the children (the Text and Label objects) to add
// to the illusion of a single component
baseComposite.setBackground(new Color(parent.getDisplay(), new RGB(255, 255, 255)));
baseComposite.setBackgroundMode(SWT.INHERIT_FORCE);
final Text text = new Text(baseComposite, SWT.SINGLE);
text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
// Get whatever image you want from wherever
// (in this case the web so it can be run easily!)
Image buttonImage;
try {
buttonImage = ImageDescriptor.createFromURL(new URL("http://eclipse-icons.i24.cc/ovr16/clear.gif")).createImage();
} catch (final MalformedURLException e) {
buttonImage = null;
}
final Label button = new Label(baseComposite, SWT.NONE);
button.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true));
button.setImage(buttonImage);
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseUp(final MouseEvent e) {
// Do whatever you want when the 'button' is clicked
text.setText("");
}
});
}
}
final Display display;
final Shell shell;
public TextWithButtonExample() {
display = new Display();
shell = new Shell(display);
shell.setLayout(new GridLayout());
shell.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
new TextWithButton(shell);
}
public void run() {
shell.setSize(200, 100);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
public static void main(final String[] args) {
new TextWithButtonExample().run();
}
}