プログラマとプロマネのあいだ

プログラマもやるし、プロマネもやるし、たまに似非アーキとか営業っぽいこともやる

JavaのSwingとSencha Touchが似ているという根拠薄弱な理由。

結論

コンポーネント作って、レイアウトマネージャで配置を決めるのは、Sencha TouchもSwingも同じ。
そんだけ。

Sencha Touchの場合

三つのPanelをhboxでレイアウトする
Ext.setup({
    onReady : function() {
        new Ext.Panel({
            fullscreen: true, 
            width: 400,
            height: 300,
            layout: {
                type: 'hbox',
                align: 'stretch'
            },
            defaults: {
                width: 100,
                height: 40,
                border: 3
            },
            items: [{
                html: 'First',
                style: 'background-color: #FF8888'
            },{
                html: 'Second',
                style: 'background-color: #88FF88'
            },{
                html: 'Third',
                style: 'background-color: #8888FF'
            }]
        });
    }
});
実行結果


三つのPanelをvboxでレイアウトする

上のソースのhboxをvboxに変えるだけ。

実行結果

レイアウトを変えるだけで、コンポーネントの配置が変わりましたね!

Javaの場合

三つのJLabelをBoxLayout(X_AXIS)でレイアウトする
import java.awt.Dimension;
import javax.swing.*;

public class test
{
	public static void main(String[] args) throws Exception
	{
		new test();
	}

	public test()
	{
		JFrame frame = new JFrame();
		JPanel panel = new JPanel();
		panel.add(createLabel("First", 100, 40));
		panel.add(createLabel("Second", 100, 40));
		panel.add(createLabel("Third", 100, 40));
		panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));

		frame.getContentPane().add(panel);
		frame.setSize(400, 300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

	private JLabel createLabel(String text, int width, int height)
	{
		JLabel label = new JLabel(text);
		label.setMinimumSize(new Dimension(width, height));
		label.setMaximumSize(new Dimension(width, height));

		return label;
	}
}
実行結果


三つのJLabelをBoxLayout(Y_AXIS)でレイアウトする

上のソースのX_AXISをY_AXISに変えるだけ。

実行結果


というわけで

GUIの構築に関して言えば、SwingとSencha Touchは、
少なからず似通った部分があるのではないのかなと思います。


ちなみにExt JSもそうですけど、
古くはVisual Basicとか、Tcl/Tkとか、XWindowだったり、、
というあたりから、脈々と受け継がれてきたものなんでしょうけどね。