各位大神帮我看看为什么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个回答

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

楼上是正解。你平移的坐标超过范围了。

你的程序运行出来不只是输出两次吧,会一直输出的。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐