Java组件:HowTo

Java组件:HowTo,java,Java,所以,我想用PaintComponent在面板上画一些东西。但我想在构造函数中实现它。例如: public class Interfata extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.red); g.drawOval(500, 500, 50, 40); } public Interfata

所以,我想用PaintComponent在面板上画一些东西。但我想在构造函数中实现它。例如:

public class Interfata extends JPanel
{ 
   public void paintComponent(Graphics g)
  {
     super.paintComponent(g);
     g.setColor(Color.red);
     g.drawOval(500, 500, 50, 40);
  }

  public Interfata()
 {
         // code here
 }

  public static void main(String[] args)
 {
    Interfata i = new Interfata(); 
 }
代码应该与此模型类似。问题是我不知道如何在构造函数中创建的面板上调用paintComponent方法。(尽管看起来效率很低,但我在构造函数中创建了框架、面板和所有函数,因此,我只需在main方法中实例化该对象)。如果我不够清楚,请询问您认为合适的任何细节

编辑:更具体地说,我的构造函数是这样的:

public Interfata()
{

    // main interface
    JFrame frame = new JFrame("Queue");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(1000, 450);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (int) ((d.getWidth() - frame.getWidth()) / 2);
    int y = (int) ((d.getHeight() - frame.getHeight()) / 2);
    frame.setLocation(x, y);

    //simulation interface
    JFrame f = new JFrame("Simulare");
    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    f.setSize(900, 800);
    int x1 = (int) ((d.getWidth() - frame.getWidth()) / 2);
    int y1 = (int) ((d.getHeight() - frame.getHeight()) / 2);
    f.setLocation(x1, y1); 

    JPanel panel = new JPanel();
    panel.setLayout(null);

    JPanel panel1 = new JPanel();
    panel1.setLayout(null);


    JLabel l1 = new JLabel("Intervalul minim de asteptare: ");
    JTextArea tf1 = new JTextArea();
    panel.add(l1);
    l1.setBounds(5,10,200,25);
    panel.add(tf1);
    tf1.setBounds(200,10,300,20);

    JLabel l2 = new JLabel("Intervalul maxim de asteptare: ");
    JTextArea tf2 = new JTextArea();
    panel.add(l2);
    l2.setBounds(5,50,200,25);
    panel.add(tf2);
    tf2.setBounds(200,50,300,20);

    JLabel l3 = new JLabel("Duarata minima pentru serviciu: ");
    JTextArea tf3 = new JTextArea();
    panel.add(l3);
    l3.setBounds(5,90,200,25);
    panel.add(tf3);
    tf3.setBounds(200,90,300,20);

    JLabel l4 = new JLabel("Durata maxima pentru serviciu: ");
    JTextArea tf4 = new JTextArea();
    panel.add(l4);
    l4.setBounds(5,130,200,25);
    panel.add(tf4);
    tf4.setBounds(200,130,300,20);

    JLabel l5 = new JLabel("Numarul de cozi: ");
    JTextArea tf5 = new JTextArea();
    panel.add(l5);
    l5.setBounds(5,170,100,25);
    panel.add(tf5);
    tf5.setBounds(200,170,300,20);

    JLabel l6 = new JLabel("Intervalul de simulare: ");
    JTextArea tf6 = new JTextArea();
    panel.add(l6);
    l6.setBounds(5,210,150,25);
    panel.add(tf6);
    tf6.setBounds(200,210,300,20);

    JButton b1 = new JButton("Simulare");
    panel.add(b1);
    b1.setBounds(700,100,100,35);
    b1.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            f.setVisible(true);

        }
    });

    frame.setContentPane(panel);
    frame.setVisible(true);
    f.setContentPane(panel1);
}

我想做的就是在新框架的面板上画一些东西,或者更具体地说,在框架f上

Well
paintComponent
将由w.e.调用,因此无需调用它。在任何地方您只需覆盖它并添加一些自定义内容,就像您已经拥有的一样。至少据我所知。我试过你说的,但它没有画任何东西。你扩展它将要画的JPanel。。。不是构造函数中新创建的,现在,您只是在这里扩展一个JPanel,然后创建一个匿名JFrame来包含构造函数中的面板。您可能应该只扩展JFrame而不是JPanel。然后创建作为父JFrame对象的子对象的JPanel,并相应地操作框架及其面板之间的绘制操作。另请参见: