Java组件:HowTo
所以,我想用PaintComponent在面板上画一些东西。但我想在构造函数中实现它。例如: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
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,并相应地操作框架及其面板之间的绘制操作。另请参见: