java paint applet - 需要帮助在单选按钮上添加操作

时间:2014-05-03 03:00:38

标签: java applet radio-button

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

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

如果我启动小程序,toolbarwindow成功打开,我可以用黑色绘画,所以我唯一的问题是在工具栏窗口选择一种颜色并用该颜色绘画。

工具栏代码:https://gist.github.com/anonymous/3c053c69112f46d17440

绘制小程序代码:https://gist.github.com/anonymous/aca7929dbcfc08008f30

2 个答案:

答案 0 :(得分:0)

我感觉你的教授希望你自己做。这是我在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);
        }
    }

}

答案 1 :(得分:0)

我在这里给出了3个按钮的方法,你可以添加其余按钮。我们的想法是保留当前选定的颜色字段,并在每次通过ActionListener选择按钮时更新颜色字段。从按钮到它所代表的颜色的map不是必需的,但会使代码更易于管理。

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());
        }
    }
}