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

How to combine button and text field using SWT

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

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

如果我正确理解你的问题,那么最好的方法是使用 Composite 来分组 TextLabel 对象。

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

}