如何使用SWT组合按钮和文本字段

时间:2017-01-04 09:06:53

标签: java swt textfield

如何使用SWT组合按钮和文本字段,并为按钮提供自定义图标。

许多人建议使用Combo但它提供了下拉选项,但我不希望它是一个下拉图标。任何人都可以帮忙并提出实施策略吗?

1 个答案:

答案 0 :(得分:4)

如果我正确理解您的问题,那么最好的方法是使用CompositeTextLabel个对象进行分组。

Text对象显然是您的文本字段,使用Label您可以设置图片以提供一个不错的无边框按钮。

enter image description here

根据您的需要,这可以很容易地扩展到允许多行文本区域,但我会坚持使用一行代表

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();
    }

}