Java 带JSlider的JPanel不显示图形

Java 带JSlider的JPanel不显示图形,java,swing,jpanel,jslider,Java,Swing,Jpanel,Jslider,我只有一个白色背景的JPanel和底部的JSlider,没有显示正方形,我想我在JPanel类上犯了一些错误,但我无法理解。就在我用g.Fillova做另一个项目并且它正常工作之前,我检查了它,每一行代码看起来都是一样的,我真的很困惑 public class Main00 { public static void main(String[] args) { Gui asd=new Gui(); asd.setVisible(true);

我只有一个白色背景的JPanel和底部的JSlider,没有显示正方形,我想我在JPanel类上犯了一些错误,但我无法理解。就在我用g.Fillova做另一个项目并且它正常工作之前,我检查了它,每一行代码看起来都是一样的,我真的很困惑

public class Main00 {

    public static void main(String[] args) {
        Gui asd=new Gui();
        asd.setVisible(true);
        asd.setSize(500,400);
    }
}  


您正在覆盖的是
paintComponents
,而不是正确的
paintComponent
。这两种方法的效果截然不同,第二种方法的效果就是您想要的效果

从API:

  • :绘制此容器中的每个组件
  • :如果UI委托为非null,则调用UI委托的绘制方法。我们向委托传递图形对象的副本,以保护绘制代码的其余部分不受不可撤销更改的影响

同样,您感兴趣的是通过其委托绘制组件本身,而不是绘制此组件所持有的组件。

您覆盖的是
paintComponents
,而不是正确的
paintComponent
。这两种方法的效果截然不同,第二种方法的效果就是您想要的效果

从API:

  • :绘制此容器中的每个组件
  • :如果UI委托为非null,则调用UI委托的绘制方法。我们向委托传递图形对象的副本,以保护绘制代码的其余部分不受不可撤销更改的影响

同样,您感兴趣的是通过其委托绘制组件本身,而不是绘制此组件所持有的组件。

您覆盖的是
paintComponents
,而不是正确的
paintComponent
。这两种方法的效果截然不同,第二种方法的效果就是您想要的效果

从API:

  • :绘制此容器中的每个组件
  • :如果UI委托为非null,则调用UI委托的绘制方法。我们向委托传递图形对象的副本,以保护绘制代码的其余部分不受不可撤销更改的影响

同样,您感兴趣的是通过其委托绘制组件本身,而不是绘制此组件所持有的组件。

您覆盖的是
paintComponents
,而不是正确的
paintComponent
。这两种方法的效果截然不同,第二种方法的效果就是您想要的效果

从API:

  • :绘制此容器中的每个组件
  • :如果UI委托为非null,则调用UI委托的绘制方法。我们向委托传递图形对象的副本,以保护绘制代码的其余部分不受不可撤销更改的影响
同样,您感兴趣的是通过其委托绘制组件本身,而不是绘制此组件所持有的组件。

尝试添加
asd.pack()以上<代码>asd.setVisible(真)
返回GetPreferedSize()这个编译?请不要发布任何类型的代码或草率的代码。你想要一个准确无误的答案,所以请发布真实的代码。另外,您是否真的覆盖了
paintComponents
,而不是
paintComponent
?如果是这样,您确实不想这样做。请尝试添加
asd.pack()以上<代码>asd.setVisible(真)
返回GetPreferedSize()这个编译?请不要发布任何类型的代码或草率的代码。你想要一个准确无误的答案,所以请发布真实的代码。另外,您是否真的覆盖了
paintComponents
,而不是
paintComponent
?如果是这样,您确实不想这样做。请尝试添加
asd.pack()以上<代码>asd.setVisible(真)
返回GetPreferedSize()这个编译?请不要发布任何类型的代码或草率的代码。你想要一个准确无误的答案,所以请发布真实的代码。另外,您是否真的覆盖了
paintComponents
,而不是
paintComponent
?如果是这样,您确实不想这样做。请尝试添加
asd.pack()以上<代码>asd.setVisible(真)
返回GetPreferedSize()这个编译?请不要发布任何类型的代码或草率的代码。你想要一个准确无误的答案,所以请发布真实的代码。另外,您是否真的覆盖了
paintComponents
,而不是
paintComponent
?如果是这样,你真的不想这么做。
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;

public class Gui extends JFrame {

    private JSlider slider;
    private DrawSquare square;

    public Gui() {
        super("square modificator");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        square = new DrawSquare();
        square.setBackground(Color.WHITE);
        slider = new JSlider(SwingConstants.HORIZONTAL, 0, 300,
                    square.getSide());
        slider.setMajorTickSpacing(20);
        slider.setPaintTicks(true);
        add(square);
        add(slider, BorderLayout.SOUTH);
        slider.addChangeListener(new ChangeListener() {

            @Override
            public void stateChanged(ChangeEvent e) {
                square.setSide(slider.getValue());
            }
        });
    }
}
import java.awt.*;
import javax.swing.*;

public class DrawSquare extends JPanel {

    private int side = 10;

    public void paintComponents(Graphics g) {
        super.paintComponents(g);
        g.setColor(Color.RED);
        g.fillRect(20, 20, side, side);
    }

    public void setSide(int side) {
        this.side=(side>=0)?side:0;
        repaint();
    }

    public Dimension getPrefferedSize(){
        return new Dimension(200,200);
    }

    public Dimension getMinimumSize(){
        return getPrefferedSize();
    }

    public int getSide(){
        return side;
    }
}