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

