以下は、画面に星を追加する簡単なグラフィック プログラムです。
import acm.graphics.*;
import acm.program.*;
import java.awt.event.*;
import javax.swing.*;
/**
* This program creates a five-pointed star every time the
* user clicks the mouse on the canvas.
*/
public class DrawStarMap1 extends GraphicsProgram {
public void init() {
/* Initializes the mouse listeners */
addMouseListeners();
/* The check box starts out in the "on" position */
fillCheckBox = new JCheckBox("Filled");
fillCheckBox.setSelected(true);
add(fillCheckBox, SOUTH);
/* Clears the screen with a button */
add(new JButton("Clear"), SOUTH);
addActionListeners();
}
/* Called whenever the user clicks the mouse.*/
public void mouseClicked(MouseEvent e) {
GStar star = new GStar(STAR_SIZE);
star.setFilled(fillCheckBox.isSelected());
add (star, e.getX(), e.getY());
}
/* Removes all the graphical objects from the canvas */
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("Clear")) removeAll();
}
/* Private constants */
private static final double STAR_SIZE = 20;
private JCheckBox fillCheckBox;
}
そしてGStarクラス:
import acm.graphics.*;
/** Defines a new GObject class t:hat appears as a five-pointed star.
*/
public class GStar extends GPolygon {
/** Creates a new GStar centered at the origin with the specified
* horizontal width.
* @param width The width of the star
*/
public GStar(double width) {
double dx = width / 2;
double dy = dx * GMath.tanDegrees(18);
double edge = width / 2 - dy * GMath.tanDegrees(36);
addVertex(-dx, -dy);
int angle = 0;
for (int i = 0; i < 5; i++) {
addPolarEdge(edge, angle);
addPolarEdge(edge, angle + 72);
angle -= 72;
}
}
}
プログラムは問題なく動作し、ユーザーがキャンバス上でマウスをクリックするたびに、GStar クラス コンストラクターを使用してスターを作成します。ただし、「JCheckBox と JButton は視覚的に変化しない!」という問題があります。「Clear」JButton を押すと、キャンバスは空になりますが、ボタンがトグルしないようです。同様に、プログラムは塗りつぶされた星と空の星の両方を描画しますが、「塗りつぶされた」JCheckBox は常に選択されたままになり、変化しません。この問題は、私が他のプログラムで使用している JSlider ではさらに大きくなります。スライダーは、何らかの意味で機能している場合でも、常に初期位置にとどまります。値が変化します。私は 2011 年バージョンの Eclipse と最新の JRE ライブラリ (v.7u6 http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1637588.html)。インターネットで十分な情報が見つかりませんでした。何が問題ですか?ご協力ありがとうございました!!acm パッケージはhttp://jtf.acm.org/acm.jarからダウンロードできます。