如何在屏幕上打印正方形?

时间:2019-05-24 13:48:39

标签: java swing

我是Java图形的新手,我试图绘制一个矩形,该矩形填充有3个滑块设置的颜色,问题是正方形没有打印在屏幕上。谁能帮我吗?

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

/*
 * Program description: Write a Java application which includes 3 sliders which enables 
 *                      the user to set the color 
 *                      of a 100x100 square. The square will be drawn using a 
 *                      specific component (Canvas, etc.).
 * Author: Hornai Vlad
 * Date: 24.05.2019
 */

public class Square extends JPanel implements ChangeListener
{
     JPanel panel;
     JSlider r,g,b;
     JLabel rl,gl,bl;
     int red,green,blue;

    Square()
    {
        //set the layout
        setLayout(new FlowLayout());
        //the panel
        panel = new JPanel();
        //bounds of the panel
        panel.setBounds(20,40,300,300);
        rl = new JLabel("r");
        rl.setBounds(10, 50, 15, 15);
        //the first slider
        r = new JSlider(0,255,0);
        r.setPaintTrack(true); 
        r.setPaintTicks(true); 
        r.setPaintLabels(true); 
        r.setMajorTickSpacing(50); //spacing
        r.setMinorTickSpacing(5); 
        r.addChangeListener(this);
        //the second slider
        g = new JSlider(0,255,0);
        gl = new JLabel("g");
        gl.setBounds(10, 90, 15, 15);
        g.setPaintTrack(true); 
        g.setPaintTicks(true); 
        g.setPaintLabels(true); 
        g.setMajorTickSpacing(50); //spacing
        g.setMinorTickSpacing(5); 
        g.addChangeListener(this);
        //the third slider
        b = new JSlider(0,255,0);
        bl = new JLabel("b");
        bl.setBounds(10, 140, 15, 15);
        b.setPaintTrack(true); 
        b.setPaintTicks(true); 
        b.setPaintLabels(true);
        b.addChangeListener(this);
        b.setMajorTickSpacing(50); //spacing
        b.setMinorTickSpacing(5); 
        //add the componens to the panel    
        panel.add(r); //color red
        panel.add(g); //color green
        panel.add(b);//color blue
         //add the labels
        add(rl);
        add(gl);
        add(bl);
        add(panel);          
    }

    @Override
    public void stateChanged(ChangeEvent e) 
    {
        //action for sliders
        red = r.getValue();
        green = g.getValue();
        blue = b.getValue();    
         repaint();

    }
    //the paintcomponent method
     @Override
     public void paintComponent(Graphics g) 
     {//print the component
         super.paintComponent(g);
         //set the color of the rectangle
         g.setColor(new Color(red, green, blue));
        //fill the rectangle
         g.fillRect(50, 50, 100, 100);
     }
    //the main function
    public static void main(String[] args)
    {   //frame
         JFrame frame = new JFrame("Change Rectangle Color");
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

         //Create rect object
         Square square = new Square();
       //i make a square object so the frame knows how to add the rect component
         frame.add(square); //add square
         frame.setSize(1150, 500); //size of the frame
         frame.setVisible(true);//make it visible    
    }

}

我尝试了几种选择,这对我来说是合乎逻辑的,我不知道显示正方形的原因。首先,我认为面板不够大,所以我将其扩大了,但是结果是一样的。

1 个答案:

答案 0 :(得分:0)

只需复制和粘贴代码,这就是我在系统上看到的内容。您确定没有修复代码吗?

enter image description here