我和几个人一起玩游戏。这个游戏要求我们创建JComponent的子类,每个子类都有自己的paintComponent()方法,当它被添加到容器时调用。这些子类称为Block,Goal,Spike,Ball和Pit。将这些组件中的单个组件添加到框架中是没有问题的,因为没有其他任何内容随之添加。我已经在主菜单中的同一JPanel中添加了多个JButton,JButton也扩展了JComponent,所以我们都假设我们的子类也可以工作。但是,当我们尝试添加多个(即使是相同类型)时,只有其中一个(如果有的话)出现在框架中。我们还跟踪用于与窗口绘制线条的鼠标点击和鼠标移动(用于弹跳球),添加线和另一个组件也不起作用。到目前为止,这是我们认为解决问题的唯一方法,但没有:
Container c = this.getContentPane();
c.setLayout(null);
Block b = new Block(200, 200);
Block b1 = new Block(220, 200);
b.setBounds(200, 200, 20, 20);
b1.setBounds(220, 200, 20, 20);
c.add(b);
c.add(b1);
c.revalidate();
此方法尝试在同一容器中添加两个块。由于我将Container的布局设置为null
,因此我可以指定块的确切位置和大小。初始化块时,构造函数会获取块左上角的x和y坐标,默认大小为20x20像素。我也在两个块上调用setBounds()
,这样理论上它们就会彼此相邻。但是,当我编译并执行代码时,只显示第一个代码。任何理由为什么,以及如何解决这个问题?
另外,你会如何添加一个Line和一个Block?我有它,所以创建两行可以创建一个ArrayList
个行,并且在绘制一个新行之后,它会添加到ArrayList
之后,{{1}中的先前添加的行之后在容器中绘制。当我尝试添加一个Block并绘制一条Line时,我无法开始绘制一条Line,我认为这是因为即使Block只占用20x20的空间,它也会占用"整个容器,以便不能添加任何其他东西。
答案 0 :(得分:0)
however, when I compile and execute the code, Only the first one shows up
这是因为您在绝对布局上使用相同的x和y轴,因此您与另一个重叠。
<强>问题:强>
Block b = new Block(200, 200);
Block b1 = new Block(200, 200);
b1 将位于 b 之上,这就是为什么你只能看到一个Block
<强>溶液强>
对Block
答案 1 :(得分:0)
b.setBounds(200, 200, 20, 20);
b.setBounds(220, 200, 20, 20);
我认为你有一个错字。您正在为同一组件设置两次边界,因此第二个组件的大小仍为(0,0),这意味着无需绘制任何内容。
我想你想要:
b.setBounds(200, 200, 20, 20);
b1.setBounds(220, 200, 20, 20); // note the b1