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

Swing レイアウト 1の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!レイアウト 1
[Swing]
*BorderLayout
*BoxLayout
*CardLayout

!BorderLayout
{{ref_image border.jpg}}
!BoxLayout
{{ref_image box.jpg}}
!CardLayout
::1枚目
{{ref_image card01.jpg}}
::2枚目
{{ref_image card02.jpg}}

!ソースコード

 import java.awt.BorderLayout;
 import java.awt.CardLayout;
 import java.awt.Component;
 import java.awt.Container;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
 import java.util.Dictionary;
 import java.util.Hashtable;
 
 import javax.swing.BoxLayout;
 import javax.swing.JButton;
 import javax.swing.JComboBox;
 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 LayoutTest extends JFrame {
   /**
    * BorderLayout test
    * @see http://java.sun.com/docs/books/tutorial/uiswing/layout/border.html
    */
   public void testBorderLayout() {
     JFrame frame = new JFrame("BorderLayout Test");
     
     Container pane = frame.getContentPane();
     pane.setLayout(new BorderLayout());
     
     pane.add(new JButton("NORTH"), BorderLayout.NORTH);
     pane.add(new JButton("WEST"), BorderLayout.WEST);
     pane.add(new JButton("CENTER"), BorderLayout.CENTER);
     pane.add(new JButton("EAST"), BorderLayout.EAST);
     pane.add(new JButton("SOUTH"), BorderLayout.SOUTH);
     
     frame.pack();
     frame.setVisible(true);
   }
   /**
    * BoxLayout test
    * @see http://java.sun.com/docs/books/tutorial/uiswing/layout/box.html
    */
   public void testBoxLayout() {
     JFrame frame = new JFrame("BoxLayout Test");
     
     Container pane = frame.getContentPane();
     pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
     
     JButton btn1 = new JButton("button1");
     btn1.setAlignmentX(Component.CENTER_ALIGNMENT); // 0.5f
     JButton btn2 = new JButton("button2");
     btn2.setAlignmentX(Component.CENTER_ALIGNMENT); // 0.5f
     JButton btn3 = new JButton("button3");
     btn3.setAlignmentX(Component.CENTER_ALIGNMENT); // 0.5f
     
     pane.add(btn1);
     pane.add(btn2);
     pane.add(btn3);
     
     JPanel ctrlPanel = new JPanel();
     Dictionary<Integer, JLabel> dic = new Hashtable<Integer, JLabel>();
     dic.put(0,  new JLabel("0.0f"));
     dic.put(5,  new JLabel("0.5f"));
     dic.put(10, new JLabel("1.0f"));
     
     ctrlPanel.setLayout(new BoxLayout(ctrlPanel, BoxLayout.Y_AXIS));
     JSlider sld1 = new JSlider(0, 10);
     sld1.addChangeListener(new SliderChangeLisner(btn1));
     JSlider sld2 = new JSlider(0, 10);
     sld2.addChangeListener(new SliderChangeLisner(btn2));
     JSlider sld3 = new JSlider(0, 10);
     sld3.addChangeListener(new SliderChangeLisner(btn3));
     
     sld3.setLabelTable(dic);
     sld3.setPaintLabels(true);
     
     ctrlPanel.add(sld1);
     ctrlPanel.add(sld2);
     ctrlPanel.add(sld3);
             
     pane.add(ctrlPanel);
     
     frame.pack();
     frame.setVisible(true);
   }
   class SliderChangeLisner implements ChangeListener {
     JButton btn = null;
     SliderChangeLisner(JButton btn) {
       this.btn = btn;
     }
     public void stateChanged(ChangeEvent e) {
       float val = (float)((JSlider)e.getSource()).getValue();
       this.btn.setAlignmentX(val / 10.0f);
       this.btn.revalidate(); // 遅延自動レイアウト
     }
   }
   /**
    * CardLayout test
    * @see http://java.sun.com/docs/books/tutorial/uiswing/layout/card.html
    */
   public void testCardLayout() {
       JFrame frame = new JFrame("CardLayout Test");
     Container pane = frame.getContentPane();
 
     final String BUTTON_CARD = "buttons";
     final String TEXT_CARD   = "texts";
     
     final JPanel cards = new JPanel(new CardLayout());
     
         JPanel ctrlPane = new JPanel(); 
         String comboBoxItems[] = { BUTTON_CARD, TEXT_CARD };
         JComboBox cb = new JComboBox(comboBoxItems);
         cb.addItemListener(
             new ItemListener() {
           public void itemStateChanged(ItemEvent e) {
             ((CardLayout)cards.getLayout()).show(
                 cards, (String)e.getItem()
             );
             
           }
             }
         );
         
         cb.setEditable(false);
         ctrlPane.add(cb);
         
         JPanel card1 = new JPanel();
         card1.add(new JButton("Button 1"));
         card1.add(new JButton("Button 2"));
         card1.add(new JButton("Button 3"));
         
         JPanel card2 = new JPanel();
         card2.add(new JTextField("TextField", 10));
         card2.add(new JTextField("TextField", 10));
         card2.add(new JTextField("TextField", 10));
         
         cards.add(card1, BUTTON_CARD);
         cards.add(card2, TEXT_CARD);
         
         pane.add(ctrlPane, BorderLayout.NORTH);
         pane.add(cards, BorderLayout.CENTER);
     
     frame.pack();
     frame.setVisible(true);
   }
 
   /* ******* 以下メニュー用 ********* */
   public LayoutTest() {
     setTitle("Layout Test");
   
     JButton btn1 = new JButton("border");
     btn1.addActionListener(new MyActionListener("border"));
     
     JButton btn2 = new JButton("box");
     btn2.addActionListener(new MyActionListener("box"));
     
     JButton btn3 = new JButton("card");
     btn3.addActionListener(new MyActionListener("card"));
     
     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 ("border".equals(this.type)) {
         testBorderLayout();
       }
       if ("box".equals(this.type)) {
         testBoxLayout();
       }
       if ("card".equals(this.type)) {
         testCardLayout();
       }
     }
   }
   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() {
           LayoutTest lt = new LayoutTest();
           lt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           lt.setVisible(true);
         }
       }
     );
   }
 }