矩形/椭圆程序

时间:2012-02-23 03:00:57

标签: java swing graphics graphics2d

我遇到了使用矩形和椭圆的程序时遇到问题。

有4个按钮可供选择,Rectangle / Ellipse / Edge / Label,Label带有文本字段 您可以选择要绘制的矩形/椭圆,然后单击框架中的某个位置,它将在那里绘制它。通过拖动鼠标完成边缘。

我不明白的是如何做矩形和椭圆,以及给出的样本抽象类是“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 :(得分:0)

根据我对你的问题的理解,似乎你不确定如何创建一个有两个子类的类,这些子类可以做一些看似本来就是"固有的"不同。如果您转到Java文档并查看Graphics课程,请参阅drawOvaldrawRectanglefillOval和{{ 1}}方法,您将看到方法名称中的椭圆实际上创建了适合给定矩形大小的省略号。我认为这足以让你开始研究你的程序了。