2010-11-12 43 views
1

我无法将按钮添加到此JFrame,它与我正在使用的Java图形事件有冲突。评论中的内容是我到目前为止所尝试的内容,并不奏效。将按钮添加到使用java图形的contentPane

import java.awt.*; 
import javax.swing.*; 
public class JFramePaint1 { 
//Button draw; 
public static JButton b = new JButton("button"); 

    public static void main(String[] a) { 

    JFrame f = new JFrame(); 

     f.setTitle("Drawing Graphics in Frames"); 
    f.setSize(800, 650); 
    f.setLocation(200,50); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    //f.add(b); 

    f.setContentPane(new ContentComponent()); 
    //f.getContentPane.add(b); 

     f.setVisible(true); 
    } 
    static class ContentComponent extends JComponent { 
    public int activa = 1; 
// add(b); 
    //this.add(b); 
    public void paint(Graphics g) { 


    g.setColor (Color.RED); 
    g.fillRect(0, 0, 800, 650); 
    if(activa == 1){ 

    g.setColor(Color.BLACK); 
    g.drawRect(40, 20, 150, 80); 
    int x = 40; 
    int y= 20; 
    for(int i = 0; i< 4; i++){ 

    g.drawRect(x+10, y+10, 150, 80); 
    x = x+10; 
    y = y+10; 
    } 

    } 

    // g.fillRect(20, 10, 100, 60); 
    // g.drawRect(40, 20, 150, 80); 
     } 
    } 
} 

回答

1

ContentComponent子类JPanel代替JComponent,然后直接或通过添加f.getContentPane().add(b)按钮到面板上。

JPanel被设计为具有子组件;它是一个容器。

2

不管你使用JComponent还是JPanel,都是容器。

区别在于默认情况下,JPanel使用FlowLayout,但JComponent不使用任何布局管理器,因此如果您想使用JCompnent,则需要设置布局管理器。

自定义绘画应该通过重写paintComponent()方法来完成。你还应该调用super.paintComponent(...)。两者之间的另一个区别是JPanel会自动绘制背景,但JComponent不会。

此外,请与您的代码的格式一致。始终使用空格或制表符。由于格式化,发布的代码非常糟糕。

+0

感谢您的澄清Rob。 – 2010-11-12 19:01:02