プロ2 > 資料 > 第10章

第10回:実用的なGUIプログラム

目標

10.1 レイアウトマネージャ

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SampleA1 extends JFrame { Color col = Color.RED; int xpos = 100, ypos = 100, rad = 15; public SampleA1() { JButton b1 = new JButton("Blue"); JButton b2 = new JButton("Green"); JPanel p1 = new JPanel(); p1.add(b1);//Blueのボタンをパネルp1に配置する p1.add(b2);//Greenのボタンをパネルp1に配置する JPanel p2 = new JPanel() { public void paintComponent(Graphics g) { setOpaque(false); g.setColor(col); g.fillOval(xpos - rad, ypos - rad, rad * 2, rad * 2); } }; add(p1, BorderLayout.SOUTH);//パネルp1をBorderLayoutの下に配置する. add(p2); b1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { col = Color.BLUE; repaint(); } }); b2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { col = Color.GREEN; repaint(); } }); p2.addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent evt) { xpos = evt.getX(); ypos = evt.getY(); repaint(); } }); } public static void main(String args[]) { JFrame app = new SampleA1(); app.setDefaultCloseOperation(EXIT_ON_CLOSE); app.setPreferredSize(new Dimension(400, 300)); app.pack(); app.setVisible(true); } }

10.2 メニューとタブ

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SampleA2 extends JFrame { int xpos = 100, ypos = 100, rad = 15; public SampleA2() { JMenuBar mbar = new JMenuBar();//メニューバーを生成する setJMenuBar(mbar);//メニューバーを配置する JMenu m1 = new JMenu("File");//メニューを生成する mbar.add(m1);//メニューをメニューバーに配置する JMenuItem i1 = new JMenuItem("Quit");//メニュー項目を生成する m1.add(i1);//メニューにメニュー項目を配置する /* メニュー項目にリスナーを配置する */ i1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { System.exit(0); } }); JTabbedPane tabs = new JTabbedPane();//タブペインを生成する add(tabs);//タブペインを配置する tabs.add("Red circle", new MyPanel());//タブとしてMyPanelを配置する tabs.add("Blue circle", new JPanel() {//タブとしてJPanelを配置する public void paintComponent(Graphics g) { setOpaque(false); g.setColor(Color.BLUE); g.fillOval(xpos - rad, ypos - rad, rad * 2, rad * 2); } }); } class MyPanel extends JPanel { public MyPanel() { addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent evt) { requestFocus(); //パネルにフォーカスを当てる. xpos = evt.getX(); ypos = evt.getY(); repaint(); } }); addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent evt) { if (evt.getKeyChar() == '>') { rad += 5; } if (evt.getKeyChar() == '<' && rad > 5) { rad -= 5; } repaint(); } }); } public void paintComponent(Graphics g) { setOpaque(false); g.setColor(Color.RED); g.fillOval(xpos - rad, ypos - rad, rad * 2, rad * 2); } } public static void main(String args[]) { JFrame app = new SampleA2(); app.setDefaultCloseOperation(EXIT_ON_CLOSE); app.setPreferredSize(new Dimension(400, 300)); app.pack();//フレーム内部の部品からフレームのサイズを決める app.setVisible(true); } }


ykitamura@kwansei.ac.jp