我正在使用禁用的SWT文本字段(import org.eclipse.swt.widgets.Text
),我基本上想要设置文本颜色。
我知道在JTextField
您可以使用setDisabledTextColor(Color c)
来设置禁用文字的颜色,但是有什么内容可以提交swt小部件文本吗?
非常感谢任何帮助/建议!
答案 0 :(得分:2)
禁用组件的颜色是操作系统调节的事项之一,因此无法在SWT中更改该颜色。
然而,您可以将Listener
添加到SWT.Paint
并自己绘制一些内容。
您可以将此作为起点:
public static void main(String[] args)
{
final Display display = new Display();
Shell shell = new Shell(display);
shell.setText("StackOverflow");
shell.setLayout(new FillLayout(SWT.VERTICAL));
final Text normal = new Text(shell, SWT.BORDER);
final Text special = new Text(shell, SWT.BORDER);
special.addListener(SWT.KeyUp, new Listener()
{
@Override
public void handleEvent(Event e)
{
normal.setText(special.getText());
special.redraw();
}
});
special.addListener(SWT.Paint, new Listener()
{
@Override
public void handleEvent(Event e)
{
if (!special.isEnabled())
{
GC gc = e.gc;
String text = special.getText();
Rectangle bounds = special.getBounds();
gc.setBackground(display.getSystemColor(SWT.COLOR_TITLE_INACTIVE_BACKGROUND));
gc.setForeground(display.getSystemColor(SWT.COLOR_TITLE_FOREGROUND));
gc.fillRectangle(0, 0, bounds.width, bounds.height);
gc.drawText(text, 3, 2);
}
}
});
normal.setEnabled(false);
Button switchButton = new Button(shell, SWT.PUSH);
switchButton.setText("(De)activate");
switchButton.addListener(SWT.Selection, new Listener()
{
@Override
public void handleEvent(Event e)
{
special.setEnabled(!special.getEnabled());
}
});
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
}
看起来像这样(第一个Text
是默认值,第二个Text
是自定义的: