2012-12-11 87 views
1

有人可以看看我的代码,并告诉我为什么,当我更改以下两条语句时,我没有看到矩形被绘的改变。所以,如果我改变:paintComponent不会改变形状

g.setColor(Color.black); 
g.fillRect(l, w, 100, 100); 

程序还是打印黑色矩形具有相同尺寸和我第一次开始即使我改变颜色为黄色或试图更改尺寸或位置相同的位置。我是BlueJ。以下是我的完整代码:

import java.awt.*; 
import javax.swing.*; 

public class SwingPaintDemo2 extends JComponent { 

public static boolean isWall = true; 

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGUI(); 
     } 
    }); 
} 


private static void createAndShowGUI() { 
    //System.out.println("Created GUI on EDT? "+ 
    //SwingUtilities.isEventDispatchThread()); 
    JFrame f = new JFrame("Swing Paint Demo"); 
    JPanel MyPanel = new JPanel(); 
    MyPanel.setBorder(BorderFactory.createEmptyBorder(1000, 1000, 1000, 1000)); 
    MyPanel.setPreferredSize(new Dimension(250, 200)); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.add(new MyPanel()); 
    f.pack(); 
    f.setVisible(true); 

} 


public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    int l = 10; 
    int w = 10; 

    g.setColor(Color.black); 
    g.fillRect(l, w, 100, 100); 

     } 

} 

任何意见,将不胜感激。

回答

5

您的SSCCE不会编译MyPanel类,或者您的意思是new SwingPaintDemo2()

在你的意思new SwingPaintDemo2()假设:

的代码不工作得很好,但在JFrame是规模非常小:

enter image description here

,因为你不给它的组件的任何尺寸和无有一个尺寸,因为他们没有任何组件添加到他们,因此我们必须使JComponent返回一个正确的大小,所以当我们打电话pack()我们JFrame大小正确

倍率JComponentgetPreferredSize()返回的宽度和高度,其适合所有附图。

虽然一些建议:

  • 不要延长JComponent而延长JPanel

这里是(与上述修正你的代码中实现)的例子:

enter image description here

import java.awt.*; 
import javax.swing.*; 

public class SwingPaintDemo2 extends JPanel { 

    public static boolean isWall = true; 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 

    private static void createAndShowGUI() { 
     //System.out.println("Created GUI on EDT? "+ 
     //SwingUtilities.isEventDispatchThread()); 
     JFrame f = new JFrame("Swing Paint Demo"); 
     JPanel MyPanel = new JPanel(); 
     MyPanel.setBorder(BorderFactory.createEmptyBorder(1000, 1000, 1000, 1000)); 
     MyPanel.setPreferredSize(new Dimension(250, 200)); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(new SwingPaintDemo2()); 
     f.pack(); 
     f.setVisible(true); 

    } 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     int l = 10; 
     int w = 10; 

     g.setColor(Color.black); 
     g.fillRect(l, w, 100, 100); 

    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(150, 150); 
    } 
} 
+1

非常感谢你先生,那是做的。有趣的是,我第一次发布的代码并没有给我一个编译错误,也许这个类被损坏,因为我正在移动的东西?但是当我用相同的代码创建一个新类时,我看到了编译错误。但无论如何,感谢您花时间帮助我。如果我可以让你高兴,我会(仍在努力我的名声 - 新手)。 – user1894469

+0

@ user1894469至少现在工作。这不是一个问题,不要忘记检查旁边的勾号,如果它的答案。 –

+1

我刚要问你关于那个:)再次。 – user1894469