[英]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.