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