Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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
java绘画小程序-需要帮助添加单选按钮上的操作吗_Java_Applet_Radio Button - Fatal编程技术网

java绘画小程序-需要帮助添加单选按钮上的操作吗

java绘画小程序-需要帮助添加单选按钮上的操作吗,java,applet,radio-button,Java,Applet,Radio Button,我需要制作一个java小程序,允许用户使用鼠标进行绘制。启动小程序后,将打开第二个窗口,允许用户从6种不同颜色中选择一种进行绘制 首先,我编写代码来构造一个包含getcurrentcolor方法的工具栏窗口。我似乎无法将按下按钮与颜色变化联系起来 如果启动小程序,工具栏窗口将成功打开,并且我可以用黑色绘制,因此我唯一的问题是在工具栏窗口上选择一种颜色并用该颜色绘制 工具栏代码: 绘制小程序代码:我感觉你的教授希望你自己制作。下面是我在10分钟左右的时间里拼凑的一个例子。它非常粗糙,缺乏良好的编码

我需要制作一个java小程序,允许用户使用鼠标进行绘制。启动小程序后,将打开第二个窗口,允许用户从6种不同颜色中选择一种进行绘制

首先,我编写代码来构造一个包含getcurrentcolor方法的工具栏窗口。我似乎无法将按下按钮与颜色变化联系起来

如果启动小程序,工具栏窗口将成功打开,并且我可以用黑色绘制,因此我唯一的问题是在工具栏窗口上选择一种颜色并用该颜色绘制

工具栏代码:


绘制小程序代码:

我感觉你的教授希望你自己制作。下面是我在10分钟左右的时间里拼凑的一个例子。它非常粗糙,缺乏良好的编码风格,但如果您需要了解其中涉及的内容,它应该是有用的。无论何时选择颜色,示例代码都会打印出该颜色

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;


public class MyColorChooser extends Component
{
    private Color[] colors;
    private Color selectedColor;
    public MyColorChooser(Color ... colors)
    {
        this.colors = colors;
        this.selectedColor = colors[0];
        this.addMouseListener
        (
            new MouseAdapter()
            {
                @Override public void mouseClicked(MouseEvent e)
                {
                    int tileWidth = MyColorChooser.this.getWidth();
                    tileWidth /=  MyColorChooser.this.colors.length;
                    int index = e.getX()/(tileWidth);
                    MyColorChooser.this.selectedColor = MyColorChooser.this.colors[index];
                }
            }
        );
    }

    @Override public void paint(Graphics renderer)
    {
        int width = this.getWidth()/this.colors.length;
        int height = this.getHeight();

        for(int i = 0; i < this.colors.length; i++)
        {
            renderer.setColor(this.colors[i]);
            renderer.fillRect(width*i,0,width,height);
        }
    }

    public Color getSelectedColor()
    {
        return this.selectedColor;
    }

    public static void main(String ... args) throws Throwable
    {
        JFrame f = new JFrame();
        f.setSize(200,100);
        f.getContentPane().setLayout(null);
        MyColorChooser chooser = new MyColorChooser
        (
            Color.RED,
            Color.GREEN,
            Color.BLUE,
            Color.YELLOW,
            Color.WHITE,
            Color.BLACK
        );
        f.getContentPane().add(chooser);
        chooser.setBounds(0,0,200,50);
        f.setVisible(true);

        Color lastColor = chooser.getSelectedColor();
        for(;;)
        {
            if(!chooser.getSelectedColor().equals(lastColor))
            {
                lastColor = chooser.getSelectedColor();
                System.out.printf("Selected Color:%s\n",lastColor.toString());
            }
            Thread.sleep(100);
        }
    }

}

我在这里给出了3个按钮的方法,您可以添加其余的按钮。这样做的目的是保留当前选定的颜色字段,并在每次通过ActionListener选择按钮时对其进行更新。从按钮到它所代表的颜色的映射是不必要的,但会使代码更易于管理

public class ToolBarWindow extends JFrame {

    private static Map<JRadioButton, Color> colors = new HashMap<>();
    private static Color currentColor = Color.BLACK;

    public static void main(String[] args) {

        ToolBarWindow frame = new ToolBarWindow();
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("Colors");
        frame.setVisible(true);
    }

    public ToolBarWindow() {

        JPanel jpRadioButtons = new JPanel();
        jpRadioButtons.setLayout(new GridLayout(3, 1));

        // put the other colors
        JRadioButton red = new JRadioButton("red");
        JRadioButton black = new JRadioButton("black");
        JRadioButton magenta = new JRadioButton("magenta");

        red.addActionListener(new MyActionListener());
        black.addActionListener(new MyActionListener());
        magenta.addActionListener(new MyActionListener());

        jpRadioButtons.add(red);
        jpRadioButtons.add(black);
        jpRadioButtons.add(magenta);

        colors.put(red, Color.RED);
        colors.put(black, Color.BLACK);
        colors.put(magenta, Color.MAGENTA);

        add(jpRadioButtons, BorderLayout.WEST);

        ButtonGroup bg = new ButtonGroup();
        bg.add(red);
        bg.add(black);
        bg.add(magenta);
    }

    Color getCurrentColor() {

        return currentColor;
    }

    private class MyActionListener implements ActionListener {

        public void actionPerformed(ActionEvent e) {

            currentColor = colors.get(e.getSource());
        }
    }
}

你试过了吗?我的教授说我们不能使用JColorChoose或其他你不能使用的东西?下面是描述:修改上面的程序以合并颜色。在单独的窗口中,提供RadioButton对象的“toobar”,其中列出以下六种颜色:红色、黑色、洋红色、蓝色、绿色和黄色。工具栏应该作为名为ToolBarWindow的框架的子类实现,并且应该由六个按钮组成,每个按钮都有适当的颜色名称。当选择新颜色时,绘图应以新颜色进行。为什么有动作方法?