Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基本JavaGUI:绘制多个形状,允许用户为每个形状选择新颜色_Java_Eclipse_User Interface_Drawing - Fatal编程技术网

基本JavaGUI:绘制多个形状,允许用户为每个形状选择新颜色

基本JavaGUI:绘制多个形状,允许用户为每个形状选择新颜色,java,eclipse,user-interface,drawing,Java,Eclipse,User Interface,Drawing,我目前正在学习基本的JavaGUI编程。我在一个班上,在这学期的最后两周里,我们正在死记硬背GUI工作,说通过一个项目来学习这个。由于GUI对我来说是新事物,它们被证明是令人生畏的任务。我觉得,如果你能给我指出正确的方向,我就可以自己继续完成这项任务了……我只需要一点点能让我渡过难关的信息 因此,基本上,任务是创建一个窗口,用户可以在其中单击JPanel中的某个位置来绘制椭圆,并根据需要多次重复此过程。在它的最基本的形式,我有这个程序运行良好。但是,教授希望我们添加一些功能: 用户可以单击十个按

我目前正在学习基本的JavaGUI编程。我在一个班上,在这学期的最后两周里,我们正在死记硬背GUI工作,说通过一个项目来学习这个。由于GUI对我来说是新事物,它们被证明是令人生畏的任务。我觉得,如果你能给我指出正确的方向,我就可以自己继续完成这项任务了……我只需要一点点能让我渡过难关的信息

因此,基本上,任务是创建一个窗口,用户可以在其中单击JPanel中的某个位置来绘制椭圆,并根据需要多次重复此过程。在它的最基本的形式,我有这个程序运行良好。但是,教授希望我们添加一些功能:

用户可以单击十个按钮来更改下一个椭圆的颜色。 两个文本字段,用户可以在其中输入他们绘制的下一个椭圆的高度和宽度。 一个文本字段,用户可以在其中为下一个绘制的椭圆输入所需的旋转度。 我现在被困在第一部分,添加了根据他们按下的按钮改变颜色的功能

涉及三个类:MainClient、SpriteField和RoundSprite

在MainClient中,每个按钮都有一个事件处理程序……类似于:

JButton btnRed = new JButton("Red");
btnRed.setBackground(Color.RED);
btnRed.addActionListener(new ActionListener() 
{
    public void actionPerformed(ActionEvent e) 
    {
        colorPick = "red";
    }
});
btnRed.setBounds(5, 228, 117, 29);
frame.getContentPane().add(btnRed);
然后,在RoundSprite中,我有一个名为pickColor的方法,它设置在DrawSprite中绘制椭圆时要使用的颜色类型变量:

public void pickColor(String colorPick)
{
    if (colorPick.equals("black"))
        mColor =  Color.BLACK;
    if (colorPick.equals("white"))
        mColor = Color.WHITE;
    if (colorPick.equals("cyan"))
        mColor = Color.CYAN;
    //etcetera....
}
颜色类型变量mColor随后用于DrawSprite方法,也用于RoundSprite类:

public void DrawSprite(Graphics2D g2)
{
    AffineTransform tOldTransform = g2.getTransform();

    g2.setColor(mColor);      
    g2.translate(mX, mY);

    g2.draw(new Ellipse2D.Double(0, 0, 30, 50));

    g2.setTransform(tOldTransform);
}
但是,当我运行代码时,椭圆的颜色不会改变。我单击绘制的椭圆保持黑色。我不确定程序在哪里丢失了调用DrawSprite时选择的颜色


如有任何意见/协助/建议,将不胜感激。谢谢

创建一个形状,它知道如何自己绘制以及它应该自己绘制什么,将它们放在某种列表中,并在其中循环,然后在您的paintComponent方法中绘制这些。也许我应该说,我正在绘制的背景面板是灰色的。因此,保留黑色的省略号并不意味着它们没有被添加到列表或绘制…它们是。我的问题是我不能切换颜色。这个程序应该可以工作,这样我就可以点击一个按钮来选择十种颜色中的任何一种,然后点击JPanel上的某个地方来画一个我选择的颜色的椭圆。是的,用自定义类中的颜色来包装形状的绘画…你说的包装是什么意思?基本上它描述了一个包装其他类或充当容器的类。在这种情况下,它在单个类中包含要绘制的形状和颜色。但它不是重新发明轮子,而是简单地包装了预先存在的形状和颜色类