- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!Swing レイアウト 2
[Swing]
*FlowLayout
*GridBagLayout
*GridLayout
!FlowLayout
::L to R
{{ref_image flow01.jpg}}
::R to L
{{ref_image flow02.jpg}}
!GridBagLayout
::グリッドの位置
{{ref_image gridbag02.jpg}}
::結果
{{ref_image gridbag01.jpg}}
!GridLayout
{{ref_image grid.jpg}}
!ソースコード
import java.awt.BorderLayout;
import java.awt.ComponentOrientation;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
@SuppressWarnings("serial")
public class LayoutTest2 extends JFrame {
/**
* FlowLayout test
* @see http://java.sun.com/docs/books/tutorial/uiswing/layout/flow.html
*/
public void testFlowLayout() {
JFrame frame = new JFrame("FlowLayout Test");
Container pane = frame.getContentPane();
final JPanel panel1 = new JPanel(new FlowLayout());
class MyMethodLocalActionListener implements ActionListener {
MyMethodLocalActionListener() {
}
public void actionPerformed(ActionEvent e) {
ComponentOrientation co = null;
if ("L to R".equals(((JButton)e.getSource()).getText())) {
co = ComponentOrientation.LEFT_TO_RIGHT;
} else {
co = ComponentOrientation.RIGHT_TO_LEFT;
}
panel1.setComponentOrientation(co);
panel1.validate();
panel1.repaint();
}
}
JButton btn1 = new JButton("L to R");
btn1.addActionListener(new MyMethodLocalActionListener());
JButton btn2 = new JButton("R to L");
btn2.addActionListener(new MyMethodLocalActionListener());
panel1.add(btn1);
panel1.add(new JTextField("text 1", 10));
panel1.add(new JTextField("text 2", 20));
panel1.add(btn2);
pane.add(panel1);
frame.pack();
frame.setVisible(true);
}
/**
* GridBagLayout test
* @see http://java.sun.com/docs/books/tutorial/uiswing/layout/gridbag.html
*/
public void testGridBagLayout() {
JFrame frame = new JFrame("GridBagLayout Test");
Container pane = frame.getContentPane();
GridBagLayout gbl = new GridBagLayout();
pane.setLayout(gbl);
GridBagConstraints c = new GridBagConstraints();
int[][] buttonPos = {
{0,5}/*0*/,
{0,4}/*1*/,{2,4}/*2*/,{4,4}/*3*/,
{0,3}/*4*/,{2,3}/*5*/,{4,3}/*6*/,
{0,2}/*7*/,{2,2}/*8*/,{4,2}/*9*/,
};
c.fill = GridBagConstraints.HORIZONTAL; // 共通設定
c.gridwidth = 6; // ↓ 列数設定
c.gridx = 0;
c.gridy = 0;
c.gridwidth = GridBagConstraints.REMAINDER; // ↑ 最終行
JTextField txtResult = new JTextField("");
gbl.setConstraints(txtResult, c);
pane.add(txtResult);
c.gridwidth = 3; // ↓ 列数設定
c.gridx = 0;
c.gridy = 1;
JButton btnCE = new JButton("CE");
gbl.setConstraints(btnCE, c);
pane.add(btnCE);
c.gridx = 3;
c.gridy = 1;
c.gridwidth = GridBagConstraints.REMAINDER; // ↑ 最終行
JButton btnC = new JButton("C");
gbl.setConstraints(btnC, c);
pane.add(btnC);
c.gridwidth = 2; // ↓ 列数設定
for (int i=0; i<10; i++) {
c.gridx = buttonPos[i][0];
c.gridy = buttonPos[i][1];
JButton btnN = new JButton(String.valueOf(i));
gbl.setConstraints(btnN, c);
pane.add(btnN);
}
c.gridx = 2;
c.gridy = 5;
JButton btnP = new JButton("+");
gbl.setConstraints(btnP, c);
pane.add(btnP);
c.gridx = 4;
c.gridy = 5;
JButton btnM = new JButton("-");
gbl.setConstraints(btnM, c);
pane.add(btnM);
frame.pack();
frame.setVisible(true);
}
/**
* GridLayout test
* @see http://java.sun.com/docs/books/tutorial/uiswing/layout/grid.html
*/
public void testGridLayout() {
JFrame frame = new JFrame("GridLayout Test");
final Container pane = frame.getContentPane();
pane.setLayout(new BorderLayout());
final GridLayout gridLayout = new GridLayout(3,3);
final JPanel gridPanel = new JPanel(gridLayout);
for (int i=0; i<9; i++) {
gridPanel.add(new JButton(String.valueOf(i)));
}
JPanel ctrlPanel = new JPanel(new BorderLayout());
JSlider slider = new JSlider(0 ,50);
slider.addChangeListener(
new ChangeListener() {
public void stateChanged(ChangeEvent e) {
int val = ((JSlider)e.getSource()).getValue();
gridLayout.setHgap(val);
gridLayout.setVgap(val);
gridLayout.layoutContainer(gridPanel);
}
}
);
ctrlPanel.add(new JLabel("gap 0 - 50"), BorderLayout.NORTH);
ctrlPanel.add(slider, BorderLayout.CENTER);
pane.add(ctrlPanel, BorderLayout.NORTH);
pane.add(gridPanel, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
/* ******* 以下メニュー用 ********* */
public LayoutTest2() {
setTitle("Layout Test 2");
JButton btn1 = new JButton("flow");
btn1.addActionListener(new MyActionListener("flow"));
JButton btn2 = new JButton("gridbag");
btn2.addActionListener(new MyActionListener("gridbag"));
JButton btn3 = new JButton("grid");
btn3.addActionListener(new MyActionListener("grid"));
JPanel pane = new JPanel();
pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
pane.add(btn1);
pane.add(btn2);
pane.add(btn3);
getContentPane().add(pane);
pack();
}
class MyActionListener implements ActionListener {
private String type = null;
public MyActionListener(String type) {
this.type = type;
}
public void actionPerformed(ActionEvent e) {
if ("flow".equals(this.type)) {
testFlowLayout();
}
if ("gridbag".equals(this.type)) {
testGridBagLayout();
}
if ("grid".equals(this.type)) {
testGridLayout();
}
}
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
// UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
} catch (Exception e) {
e.printStackTrace();
}
SwingUtilities.invokeLater(
new Runnable() {
public void run() {
LayoutTest2 lt = new LayoutTest2();
lt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
lt.setVisible(true);
}
}
);
}
}