簡體   English   中英

JPanel重繪問題

[英]JPanel redraw problem

我有JFrame ,並用paintComponent()方法添加了JPanel類。 例如,我繪制了紅色矩形,而在執行一些操作后,我想繪制綠色橢圓形。 我試圖在JPanel調用repaint()方法,但沒有任何反應。 請幫幫我!

更新:這只是示例代碼

public class Test extends JFrame implements ActionListener{
private Container content;
private MyPanel em; 
private JButton btn;
    Test() {
        super("test");
        content = getContentPane();
        em = new MyPanel();
        conent.add(em);
        btn = new JButton("Draw");  
        btn.addActionListener(this);
        content.add(btn);   
    }

    public void actionPerformed(ActionEvent e) {
                em.setShape("oval");
    }           

public class MyPanel extends JPanel {
private String shape = "rectangle";
    MyPanel()
    {
    }
    setShape(String shape){
        this.shape = shape;
        repaint();
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        if(shape == "rectanle")
          g.drawRectangle(100,25,100,200);


        }
        else if(shape == "oval"){
           g.drawOval(100, 25, 175, 175);
        }
}

嘗試在javax.swing.RepaintManager上調用markCompletelyDirty(myComponent)

嘗試將shape == "oval"替換為"oval".equals(shape) 在Java中,根據equals()相等的字符串不一定根據==相等。

另外,我建議您將字符串文字替換為常量:

class Whatever {
    private final static String OVAL = "oval";

    public void process(String arg) {
        if (OVAL.equals(arg)) {
            // Do something
        }
    }
}

避免出現拼寫錯誤的問題(例如您遇到“矩形”和“矩形”)。

您可以添加調試語句,以檢查actionPerformed方法是否真正被調用,並查看何時執行paintComponent並跟蹤代碼中采用的路徑。

順便說一句,發布的代碼不應編譯:括號不匹配。

暫無
暫無

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

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