我在向这个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);
}
}
}
答案 0 :(得分:2)
使用JComponent还是JPanel都无关紧要,两者都是容器。
不同之处在于默认情况下JPanel使用FlowLayout,但JComponent不使用任何布局管理器,因此如果要使用JCompnent,则需要设置布局管理器。
应该通过覆盖paintComponent()方法来完成自定义绘制。您还应该调用super.paintComponent(...)。两者之间的另一个区别是JPanel会自动绘制背景,但JComponent不会。
此外,与代码的格式保持一致。始终使用空格或制表符。由于格式化,发布的代码很难阅读。
答案 1 :(得分:1)
让ContentComponent
子类JPanel
代替JComponent
,然后直接或通过f.getContentPane().add(b)
将该按钮添加到面板。
JPanel旨在拥有子组件;它是一个容器。