AsWing布局管理——BoxLayout

BoxLayout 对容器内组件进行平均分部,并且当容器改变大小时会对其内组件拉升以填满容器空间。
BoxLayout 有两种排列方式,水平(从右到左)排列,纵向(从上到下)排列。

[kml_flashembed movie="http://harryxu.cn/demo/aswing//BoxLayoutTest.swf" height="400" width="500" /]

package
{
import flash.display.Sprite;
import flash.display.StageScaleMode;
 
import org.aswing.AsWingManager;
import org.aswing.JFrame;
import org.aswing.JButton;
import org.aswing.JRadioButton;
import org.aswing.JAdjuster;
import org.aswing.JSlider;
import org.aswing.JLabel;
import org.aswing.BoxLayout;
import org.aswing.ButtonGroup;
import org.aswing.JPanel;
import org.aswing.event.InteractiveEvent;
 
 
public class BoxLayoutTest extends Sprite
{
	private var boxLayout:BoxLayout;
 
	private var frame:JFrame
	private var radio1:JRadioButton;
	private var radio2:JRadioButton;
	private var gapLabel:JLabel;
 
	public function BoxLayoutTest():void
	{
		this.stage.scaleMode = StageScaleMode.NO_SCALE;
		this.stage.stageFocusRect = false;
 
		AsWingManager.setRoot(this);
 
		boxLayout = new BoxLayout();
		boxLayout.setGap(5);
		frame = new JFrame(this, "BoxLayoutTest");
		frame.getContentPane().setLayout(boxLayout);
 
		var button1:JButton = new JButton("button1");
		var button2:JButton = new JButton("button2");
		var button3:JButton = new JButton("button3");
 
		frame.getContentPane().appendAll(button1, button2, button3);
		frame.setY(50);
		frame.setSizeWH(350, 150);
 
		showRadios();
		frame.show();
	}
 
	private function showRadios():void
	{
		radio1 = new JRadioButton("X_AXIS");
		radio2 = new JRadioButton("Y_AXIS");
 
		var group:ButtonGroup = new ButtonGroup();
		group.append(radio1);
		group.append(radio2);
 
		var axisLabel:JLabel = new JLabel("Axis: ");
		var radioPanel:JPanel = new JPanel();
		radio1.addSelectionListener(onRadioChanged);
		radio2.addSelectionListener(onRadioChanged);
		radio1.setSelected(true);
		radioPanel.appendAll(axisLabel, radio1,radio2);
 
		gapLabel = new JLabel("Gap: ");
		gapLabel.setPreferredWidth(50);
		var slider:JSlider = new JSlider();
		slider.setMinimum(0);
		slider.setMaximum(20);
		slider.setPreferredWidth(120);
		slider.addEventListener(InteractiveEvent.STATE_CHANGED, onSliderChanged);
		slider.setValue(5);
		radioPanel.appendAll(gapLabel, slider);
 
		radioPanel.setSizeWH(180, 50);
		addChild(radioPanel);
		radioPanel.validate();
	}
 
	private function onRadioChanged(e:InteractiveEvent):void
	{
		switch(e.target as JRadioButton)
		{
			case radio1:
				boxLayout.setAxis(BoxLayout.X_AXIS);
				break;
			case radio2:
				boxLayout.setAxis(BoxLayout.Y_AXIS);
				break;
		}
		updateLayout();
	}
 
	private function onSliderChanged(e:InteractiveEvent):void
	{
		var slider:JSlider = (e.target as JSlider);
		var v:int = slider.getValue();
		boxLayout.setGap(v);
		gapLabel.setText("Gap: " + String(v));
		updateLayout();
	}
 
	private function updateLayout():void
	{
		frame.getContentPane().setLayout(boxLayout);
	}
 
 
}
}

评论