lizhizuoyongzhe 2015-05-20 04:56 采纳率: 20%
浏览 1713
已采纳

各位大神帮我看看为什么jpanel里面的曲线不显示在jframe中

public class DoGraph extends javax.swing.JFrame {

/** Creates new form Back */
;

public DoGraph() {
    initComponents();
    this.setSize(600, 400);

}

// public void paint(java.awt.Graphics g) {
// super.paint(g);
// Graphics2D g2 = (Graphics2D) g;
// g2.setBackground(Color.white);
// }

private void initComponents() {

// addWindowListener(new java.awt.event.WindowAdapter() {
// public void windowClosing(java.awt.event.WindowEvent evt) {
// exitForm(evt);
// }
// });
javax.swing.JPanel background=new Back();
this.getContentPane().add(background);

}

/** Exit the Application */
private void exitForm(java.awt.event.WindowEvent evt) {
    System.exit(0);
}

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {

    new DoGraph()
    .setVisible(true);
}

}

public class Back extends javax.swing.JPanel {
public Back() {
// this.setVisible(true);

}
public void paint(java.awt.Graphics g) {
    super.repaint();
    super.paint(g);
    Graphics2D g2 = (Graphics2D) g;
    this.setOpaque(true);
    this.setBounds(100, 150, 200, 200);
    double maxx=getHeight();
    double maxy=getWidth();
    System.out.println(maxx+"能不能");

// System.out.println(maxy+"能不能");
// System.out.println(getX());
// System.out.println(getY());
g2.translate(100+maxy/2, 150+maxx/2);
g2.setBackground(Color.white);
g2.setColor(Color.green);
g2.drawLine(0, 0, 0, -(int)maxx);
g2.drawLine(0, 0, (int)maxy, 0);
g2.setColor(Color.red);

    int[] a=new int[10];
    for(int i=0;i<10;i++){
        a[i]=i;
    }
    int[] b=new int[10];
    b[0]=0 ;
    b[1]=16 ;
    b[2]=18 ;
    b[3]=46 ;
    b[4]=55 ;
    b[5]= 76;
    b[6]= 88;
    b[7]= 38;
    b[8]= 10;
    b[9]= 20;                       
    for(int i=0;i<9;i++){           
        g2.drawLine(a[i], -b[i], a[i+1], -b[i+1]);
    }       
    g2.rotate(Math.toRadians(90));
}

}
运行的时候为什么曲线闪一下就没了,而且控制台输出了两次

  • 写回答

2条回答

  • danielinbiti 2015-05-20 06:39
    关注
    this.setBounds(100, 150, 200, 200);是相对于JFrame来说的。定位JPanle的坐标,
    但内部的坐标超出panel范围了,translate是当前坐标系,也就是panel坐标系,你panel宽度200,则除以2是100。
     g2.translate(100+maxy/2, 150+maxx/2);这就是平移了200,250,都超出panel范围了。
     改为
     g2.translate(maxy/2, maxx/2);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名