尝试制作一个改变圆圈颜色的ComboBox可以移动

时间:2013-11-29 16:09:18

标签: java swing colors jcombobox paintcomponent

这是我的代码:

package driehoek;

import javax.swing.*;
import java.awt.*;

public class Driehoek extends JFrame 
{
    public static void main(String[] args)
    {
        JFrame frame = new Driehoek();
        frame.setSize(400,400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
        JPanel pnlTekenen = new GroeiendeCirkels();
        frame.setContentPane(pnlTekenen);
        frame.setTitle("Tekenen");
        frame.setVisible(true);
    }
}

我不知道我必须在组合框的ItemListener下面放置什么以及如何在组合框中更改名称 GroeiendeCirkels的代码:

 package driehoek;

 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.*;

  class GroeiendeCirkels extends JPanel
  {
  private JButton knop1, knop2, knop3, knop4, knop5, knop6, knop7;
  private int diameter, breedte, hoogte;
  private JComboBox cmbSelect;
  private Color colors[] = {Color.RED, Color.BLUE, Color.GREEN, Color.YELLOW, Color.PINK, Color.ORANGE};
    public GroeiendeCirkels()
    {
    setBackground(Color.WHITE);
    diameter = 100;
    breedte = 150;
    hoogte = 150;

    cmbSelect = new JComboBox(colors);
    cmbSelect.setSelectedIndex(0);
    cmbSelect.addItemListener(new KnopHandler7());

    knop1 = new JButton ("Bigger");
    knop1.addActionListener(new KnopHandler1());

    knop2 = new JButton ("Smaller");
    knop2.addActionListener(new KnopHandler2());

    knop3 = new JButton ("MoveRight");
    knop3.addActionListener(new KnopHandler3());

    knop4 = new JButton ("MoveLeft");
    knop4.addActionListener(new KnopHandler4());

    knop5 = new JButton ("MoveDown");
    knop5.addActionListener(new KnopHandler5());

    knop6 = new JButton ("MoveUp");
    knop6.addActionListener(new KnopHandler6());

    add (knop1);
    add (knop2);
    add (knop3);
    add (knop4);
    add (knop5);
    add (knop6);
    add (cmbSelect);
    }
    public void paintComponent(Graphics g)
    {
    super.paintComponent(g);
    g.setColor(colors[0]);
    g.fillOval(breedte, hoogte, diameter, diameter);

    if (cmbSelect.getSelectedIndex()==0)
        {
            g.setColor(colors[0]);
        }
        else if (cmbSelect.getSelectedIndex()==1)
        {
            g.setColor(colors[1]);
        }
        else if (cmbSelect.getSelectedIndex()==2)
        {
            g.setColor(colors[2]);
        }
        else if (cmbSelect.getSelectedIndex()==3)
        {
            g.setColor(colors[3]);
        }
        else if (cmbSelect.getSelectedIndex()==4)
        {
            g.setColor(colors[4]);
        }
        else if (cmbSelect.getSelectedIndex()==5)
        {
            g.setColor(colors[5]);
        }

    }
    class KnopHandler1 implements ActionListener 
    {
    public void actionPerformed(ActionEvent e )
    {
        diameter++;
        repaint();
    }
    }
    class KnopHandler2 implements ActionListener 
    {
    public void actionPerformed(ActionEvent e )
    {
        diameter--;
        repaint();
    }
    }
    class KnopHandler3 implements ActionListener 
    {
    public void actionPerformed(ActionEvent e )
    {
        breedte++;
        repaint();
    }
    }
    class KnopHandler4 implements ActionListener 
    {
    public void actionPerformed(ActionEvent e )
    {
        breedte--;
        repaint();
    }
    }
    class KnopHandler5 implements ActionListener 
    {
    public void actionPerformed(ActionEvent e )
    {
        hoogte++;
        repaint();
    }
    }
    class KnopHandler6 implements ActionListener 
    {
    public void actionPerformed(ActionEvent e )
    {
        hoogte--;
        repaint();
    }
    }
   class KnopHandler7 implements ItemListener 
     {
        public void itemStateChanged(ItemEvent i)    
        {

            repaint();
        }
    }
}

请问有人能帮帮我吗? 它说我需要一个参数但是给了一个颜色。 我知道我这样做了,但我没有看到另一种方式。 我是程序员的初学者,所以如果你能很好地解释我会学到一些东西

1 个答案:

答案 0 :(得分:3)

GroeiendeCirkels类的构造函数是:

public GroeiendeCirkels()

因此您不需要任何参数,但用于创建类的代码是:

red = new GroeiendeCirkels(Color.RED);

并指定Color参数。出了点问题。之一:

  1. 您需要添加Color作为构造函数的参数,或
  2. 您需要在创建课程时删除Color.RED。
  3. 另外,我甚至不明白你为什么要创建6个不同的面板。逻辑对我没有意义。我认为你只需要一个面板,然后组合框包含你圈子的不同颜色。