トップ 一覧 ping 検索 ヘルプ RSS ログイン

Swing レイアウト 2の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!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);
         }
       }
     );
   }
 }