如何在“For循环”中使控件可见?

huangapple 未分类评论44阅读模式
英文:

How to make visible a control in a For Cycle?

问题

我有三个 SWT 组控件,除了编号不同之外,它们的名称相同(即 'grp1','grp2','grp3')。我希望在 for 循环中使这些组控件可见;为此,我创建了一个包含 Group 控件的数组。

这是代码:

Group[] grpArray = new Group[3];
grpArray[0] = grp1;
grpArray[1] = grp2;
grpArray[2] = grp3;

txtLvl = new Text(composite, SWT.BORDER | SWT.READ_ONLY);

txtLvl.addModifyListener(new ModifyListener() {
    public void modifyText(ModifyEvent e) {
        for (int i = 1; i <= Integer.parseInt(txtLvl.getText()); i++) {
            grpArray[i-1].setVisible(true);
        }
    }
});

这是错误代码:

at it.anabasibdg.viste.AnagPdc$4.modifyText(AnagPdc.java:296)
at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Text.wmCommandChild(Unknown Source)
at org.eclipse.swt.widgets.Control.WM_COMMAND(Unknown Source)
at org.eclipse.swt.widgets.Control.windowProc(Unknown Source)
at org.eclipse.swt.widgets.Display.windowProc(Unknown Source)
at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.CallWindowProc(Unknown Source)
at org.eclipse.swt.widgets.Text.callWindowProc(Unknown Source)
at org.eclipse.swt.widgets.Control.windowProc(Unknown Source)
at org.eclipse.swt.widgets.Text.windowProc(Unknown Source)
at org.eclipse.swt.widgets.Display.windowProc(Unknown Source)
at org.eclipse.swt.internal.win32.OS.SetWindowTextW(Native Method)
at org.eclipse.swt.internal.win32.OS.SetWindowText(Unknown Source)
at org.eclipse.swt.widgets.Text.setText(Unknown Source)
at it.anabasibdg.viste.AnagPdc$3.widgetSelected(AnagPdc.java:213)
at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
at it.anabasibdg.viste.Main.open(Main.java:58)
at it.anabasibdg.viste.LoginForm$3.widgetSelected(LoginForm.java:191)
at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
at it.anabasibdg.viste.LoginForm.open(LoginForm.java:110)
at it.anabasibdg.viste.LoginForm$1.run(LoginForm.java:59)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
at it.anabasibdg.viste.LoginForm.main(LoginForm.java:55)
英文:

I have three SWT group control with the same name apart from the number (i.e. 'grp1','grp2','grp3').
I want to make visible the group control in a for cycle; for this I have created an Array that contains the Group control.

This is the code:

Group [] grpArray = new Group[3];
	grpArray[0] = grp1;
	grpArray[1] = grp2;
	grpArray[2] = grp3;

	txtLvl = new Text(composite, SWT.BORDER | SWT.READ_ONLY);

	txtLvl.addModifyListener(new ModifyListener() {
		public void modifyText(ModifyEvent e) {
			
			for (int i = 1; i &lt;= Integer.parseInt(txtLvl.getText()); i++) {
				
				grpArray[i-1].setVisible(true);
				
				
			}
			}
			
		}
	);

This is the error code:

at it.anabasibdg.viste.AnagPdc$4.modifyText(AnagPdc.java:296)
at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Text.wmCommandChild(Unknown Source)
at org.eclipse.swt.widgets.Control.WM_COMMAND(Unknown Source)
at org.eclipse.swt.widgets.Control.windowProc(Unknown Source)
at org.eclipse.swt.widgets.Display.windowProc(Unknown Source)
at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.CallWindowProc(Unknown Source)
at org.eclipse.swt.widgets.Text.callWindowProc(Unknown Source)
at org.eclipse.swt.widgets.Control.windowProc(Unknown Source)
at org.eclipse.swt.widgets.Text.windowProc(Unknown Source)
at org.eclipse.swt.widgets.Display.windowProc(Unknown Source)
at org.eclipse.swt.internal.win32.OS.SetWindowTextW(Native Method)
at org.eclipse.swt.internal.win32.OS.SetWindowText(Unknown Source)
at org.eclipse.swt.widgets.Text.setText(Unknown Source)
at it.anabasibdg.viste.AnagPdc$3.widgetSelected(AnagPdc.java:213)
at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
at it.anabasibdg.viste.Main.open(Main.java:58)
at it.anabasibdg.viste.LoginForm$3.widgetSelected(LoginForm.java:191)
at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
at it.anabasibdg.viste.LoginForm.open(LoginForm.java:110)
at it.anabasibdg.viste.LoginForm$1.run(LoginForm.java:59)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
at it.anabasibdg.viste.LoginForm.main(LoginForm.java:55)

答案1

得分: -1

我刚刚是这样解决我的问题的:

private ArrayList<Group> grpArray1 = new ArrayList<Group>();

txtLvl.addModifyListener(new ModifyListener() {
    public void modifyText(ModifyEvent e) {
        
        groupArray(grp1, grp2, grp3);
        
        for (Group grp : grpArray1) {
            
            grp.setVisible(true);
            
        }
    }
});

public void groupArray(Group... c) {
    for (Group group : c) {
        grpArray1.add(group);
    }
}
英文:

I have just solved my problem in this way:

private ArrayList&lt;Group&gt; grpArray1 = new ArrayList&lt;Group&gt;();


	txtLvl.addModifyListener(new ModifyListener() {
		public void modifyText(ModifyEvent e) {
			
			groupArray(grp1, grp2,grp3);
			
			for (Group grp : grpArray1) {
				
				grp.setVisible(true);
				
			}


	public void groupArray(Group... c) {
	
	for (Group group : c) {
		
		grpArray1.add(group);
		
	}
	
}

huangapple
  • 本文由 发表于 2020年4月10日 17:16:19
  • 转载请务必保留本文链接:https://java.coder-hub.com/61137268.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定