向使用java图形的contentPane添加按钮

时间:2010-11-12 18:09:26

标签: java graphics jframe

我在向这个JFrame添加一个按钮时遇到了麻烦,它与我正在使用的java图形产品有冲突。评论中的内容是我到目前为止所尝试过的,但是没有用。

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

2 个答案:

答案 0 :(得分:2)

使用JComponent还是JPanel都无关紧要,两者都是容器。

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

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

此外,与代码的格式保持一致。始终使用空格或制表符。由于格式化,发布的代码很难阅读。

答案 1 :(得分:1)

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

JPanel旨在拥有子组件;它是一个容器。