2016-12-16 87 views
-1

所以我有一个在其中有一个BufferedImage的面板,并且我想在该图像上画一条线,将它重叠。在java中的图像上绘制一条线

我曾尝试下面的例子,我从谷歌发现,但它似乎并没有工作:

public class Main { 
private JFrame frame = new JFrame(); 
private JLayeredPane lpane = new JLayeredPane(); 
private JPanel panel1 = new JPanel(); 
private JPanel panel2 = new JPanel(); 
public Main() 
{ 
    frame.setPreferredSize(new Dimension(600, 400)); 
    frame.setLayout(new BorderLayout()); 
    frame.add(lpane, BorderLayout.CENTER); 
    lpane.setBounds(0, 0, 600, 400); 
    panel1.add(image); 
    panel1.setBounds(0, 0, 600, 400); 
    panel1.setOpaque(true); 
    panel2.add(linedraw1); 
    panel2.setBounds(200, 100, 100, 100); 
    panel2.setOpaque(true); 
    lpane.add(panel1, new Integer(0), 0); 
    lpane.add(panel2, new Integer(1), 0); 
    frame.pack(); 
    frame.setVisible(true); 
} 


/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    new Main(); 
} 

} 

下面的代码只是显示一个空白的图形用户界面,我尝试添加一个单独的面板框,但当我这样做时,只有新的面板显示,没有别的。 任何想法?

在此先感谢。

回答

0

创建一个扩展JPanel的自定义面板。在该面板中绘制图像和线条,并将其添加到UI中。

下面是一个样本,让你开始

public class Main { 
    private JFrame frame = new JFrame(); 
    private JLayeredPane lpane = new JLayeredPane(); 
    private JPanel panel1 = new MyPanel("C:\\Users\\PATH\\Pictures\\Image.png"); 
    private JPanel panel2 = new JPanel(); 
    public Main() 
    { 
     frame.setPreferredSize(new Dimension(600, 400)); 
     frame.setLayout(new BorderLayout()); 
     frame.add(lpane, BorderLayout.CENTER); 
     lpane.setBounds(0, 0, 600, 400); 
     panel1.setBounds(0, 0, 600, 400); 
     panel1.setOpaque(true); 
//  panel2.add(linedraw1); 
     panel2.setBounds(200, 100, 100, 100); 
     panel2.setOpaque(false); 
     lpane.add(panel1, new Integer(0), 0); 
     lpane.add(panel2, new Integer(1), 0); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    // This is your custom panel 
    class MyPanel extends JPanel { 
     private static final long serialVersionUID = -4559408638276405147L; 
     private String imageFile; 

     public MyPanel(String imageFile) { 
      this.imageFile = imageFile; 
     } 
     @Override 
     protected void paintComponent(Graphics g) { 
      // Add your image here 
      Image img = new ImageIcon(imageFile).getImage(); 
      g.drawImage(img, 0, 0, this); 

      //Add your lines here 
      g.setColor(Color.black); 
      g.drawLine(0, 0, g.getClipBounds().width, g.getClipBounds().height); 
      g.setColor(Color.red); 
      g.drawLine(0, g.getClipBounds().height, g.getClipBounds().width, 0); 
     } 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     new Main(); 
    } 

}