0

我将做一个简单的程序,有 4 个问题,每个问题有两个选择。

我想在 JFrame 的一侧添加四个圆圈,如果用户通过单击正确的选项回答正确,第一个圆圈将是绿色,然后如果他/她在第二个问题上回答错误,第二个圆圈将是黄色,依此类推.

如何在 JLabel 中添加这些圆圈???

4

1 回答 1

2

嗯...我确实建议在问此类问题之前开始学习 Swing 和 Graphics2D :)

无论如何,作为一个开始提示,我可以建议一点......

要绘制JLabel或其他摆动组件,您可以使用paintComponent(Graphics g)方法。请在开始之前仔细阅读文档和教程;

这是一个简短的示例,展示了如何利用 JPanel,因此您可以将其作为您第一步的基础

编辑 :

好的,所以你有类似的代码

 import java.awt.Color; 
    import java.awt.Graphics; 
    import javax.swing.JPanel; 

    public class ShapePanel extends JPanel 
    { 

    public void paintComponent (Graphics g)
    { 
    super.paintComponent(g); 
    g.setColor(Color.green); 
    g.drawOval(0,0, 20, 20); 
    g.setColor(Color.yelow); 
    g.fillOval(0, 0, 15, 15); 
} 

    } 

...并且您想从另一个对象中更改颜色。对于此任务,您可以创建某种可观察对象,如下所示

>未测试

   /**
     * @author user592704
     */

    class ShapePanel extends JPanel
    {

    private Color[] colors;
    private Vector<MyCircleColorActionListener> myCircleColorActionListeners=new Vector<MyCircleColorActionListener>();

    public static final int OVAL_COLOR=0;
    public static final int FILL_OVAL_COLOR=1;


        @Override
    public void paintComponent (Graphics g)
    {
        this.myPaint(g);
    }

        private void myPaint(Graphics g)
        {
            super.paintComponent(g);
            g.setColor(this.getColor()[ShapePanel.OVAL_COLOR]);
            g.drawOval(0,0, 20, 20);
            g.setColor(this.getColor()[ShapePanel.FILL_OVAL_COLOR]);
            g.fillOval(0, 0, 15, 15);
        }

        private Color[] getColor() {
            return colors;
        }

        private void setColor(Color[] colors) {
            this.colors = colors;
            this.repaint();
            this.invokeObserver();
        }

        private void invokeObserver()
        {
            for(MyCircleColorActionListener myCircleColorActionListener:this.myCircleColorActionListeners)
            {
               myCircleColorActionListener.onColorChanged();
            }
        }
        public void addMyCircleColorActionListener(MyCircleColorActionListener myCircleColorActionListener){this.myCircleColorActionListeners.add(myCircleColorActionListener);}



        private JPanel getPanel(){return this;}
    }

    public interface MyCircleColorActionListener
    {
      void onColorChanged();
    }

    /**
     * Some another object
     */
    class MyAnotherClass extends JPanel implements MyCircleColorActionListener
    {
        private ShapePanel shapePanel=new ShapePanel();
        private JButton testButton=new JButton("set red");

        MyAnotherClass()
        {
            this.setLayout(new FlowLayout());

            testButton.addMouseListener(new MouseAdapter(){

                @Override
                public void mouseClicked(MouseEvent e) {

                    Color [] colors=new Color[2];
                    colors[ShapePanel.OVAL_COLOR]=Color.green;
                    colors[ShapePanel.FILL_OVAL_COLOR]=Color.red;
                    getShapePanel().setColor(colors);
                }
            });

            this.add(testButton);
            this.shapePanel.addMyCircleColorActionListener(this);
        }

        private ShapePanel getShapePanel(){return this.shapePanel;}

        public void onColorChanged() {
            System.out.println("Color was changed");
        }

    }

我还没有测试过它,虽然我想这个概念必须很清楚。

但在您尝试将其集成到您的代码之前,我建议您仔细阅读如何在 Swing 组件中使用动作侦听器以及如何使用像观察者这样的模式......

如果您有其他问题,请发表评论


报告是否有帮助

于 2012-12-29T03:34:40.507 回答