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

标签 java swing

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

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    
    }

}

我尝试了几个选项,这个对我来说有逻辑,我不知道显示正方形的原因是什么。首先我认为面板不够大,所以我把它做得更大,但结果是一样的。

最佳答案

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

enter image description here

关于java - 如何在屏幕上打印正方形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56294013/

相关文章:

java - 使用 JProgressBar 以百分比显示线程的进度

java - 为什么 tomcat 服务器在 eclipse 中无法正常启动?

java - 在 Android 上如何在后台获取 GPS 数据?

java - 将 ArrayList 转换为 DefaultListModel

java - 如何调用包含 Graphics g 的函数

java - org.apache.commons.logging.LogConfigurationException : Invalid class loader hierarchy

java - JAVA程序一次只有1个线程

JavaFX 平台似乎已死(关闭/崩溃)

java - 激活 ActionPerformed 时出错

java - 如何在没有初始化的情况下将图像转换为 BufferedImage?