java界面的面板里加入绘图为什么不能正常显示?

importjava.awt.*;importjavax.swing.*;classKuaiextendsJPanel{publicvoidpaint(Graphicsg... import java.awt.*; import javax.swing.*; class Kuai extends JPanel{ public void paint(Graphics g){ super.paint(g); g.setColor(Color.red); // 设置颜色 g.fillRect(150,0,30,30); //一个红色的小方块 }}---------------------------------------------------------public class Kuang extends JFrame{ Kuai aa = new Kuai(); JPanel mb = new JPanel(); //游戏面板Kuang(){ mb.setBackground(Color.black); //面板颜色 黑 this.add(mb,BorderLayout.CENTER); //面板 mb.add(aa); //把绘图方块 加入到面板 …… } } 展开
 我来答
紫薇参星
科技发烧友

推荐于2018-04-13 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3511万
展开全部

因为你把Kuai类定义为JPanel类的扩展类,所以Kuai相当于一个JPanel,把Kuai加入另一个JPanel mb,因为mb的默认布局是FlowLayout,而Kuai又没有指定大小,所以Kuai会缩成一团(成为一个点),也就不能正常显示了。解决方法是直接在Kuai类上画图,然后把它加入到JFrame中,去掉JPanel mb,因为Kuai本身就是JPanel.

改完的程序如下(改动的地方见注释)

import java.awt.*;   
import javax.swing.*; 
class Kuai extends JPanel{
    public void paint(Graphics g){
    super.paint(g); 
    g.setColor(Color.red);    
    g.fillRect(150,0,30,30);   
   }
}
public class Kuang extends JFrame{
 Kuai aa = new Kuai();
 //JPanel mb = new JPanel(); //去掉这一句
 Kuang(){
  super("俄罗斯方块");
  aa.setBackground(Color.black); //这里mb改成aa   
  this.add(aa,BorderLayout.CENTER);//这里mb改成aa      
  //mb.add(aa); //去掉这一句
  setSize(300, 300);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setLocationRelativeTo(null);
  setVisible(true);
 }
 public static void main(String[] args) {
  new Kuang();
 }
}

运行结果

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式