我想使用一个文本字段,当用户输入一些数据时,以及当用户完成编辑并移出文本字段时,文本字段将会折叠。之后,当用户专注于文本字段时,它应该像工具提示一样扩展。关于这个的任何指针都会对我有帮助。
答案 0 :(得分:2)
只需在文字字段中添加FocusListener
:
text.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
text.setSize(); // put in the size you want
}
@Override
public void focusLost(FocusEvent e) {
text.setSize(); // put in the size you want
}
});
请注意,要使setSize
正常工作,text
的父级才能拥有布局。
答案 1 :(得分:2)
此代码应该让您了解如何执行此操作:
public static void main(String[] args)
{
Display display = Display.getDefault();
final Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, false));
final Text text = new Text(shell, SWT.BORDER | SWT.MULTI);
text.setText("edasdasdas\n\nasdasda\n\nasdasd");
final GridData data = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
data.heightHint = 100;
text.setLayoutData(data);
text.addListener(SWT.FocusIn, new Listener()
{
@Override
public void handleEvent(Event arg0)
{
data.heightHint = 100;
shell.layout(true);
}
});
text.addListener(SWT.FocusOut, new Listener()
{
@Override
public void handleEvent(Event arg0)
{
data.heightHint = 50;
shell.layout(true);
}
});
Button button = new Button(shell, SWT.PUSH);
button.setText("Button");
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
当焦点丢失/获得时,它基本上会更改heightHint
的{{1}}。之后,您需要重新布局父级。
您必须自己对“聚焦高度”和“未聚焦高度”值进行一些调整。
以下是一些截图:
关注焦点:
没有焦点:
只需按GridData
即可失去焦点。