Я пытаюсь написать собственный виджет:
package amarsoft.rcp.base.widgets;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Layout;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wb.swt.ResourceManager;
public class SearchBox extends Composite {
private Text text;
private Label icon;
public SearchBox(Composite parent) {
super(parent, SWT.BORDER);
setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
setBackgroundMode(SWT.INHERIT_FORCE);
icon = new Label(this, SWT.NONE);
icon.setImage(ResourceManager.getImage("icons/search.png"));
text = new Text(this, SWT.NONE);
addControlListener(new ControlAdapter() {
@Override
public void controlResized(ControlEvent e) {
resize();
}
});
}
void resize() {
Point iExtent = icon.computeSize(SWT.DEFAULT, SWT.DEFAULT, false);
Point tExtent = text.computeSize(SWT.DEFAULT, SWT.DEFAULT, false);
icon.setBounds(tExtent.x, 1, iExtent.x, iExtent.y);
text.setBounds(1, 1, tExtent.x, tExtent.y);
}
@Override
public Point computeSize(int wHint, int hHint, boolean changed) {
Point iExtent = icon.computeSize(SWT.DEFAULT, SWT.DEFAULT, false);
Point tExtent = text.computeSize(SWT.DEFAULT, SWT.DEFAULT, false);
System.out.println(iExtent);
System.out.println(tExtent);
int width = iExtent.x + tExtent.x;
int height = Math.max(iExtent.y, tExtent.y);
if (wHint != SWT.DEFAULT)
width = wHint;
if (hHint != SWT.DEFAULT)
height = hHint;
System.out.println(new Point(width + 2, height + 2));
return new Point(width + 5, height + 5);
}
}
, если я пытаюсь использовать его в родительском композите с RowLayout, он выглядит следующим образом:
но если я попытаюсь использовать его в родительском композите с FillLayout, он будет выглядеть так:фиксированная высота, минимальная ширина, может быть изменена в горизонтальном направлении, если для этого есть больше места.