0
다음 코드에서 세 가지 표시 목록 단추 중 하나를 클릭하면 먼저 복합 레이블에있는 모든 레이블을 삭제 한 다음 문자열 목록의 각 행에 대한 레이블을 만듭니다.처분 및 재 작성 후 SWT 레이블이 표시되지 않음
동일한 버튼을 두 번 클릭하면 텍스트가 모두 분산됩니다.
다른 단추 중 하나로 전환하면 텍스트가 표시됩니다.
코드는 매번 동일한 작업을 수행하여 복합체 안의 모든 레이블을 처리 한 다음 새 레이블을 복합체에 추가합니다. 정확히 같은 내용의 레이블을 복합체에 다시 추가하면 어떤 이유로 화면에 더 이상 표시하지 않습니다.
content.layout();
를 호출
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
public class BasicMapLabelTestDialog extends Dialog
{
List<Label> displaylabels = new ArrayList<>();
Composite content, list;
public BasicMapLabelTestDialog(Shell parentShell)
{
super(parentShell);
}
@Override
protected void configureShell(Shell shell)
{
super.configureShell(shell);
shell.setSize(new Point(700, 500));
shell.setText("FML"); //$NON-NLS-1$
}
@Override
public Control createDialogArea(final Composite comp)
{
content = (Composite) super.createDialogArea(comp);
content.setLayout(new GridLayout(1, false));
content.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
final List<String> rows1 = new ArrayList<>(3);
rows1.add("Hello");
rows1.add("Baz");
rows1.add("Please");
rows1.add("Help");
final List<String> rows2 = new ArrayList<>(3);
rows2.add("You're");
rows2.add("My");
rows2.add("Only");
rows2.add("Hope");
final List<String> rows3 = new ArrayList<>(3);
rows3.add("Or");
rows3.add("Maybe");
rows3.add("greg?");
Button set1 = new Button(content, SWT.PUSH);
set1.setText("Display List 1");
set1.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateList(rows1);
}
});
Button set2 = new Button(content, SWT.PUSH);
set2.setText("Display List 2");
set2.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateList(rows2);
}
});
Button set3 = new Button(content, SWT.PUSH);
set3.setText("Display List 3");
set3.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateList(rows3);
}
});
Button test = new Button(content, SWT.PUSH);
test.setText("Print Label Content");
test.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
for (Label l : displaylabels) {
System.out.println(l.getText());
}
}
});
list = new Composite(content, SWT.NONE);
list.setLayout(new GridLayout(1, true));
new Label(content, SWT.HORIZONTAL | SWT.SEPARATOR);
return content;
}
private void updateList(List<String> rows) {
if (this.displaylabels == null) {
this.displaylabels = new ArrayList<>();
}
for (Label l : displaylabels) {
l.dispose();
}
this.displaylabels.clear();
for (String item : rows) {
addListLabel(item);
}
content.layout();
content.redraw();
}
private void addListLabel(String whoText) {
Label a = new Label(list, SWT.NONE);
a.setText(whoText);
this.displaylabels.add(a);
}
public static void main(String[] args)
{
Display d = new Display();
Shell s = new Shell();
BasicMapLabelTestDialog fml = new BasicMapLabelTestDialog(s);
fml.open();
}
}
감사합니다,
글렌 X
이제 목록에 처음 나왔다고 생각합니다. 대단히 고맙습니다. 그 행동은 그렇게 생각하지도 못했을 정도로 당황 스러웠습니다. – Link19