簡體   English   中英

使用JSlider的JPanel不會替換圖形

[英]JPanel with JSlider not displaing the Graphics

我所擁有的只是一個帶有白色背景的JPanel,底部是JSlider,沒有顯示正方形,我想我對JPanel類犯了一些錯誤,但是我無法弄清楚。 在我使用g.fillOval進行另一個項目並正常工作之前,我將其簽出,每一行代碼似乎都一樣,我真的很困惑。

public class Main00 {

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

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;
    }
}

您要覆蓋paintComponents而不是正確的paintComponent 這兩種方法的效果截然不同,第二種方法的效果是您想要的。

從API:

  • paintComponents API條目 :繪制此容器中的每個組件。
  • paintComponent API條目 :如果UI委托為非null,則調用UI委托的paint方法。 我們傳遞給委托人Graphics對象的副本,以保護其余的繪畫代碼免受不可撤消的更改

同樣,您有興趣通過組件的代理繪制組件本身,而不是繪制由該組件持有的組件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM