目次へ

解答例 - 実習課題1 - 17.選択コンポーネント

(実習課題1)

以下のプログラムを作成しなさい。

  • ウィンドウは背景付きの円が描かれている。
  • 「色の変更」メニューを選択すると「JColorChooser」が表示され、選択色に応じてウィンドウの円の背景色が変わるようにする事。
  • 「JColorChooser」で選択色を選んでいる最中も、その色に応じて円の背景色が変わるようにする事。

解答例

/**
 * ChangeColorCircle.java
 * TECHSCORE Javaユーザインタフェース17章 実習課題1
 *
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */

package com.techscore.ui.chapter17.exercise1;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JColorChooser;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.colorchooser.ColorSelectionModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class ChangeColorCircle extends JFrame implements ActionListener {

    private JMenuItem changeColorMenu;
    private ShowCirclePanel panel;

    private ColorChooserDialog dialog;

    public ChangeColorCircle() {
        super("ChangeColorCircle");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        //メニュー
        JMenuBar bar = new JMenuBar();
        setJMenuBar(bar);
        changeColorMenu = new JMenuItem("色の変更");
        bar.add(changeColorMenu);
        changeColorMenu.addActionListener(this);

        //パネル
        panel = new ShowCirclePanel();
        panel.setPreferredSize(new Dimension(300, 200));

        getContentPane().add(panel);

        pack();

        dialog = new ColorChooserDialog(this, panel);
        dialog.setVisible(false);

    }

    public void actionPerformed(ActionEvent event) {
        dialog.setVisible(true);
    }

    private class ShowCirclePanel extends JPanel implements ChangeListener {
        public void paint(Graphics g) {
            int width = (int) (getSize().getWidth());
            int height = (int) (getSize().getHeight());

            g.setColor(getBackground());
            g.fillRect(0, 0, width, height);

            g.setColor(Color.BLUE);
            if (width < height) {
                g.fillOval(0, (height - width) / 2, width, width);
            } else {
                g.fillOval((width - height) / 2, 0, height, height);
            }
        }

        public void stateChanged(ChangeEvent event) {
            setBackground(
                ((ColorSelectionModel) event.getSource()).getSelectedColor());
            repaint();
        }
    }

    private class ColorChooserDialog extends JDialog {
        public ColorChooserDialog(JFrame owner, ChangeListener listener) {
            super(owner);

            JColorChooser chooser = new JColorChooser();
            getContentPane().add(chooser);
            chooser.getSelectionModel().addChangeListener(listener);
            pack();
        }
    }

    public static void main(String[] args) {
        new ChangeColorCircle().setVisible(true);
    }

}

 

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp
  • シナジーマーケティング研究開発グループブログ