在JFrame上绘制一条线

时间:2012-05-26 14:58:18

标签: java swing jframe graphics2d

我正在尝试使用Graphics 2D画一条线但是然后该线出现在所有的线上 JFrame中的其他组件因此使它们不可见。我该如何解决这个问题?

以下是代码:

import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;

class Success extends JFrame{

    public Success(){
        JPanel panel=new JPanel();
        getContentPane().add(panel);
        setSize(450,450);

        JButton button =new JButton("press");
        panel.add(button);
    }

    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        Line2D lin = new Line2D.Float(100, 100, 250, 260);
        g2.draw(lin);
    }

    public static void main(String []args){
        Success s=new Success();
        s.setVisible(true);
    }
}

1 个答案:

答案 0 :(得分:10)

import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;

class Success extends JFrame{

    public Success(){
        JPanel panel=new JPanel();
        getContentPane().add(panel);
        setSize(450,450);

        JButton button =new JButton("press");
        panel.add(button);
    }

    public void paint(Graphics g) {
        super.paint(g);  // fixes the immediate problem.
        Graphics2D g2 = (Graphics2D) g;
        Line2D lin = new Line2D.Float(100, 100, 250, 260);
        g2.draw(lin);
    }

    public static void main(String []args){
        Success s=new Success();
        s.setVisible(true);
    }
}

进一步提示

  1. 在EDT上创建GUI。有关详细信息,请参阅Concurrency in Swing
  2. 根据@nIcEcOw的建议使用JPanel,覆盖paintComponent(Graphics)而不是paint()。再次,首先调用super方法。
  3. 不要扩展框架,只使用一个实例。使用pack()
  4. 根据组件所需的空间设置大小