Java如何在Panel上添加Component?

时间:2014-01-11 16:48:55

标签: java swing

我正在学习java,我从一开始就开始了:)

我想在Panel上画线,但我不能

这是我的代码:

public class Window extends JFrame{

    public Window(){    
        setSize(600,600); 
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);

    Container pow = getContentPane(); 
    Component k = new Test();           
    pow.add(k); 

    Panel p1 = new Panel();
    p1.setBounds(40, 40, 520, 520);
    p1.setBackground(Color.white);
    pow.add(p1);    
}
}

和Panel类

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

public class Test extends JPanel{

public void paintComponent(Graphics g){
    g.drawLine(30, 50, 30, 550);
    g.drawLine(30, 550, 550, 550);

    g.drawLine(30, 50, 20, 60);
    g.drawLine(30, 50, 40, 60);

    g.drawLine(550, 550, 540, 540);
    g.drawLine(550, 550, 540, 560);
}

}

和主要

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

为什么我的组件在Panel下面? Sory这是我的代码

2 个答案:

答案 0 :(得分:1)

  • contentPane使用BorderLayout作为其默认布局。
  • 当您将组件添加到BorderLayout容器而未指定位置时,会添加BorderLayout.CENTER。
  • 这将覆盖之前添加到同一位置的任何其他组件。

解决方案:

  • 阅读并尝试使用其他布局管理器。检查this tutorial
  • 不要setBounds或使用null布局。

答案 1 :(得分:1)

PanelComponent是AWT,JPanelJComponent是Swing。 AWT不使用paintComponent,而是使用paint。将AWT类切换到Swing类或paintComponentpaint,它可能会有效。

这就是为什么将@Override添加到重写方法是一个好主意,因为它告诉您paintComponent不是Component的方法。

您还要将组件和面板添加到同一容器中。将组件放在面板中。

p1.add(k); // yes (add this to your code)
pow.add(k); // no (remove this from your code)
pow.add(p1); // previous would get covered