我正在使用SWT创建应用程序的菜单。
在类“B”中,createContents()方法负责创建表单的内容:
protected void createContents() {
shell = new Shell();
shell.setSize(500, 315);
shell.setText("SWT Application");
Label lblNewLabel = new Label(shell, SWT.NONE);
lblNewLabel.setFont(SWTResourceManager.getFont("Segoe UI", 14, SWT.NORMAL));
lblNewLabel.setBounds(188, 0, 108, 25);
Button btnLogs = new Button(shell, SWT.NONE);
btnLogs.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
Window3 window = new Window3();
window.open();
}
});
btnLogs.setBounds(386, 242, 75, 25);
StyledText styledText = new StyledText(shell, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI);
styledText.setBounds(10, 64, 357, 203);
Label lblRealTimeLogs = new Label(shell, SWT.NONE);
lblRealTimeLogs.setBounds(10, 35, 108, 15);
Button btnFilters = new Button(shell, SWT.NONE);
btnFilters.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
Window2 window = new Window2();
window.open();
}
});
btnFilters.setBounds(386, 204, 75, 25);
btnFilters.setText("FILTRES");
Label lblConfiguration = new Label(shell, SWT.NONE);
lblConfiguration.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
lblConfiguration.setText("Configuraci\u00F3");
lblConfiguration.setBounds(386, 128, 88, 15);
Button btnNewButton = new Button(shell, SWT.NONE);
btnNewButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
Window4 window = new Window4();
window.open();
}
});
btnNewButton.setBounds(386, 165, 75, 25);
}
然后我执行应用程序并显示类“B”中的表单。 问题是我需要在另一个类的styledtext中添加新的文本行。 我需要做的是在类“A”中它检查文件的内容,如果内容已经改变,它将新行添加到方法createContents()内的类“B”中创建的styledtext ...这看起来很简单,但是我无法从类“A”中引用类“B”中创建的样式文本来添加这些新行......
对不起,如果不是很清楚,我的英语不是很好......
非常感谢任何帮助。 感谢。
答案 0 :(得分:0)
好的,我已经汇总了一个简单的例子,可以告诉你如何做到这一点。它基本上创建了两个类A
和B
,其中A
包含从Text
修改的B
:
public static void main(final String[] args)
{
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("StackOverflow");
shell.setLayout(new GridLayout(1, false));
/* Create your gui class */
A.getInstance(shell);
shell.pack();
shell.open();
/* Wait one second, then simulate generation of other class that calls gui class */
Display.getDefault().timerExec(1000, new Runnable()
{
@Override
public void run()
{
new B();
}
});
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}
private static class A
{
private static A INSTANCE;
/* This is the field of A we want to modify */
private Text text;
public static A getInstance(Shell shell)
{
if (INSTANCE == null && shell != null)
INSTANCE = new A(shell);
return INSTANCE;
}
private A(Shell shell)
{
text = new Text(shell, SWT.BORDER);
}
/* This is the method that allows editing the field of A from the outside */
public void setText(String text)
{
if (this.text != null)
this.text.setText(text);
}
}
private static class B
{
public B()
{
/* Set the text within A */
A.getInstance(null).setText("Hello");
}
}
或者,您可以让Text
static
忘记实例内容。