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条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!