コードは次のとおりです。
Main.java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
/**
* Winter Assignment for Java 2012/13
*/
// Class definition
public class Main extends JPanel implements ActionListener {
private JSlider sizeslider;
private int startX, startY, endX, endY, val;
private Color shapeColor = Color.black;
private JComboBox shapeChoice, colorChoice;
private Point firstPoint;
private Circle firstCircle;
private Square firstSquare;
private Doughnut firstDoughnut;
private Triangle firstTriangle;
private Pentagon firstPentagon;
private Point aShape;
static final int SlideMin = 10;
static final int SlideMax = 110;
static final int SlideInit = 50;
// Constructor method declaration
public Main() {
//Create the slider.
sizeslider = new JSlider(JSlider.HORIZONTAL, SlideMin, SlideMax, SlideInit);
add(sizeslider, BorderLayout.NORTH);
shapeChoice = new JComboBox();
shapeChoice.addItem("Point");
shapeChoice.addItem("Square");
shapeChoice.addItem("Circle");
shapeChoice.addItem("Doughnut");
shapeChoice.addItem("Triangle");
shapeChoice.addItem("Pentagon");
add(shapeChoice);
shapeChoice.addActionListener(this);
colorChoice = new JComboBox();
colorChoice.addItem("Black");
colorChoice.addItem("Red");
colorChoice.addItem("Green");
colorChoice.addItem("Blue");
colorChoice.addItem("Yellow");
colorChoice.addItem("Purple");
colorChoice.addItem("Turquoise");
add(colorChoice);
colorChoice.addActionListener(this);
this.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent me) {
repaint();
}
public void mouseDragged(MouseEvent me) {
aShape.moveXY(me.getX(), me.getY());
repaint();
}
});
this.addMouseMotionListener(new MouseAdapter() {
public void mouseReleased(MouseEvent me) {
repaint();
}
public void mouseDragged(MouseEvent me) {
aShape.moveXY(me.getX(), me.getY());
repaint();
}
});
sizeslider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
JSlider source = (JSlider)e.getSource(); // get the slider
if (!source.getValueIsAdjusting()) {
val = source.getValue(); // get slider value
aShape.reSize(val);
repaint();
}
}
});
// Instantiate shape classes
firstPoint = new Point();
firstCircle = new Circle();
firstSquare = new Square();
firstDoughnut = new Doughnut();
firstTriangle = new Triangle();
firstPentagon = new Pentagon();
// Initially assign aShape a Point object
aShape = firstPoint;
// Create a new window using the Swing class JFrame and add this panel
makeFrame();
}
public void actionPerformed(ActionEvent e) {
// Manipulate respective object when buttons pressed
// checkbox assigns object to aShape
if (e.getSource() == shapeChoice) {
if (shapeChoice.getSelectedItem().equals("Circle"))
aShape = firstCircle;
else if (shapeChoice.getSelectedItem().equals("Square"))
aShape = firstSquare;
else if (shapeChoice.getSelectedItem().equals("Point"))
aShape = firstPoint;
else if (shapeChoice.getSelectedItem().equals("Doughnut"))
aShape = firstDoughnut;
else if (shapeChoice.getSelectedItem().equals("Triangle"))
aShape = firstTriangle;
else if (shapeChoice.getSelectedItem().equals("Pentagon"))
aShape = firstPentagon;
}
// Assigns color to shape
else if (e.getSource() == colorChoice) {
if (colorChoice.getSelectedItem().equals("Black")) {
shapeColor = Color.black;
repaint();
}
else if (colorChoice.getSelectedItem().equals("Red")) {
shapeColor = Color.red;
repaint();
}
else if (colorChoice.getSelectedItem().equals("Green")) {
shapeColor = Color.green;
repaint();
}
else if (colorChoice.getSelectedItem().equals("Blue")) {
shapeColor = Color.blue;
repaint();
}
else if (colorChoice.getSelectedItem().equals("Yellow")) {
shapeColor = Color.yellow;
repaint();
}
else if (colorChoice.getSelectedItem().equals("Purple")) {
shapeColor = Color.decode("#9B30FF"); //Assignment said purple, but purple isn't defined in the Java api, so I used the hex code. The closest color in the API is Magenta.
repaint();
}
else if (colorChoice.getSelectedItem().equals("Turquoise")) {
shapeColor = Color.decode("#40E0D0"); //Turquoise hex code
repaint();
}
}
// Ask Java to repaint the window to reflect the updates made
repaint();
}
// Provide this method to instruct Java what to do when repainting the window
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(shapeColor);
// Call the respective methods from respective class to print the new co-ordinate values
aShape.outputXYCoords(g);
// Call the respective methods from respective class to redraw the shape
aShape.display(g);
}
// Create a window frame
public void makeFrame() {
// Instantiate a window frame using Swing class JFrame
JFrame frame = new JFrame("Winter Assignment");
// When the window is closed terminate the application
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
// set initial size of window
frame.setSize(800, 600);
// add the current object to the centre of the frame and make visible
frame.getContentPane().add(this, BorderLayout.CENTER);
frame.setVisible(true);
}
}
三角形.java
形状ファイルの 1 つで、すべて同じ構造を持っています。
三角形.java
import java.awt.*;
public class Triangle extends Point {
protected int size;
private int p1x, p2x, p3x, p1y, p2y, p3y;
//Create a new triangle
public Triangle()
{
super();
size = 50;
yPos = 100;
}
public void reSize(int newSize) {
size = size + newSize;
}
//Draw the triangle with current specifications on screen.
public void display(Graphics g) {
p1x = xPos;
p2x = xPos + size/2;
p3x = xPos + size;
p1y = yPos + size;
p2y = yPos;
p3y = yPos + size;
int[] xPoints = { p1x, p2x, p3x };
int[] yPoints = { p1y, p2y, p3y };
int npoints = 3;
g.fillPolygon(xPoints, yPoints, npoints);
}
}
- 私が望んでいたこと: スライダーは、シェイプのサイズを設定した値に変更します。
- 実際に何が起こるか:
aShape.reSize(val);
スライダーの値の増分によって形状のサイズを大きくします。
解決方法がわかりません。また、そこにはいくつかのジャンク コードがありますが、何が起こるかを参照するために使用しています。