私は実際にswtベースのプログラムを作成しています。コードをクリーンアップしようとすると、問題が発生しました。「グループとボタンの宣言」を新しいクラスに入れたいのですが、そのため、shell
オブジェクトを新しいクラスに送信する必要があります。どうやってやるの?shell
(オブジェクトをコンストラクターに送信しても機能しません)。ここに私の問題のSSCCEがあります:
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
public class Class1
{
static Shell shell;
protected void createContents()
{
shell = new Shell();
shell.setMinimumSize(new Point(800, 600));
shell.setBackground(SWTResourceManager.getColor(242, 242, 242));
shell.setSize(815, 600);
shell.setText("Test");
/*
* Declaration of the groups and buttons
*/
Group areaA = new Group(shell, SWT.NONE);
Button btn1 = new Button(areaA, SWT.CHECK);
Button btn2 = new Button(areaA, SWT.CHECK);
Button btn3 = new Button(areaA, SWT.CHECK);
Group areaB = new Group(shell, SWT.NONE);
Spinner spin1 = new Spinner(areaB, SWT.BORDER);
Spinner spin2 = new Spinner(areaB, SWT.BORDER);
Spinner spin3 = new Spinner(areaB, SWT.BORDER);
Spinner spin4 = new Spinner(areaB, SWT.BORDER);
Button btnA = new Button(areaB, SWT.CHECK);
/*
* Processing of the buttons (short example)
*/
areaA.setBounds(52, 46, 383, 210);
btn1.setBounds(10, 10, 85, 16);
btn1.setText("Button1");
btn2.setBounds(10, 56, 85, 16);
btn2.setText("Button2");
btn3.setBounds(10, 111, 85, 16);
btn3.setText("Button3");
areaB.setBounds(52, 274, 383, 192);
spin1.setBounds(193, 34, 47, 21);
spin2.setBounds(282, 34, 47, 21);
spin3.setBounds(193, 82, 47, 21);
spin4.setBounds(282, 82, 47, 21);
btnA.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent arg0)
{
}
});
btnA.setBounds(10, 34, 85, 16);
btnA.setText("Select range a");
Button btnB = new Button(areaB, SWT.CHECK);
btnB.setBounds(10, 87, 85, 16);
btnB.setText("Select range b");
}
public static void main(String[] args)
{
/*
* Creating and disposing of the window
*/
Display display = Display.getDefault();
try
{
Class1 window = new Class1();
window.createContents();
shell.layout();
shell.setVisible(true);
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
これを適切に作成する方法はありますか?
EDIT:最初に全体を2つの異なるクラスに入れてみてください:
package test;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import test.Class2;
public class Class2
{
public Class2(Shell shell)
{
/*
* Declaration of the groups and buttons
*/
Group areaA = new Group(shell, SWT.NONE);
Button btn1 = new Button(areaA, SWT.CHECK);
Button btn2 = new Button(areaA, SWT.CHECK);
Button btn3 = new Button(areaA, SWT.CHECK);
Group areaB = new Group(shell, SWT.NONE);
Spinner spin1 = new Spinner(areaB, SWT.BORDER);
Spinner spin2 = new Spinner(areaB, SWT.BORDER);
Spinner spin3 = new Spinner(areaB, SWT.BORDER);
Spinner spin4 = new Spinner(areaB, SWT.BORDER);
Button btnA = new Button(areaB, SWT.CHECK);
}
}
次に、Class2 の呼び出しと使用 (SSCCE からの変更例) :
protected void createContents()
{
shell = new Shell();
shell.setMinimumSize(new Point(800, 600));
shell.setBackground(SWTResourceManager.getColor(242, 242, 242));
shell.setSize(815, 600);
shell.setText("Test");
Class2 buttons = new Class2(shell);
/*
* Processing of the buttons (short example)
*/
buttons.areaA.setBounds(52, 46, 383, 210);
buttons.btn1.setBounds(10, 10, 85, 16);
buttons.btn1.setText("Button1");
buttons.btn2.setBounds(10, 56, 85, 16);
buttons.btn2.setText("Button2");
buttons.btn3.setBounds(10, 111, 85, 16);
buttons.btn3.setText("Button3");
buttons.areaB.setBounds(52, 274, 383, 192);
buttons.spin1.setBounds(193, 34, 47, 21);
buttons.spin2.setBounds(282, 34, 47, 21);
buttons.spin3.setBounds(193, 82, 47, 21);
buttons.spin4.setBounds(282, 82, 47, 21);
buttons.btnA.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent arg0)
{
}
});
buttons.btnA.setBounds(10, 34, 85, 16);
buttons.btnA.setText("Select range a");
Button btnB = new Button(buttons.areaB, SWT.CHECK);
btnB.setBounds(10, 87, 85, 16);
btnB.setText("Select range b");
}
この例は機能しません
私が考えたもう1つの解決策は、宣言部分をclass2の本体に入れることですが、Shell
オブジェクトが欠落しており、コンストラクターを介さずにオブジェクトをクラスに渡す方法がわかりません。
ここで私の問題の SSCCE :「グループとボタンの宣言」を新しいクラスに入れたいのですが、そのため、shell
オブジェクトを新しいクラスに送信する必要があります。どうやってやるの?shell
(オブジェクトをコンストラクターに送信しても機能しません)。
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
public class Class1
{
static Shell shell;
protected void createContents()
{
shell = new Shell();
shell.setMinimumSize(new Point(800, 600));
shell.setBackground(SWTResourceManager.getColor(242, 242, 242));
shell.setSize(815, 600);
shell.setText("Test");
/*
* Declaration of the groups and buttons
*/
Group areaA = new Group(shell, SWT.NONE);
Button btn1 = new Button(areaA, SWT.CHECK);
Button btn2 = new Button(areaA, SWT.CHECK);
Button btn3 = new Button(areaA, SWT.CHECK);
Group areaB = new Group(shell, SWT.NONE);
Spinner spin1 = new Spinner(areaB, SWT.BORDER);
Spinner spin2 = new Spinner(areaB, SWT.BORDER);
Spinner spin3 = new Spinner(areaB, SWT.BORDER);
Spinner spin4 = new Spinner(areaB, SWT.BORDER);
Button btnA = new Button(areaB, SWT.CHECK);
/*
* Processing of the buttons (short example)
*/
areaA.setBounds(52, 46, 383, 210);
btn1.setBounds(10, 10, 85, 16);
btn1.setText("Button1");
btn2.setBounds(10, 56, 85, 16);
btn2.setText("Button2");
btn3.setBounds(10, 111, 85, 16);
btn3.setText("Button3");
areaB.setBounds(52, 274, 383, 192);
spin1.setBounds(193, 34, 47, 21);
spin2.setBounds(282, 34, 47, 21);
spin3.setBounds(193, 82, 47, 21);
spin4.setBounds(282, 82, 47, 21);
btnA.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent arg0)
{
}
});
btnA.setBounds(10, 34, 85, 16);
btnA.setText("Select range a");
Button btnB = new Button(areaB, SWT.CHECK);
btnB.setBounds(10, 87, 85, 16);
btnB.setText("Select range b");
}
public static void main(String[] args)
{
/*
* Creating and disposing of the window
*/
Display display = Display.getDefault();
try
{
Class1 window = new Class1();
window.createContents();
shell.layout();
shell.setVisible(true);
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}