Программа прямоугольника / эллипса - PullRequest
0 голосов
/ 23 февраля 2012

У меня проблемы с этой программой, которая работает с прямоугольниками и эллипсами.

Можно выбрать 4 кнопки: прямоугольник / эллипс / край / метка, а метка имеет текстовое поле Вы выбираете Rectangle / Ellipse для рисования и щелкаете где-нибудь в кадре, и он будет рисовать там. Край делается перетаскиванием мыши.

Чего я не понимаю, так это как делать и прямоугольники, и эллипсы, и пример абстрактного класса, заданного как суперкласс для «RectangleNode» и т. Д. Вот код для абстрактного класса GraphElement:

import java.awt.Graphics2D;

abstract public class GraphElement
{
    private double xPos;
     private double yPos;
     protected String label;

     public GraphElement()
     {
        xPos = 0;
        yPos = 0;
     }

     public GraphElement(double x, double y)
     {
        xPos = x;
        yPos = y;
     }

     public final double getXPos()
     {
        return xPos;
     }

     public final double getYPos()
     {
        return yPos;
     }

     public void moveTo (double xLoc, double yLoc)
     {
        xPos = xLoc;
        yPos = yLoc;
     }

     public String toString()
     {
        String str = "(X,Y) Position: (" + xPos + "," + yPos + ")\n";
        return str;
     }

     abstract void    draw(Graphics2D g2);  
     abstract boolean isSelected(double x, double y);

    boolean applyLabel()
    {
        return true;
    }

public String getLabel()
{
  return label;
}

public void setLabel(String label)
{
  this.label = label;
}
} 

Любая помощь будет признательна, так как я полностью потерян.

GraphDrawViewer:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.BorderLayout;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class GraphDrawViewer 
{
    public static void main(String[] args)
    {
        JFrame frame = new JFrame();
        final int FRAME_WIDTH = 1000;
        final int FRAME_HEIGHT = 1000;
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
        frame.setTitle("Graph Draw");
        frame.setLayout(new BorderLayout());

        //Panel
        JPanel panel = new JPanel();
        frame.add(panel, BorderLayout.NORTH);

        //Buttons
        JButton rectangleButton = new JButton("Rectangle");
        JButton ellipseButton = new JButton("Ellipse");
        JButton edgeButton = new JButton("Edge");
        JButton labelButton = new JButton("Label");

        //Text Field
        final int FIELD_WIDTH = 10;
        final JTextField labelField = new JTextField(FIELD_WIDTH);

        //Add all buttons
        panel.add(rectangleButton);
        panel.add(ellipseButton);
        panel.add(edgeButton);
        panel.add(labelButton);
        panel.add(labelField);

        frame.setVisible(true);
    }
}    

1 Ответ

0 голосов
/ 25 февраля 2012

Из того, что я понимаю по вашему вопросу, кажется, что вы не знаете, как создать класс, который имеет два подкласса, которые делают вещи, которые кажутся "изначально" разными.Если вы перейдете к документам Java и посмотрите на класс Graphics, в частности методы drawOval, drawRectangle, fillOval и fillRectangle, вы увидите, что овалимя метода фактически создает многоточие, которое вписывается в данный размер прямоугольника .Я думаю, что этого достаточно для того, чтобы вы начали работать над своей программой.

...