解答例 - 実習課題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); } }