将paint组件添加到JPanel

时间:2014-01-04 23:50:20

标签: jpanel paintcomponent

我正在尝试从这个类创建一个对象,并将其添加到我的主类中的JPanel。因此,当我将它直接添加到框架而不是面板时,它可以正常工作。但我需要添加多个对象,所以我需要三个JPanel。请帮助我!

public class main {
    public static void main(String[] Args) {
    GuessProp prop = new GuessProp();
    JFrame frame = new JFrame();
    JPanel pan = new JPanel();

    pan.add(prop);
    frame.add(pan);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}
}

vvvv这是我正在添加vvvv

类的代码
public class GuessProp extends JComponent {
static ArrayList numbers = new ArrayList<Integer>();

static int next;
static int last;
static Integer count = new Integer(0);
static int acurate = 50;
final static double threshold = 0.75;

public GuessProp()
{
    Timer time;
    time = new Timer(100, new ActionListener(){
        public void actionPerformed(ActionEvent ae){
                nextRand();
                guess();
                count++;
                repaint();
            }
        });
        time.start();
}

/*ASSUME THE IMPLEMENTATION FOR METHODS:
     *nextRand() AND guess() 
     *ARE HERE AND WORK FINE...
     */

public void paintComponent(Graphics g)
{
    Graphics2D g2 = (Graphics2D) g;
    Rectangle plot = new Rectangle(50,acurate, 10, 10);
    Line2D.Double base = new Line2D.Double(25,55,75,55);
    g2.setColor(Color.red);
    g2.fill(plot);
    g2.setColor(Color.black);
    g2.draw(base);
    g2.drawString(count.toString(), 100, 50);
}

}

2 个答案:

答案 0 :(得分:0)

添加到JPanel的对象(在本例中为paintComponent)需要扩展已从JComponent继承的JPanel。同时为多个面板设置框架布局也很好......

答案 1 :(得分:0)

  

“但我需要添加多个对象,因此我需要三个JPanel。”

您需要了解的关于JFrame的内容是默认BorderLayout。当你只添加一个组件时,它会显得很好,因为框架本身会将组件添加到BorderLayout.CENTER位置。如果您尝试添加多个,则需要指定每个组件应该去哪个位置。最常用的职位是

BorderLayout.WEST
BorderLayout.EAST   
BorderLayout.NORTH
BorderLayout.CENTER
BorderLayout.SOUTH

定位看起来像这样

enter image description here

所以你要添加这样的组件

JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
frame.add(panel2, BorderLayout.NORTH);
frame.add(panel2, BorderLayout.CENTER);
frame.add(panel3, BorderLayout.SOUTH);

作为良好做法,CENTER通常应至少使用一次。另请注意,position只能包含一个组件。

那么你想要添加五个以上的组件是什么?

  • 您可以设置不同的布局。
  • 您可以使用JPanel作为内容窗格,并为该面板设置布局。
  • 您可以将嵌套JPanel与嵌套LayoutManagers一起使用。

请参阅Laying Out Components Within a Container tutorial,了解所有不同的布局。


  

“我正在尝试从此类创建一个对象,并将其添加到我的主类中的JPanel中。”

如果这意味着我认为它意味着什么,你要将组件添加到正在绘制的JPanel,我会重新考虑,你将在JPanel的绘画上添加组件。相反,绘画JPanel作为其自己的组件,仅对绘画进行龋齿,然后向框架添加更多组件,如上所示。