1
雖然Swing
體系結構假設小部件被「添加」到另一箇中,但SWT
使用另一個範例:每個小部件都在構造函數中具有父集。避免在SWT中的窗口構件中設置父窗口?
我認爲以前的方法更好,因爲我可以隔離創建每個控件的代碼。
例如
// creating button 1
JButton button1 = new JButton("Button 1");
// creating button 2
JButton button2 = new JButton("Button 2");
// creating button 3
JButton button3 = new JButton("Button 3");
// creating panel
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
panel.add(button1);
panel.add(button2);
panel.add(button3);
// creating frame
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel);
frame.pack();
frame.setVisible(true);
我們可以在這裏有三個小部件,每一個在它自己的代碼塊創建。
如果我想補充一個幀的水平,我只需要添加新的塊和一個小的修復
// creating button 1
JButton button1 = new JButton("Button 1");
// creating button 2
JButton button2 = new JButton("Button 2");
// creating button 3
JButton button3 = new JButton("Button 3");
// creating panel
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
panel.add(button1);
panel.add(button2);
panel.add(button3);
// creating another panel
JPanel panel2 = new JPanel();
panel2.setLayout(new FlowLayout());
panel2.add(panel);
// creating frame
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//frame.add(panel);
frame.add(panel2); // one fix
frame.pack();
frame.setVisible(true);
並非如此SWT
。我必須做出許多修復以重新分配所有子代創建代碼給新父代。
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new RowLayout(SWT.HORIZONTAL));
Composite composite = new Composite(shell, SWT.NONE);
composite.setLayout(new RowLayout(SWT.HORIZONTAL));
Composite composite2 = new Composite(composite, SWT.NONE);
composite2.setLayout(new RowLayout(SWT.HORIZONTAL));
//Button button1 = new Button(composite, SWT.PUSH);
Button button1 = new Button(composite2, SWT.PUSH); // fix 1
button1.setText("Button 1");
// Button button2 = new Button(composite, SWT.PUSH);
Button button2 = new Button(composite2, SWT.PUSH); // fix 2
button2.setText("Button 2");
//Button button3 = new Button(composite, SWT.PUSH);
Button button3 = new Button(composite2, SWT.PUSH); // fix 3
button3.setText("Button 3");
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
這是潛在錯誤的來源。
有什麼辦法可以避免這個問題嗎?
你的對比是有缺陷的。在鞦韆中,您將在舊的和框架之間引入一個新的面板,而在SWT中,您將在按鈕和複合材料之間引入一個新的組合。如果你想在按鈕和麪板之間添加面板,你將不得不改變比SWT代碼更多的線... – Baz
是的,你是對的,這是我的錯。 – Dims
順便說一句:SWT方法的一些優點:1.你不能忘記添加一個控件給父母。 2.您無法將錯誤的控件添加到多個父母。 – Baz