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 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器