在JFrame上绘制一条线

我试图使用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); } } 

 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。 有关更多详细信息,请参阅Swing中的并发 。
  2. 使用@nIcEcOw建议的JPanel ,覆盖paintComponent(Graphics)而不是paint() 。 再次,首先调用super方法。
  3. 不要扩展框架,只使用一个实例。 使用pack()根据组件所需的空间设置大小。