トップ 差分 一覧 ping ソース 検索 ヘルプ PDF RSS ログイン

Swing レイアウト 1



目次



記事一覧

キーワード

レイアウト 1

[Swing]

  • BorderLayout
  • BoxLayout
  • CardLayout

BorderLayout

BoxLayout

CardLayout

1枚目
2枚目

ソースコード


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);
        }
      }
    );
  }
}



YAGI Hiroto (piroto@a-net.email.ne.jp)
twitter http://twitter.com/pppiroto

Copyright© 矢木 浩人 All Rights Reserved.