Java 如何在代码中使用paint方法显示按钮?
我用JAVA编写了这段代码 `Java 如何在代码中使用paint方法显示按钮?,java,swing,paint,Java,Swing,Paint,我用JAVA编写了这段代码 ` public class Okno extends JFrame{ Pixel p; private int x_zac, y_zac, x_kon, y_kon; //zaciatoca a koncova pozicia ciary private int x_kruh, y_kruh; //suradnice kruhu int poc_ciar=0; // premenna na pocitanie poctu vytvorenych ciar int
public class Okno extends JFrame{
Pixel p;
private int x_zac, y_zac, x_kon, y_kon; //zaciatoca a koncova pozicia ciary
private int x_kruh, y_kruh; //suradnice kruhu
int poc_ciar=0; // premenna na pocitanie poctu vytvorenych ciar
int cokreslim=0; // pomocna premenna na urcovanie kreslenia ciar=0 alebo kruhov=1
Canvas can = new Canvas();
JButton kruh = new JButton("kruh");
JButton ciara = new JButton("ciara");
GridBagConstraints c = new GridBagConstraints();
Kreslenie_vypocty vypocty = new Kreslenie_vypocty();
Okno(Pixel p1){
setSize(800, 700);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridBagLayout());
setResizable(false);
c.gridx = 0;
c.gridy = 0;
c.insets= new Insets(10, 10, 10, 10);
add(kruh,c);
c.gridx = 1;
c.gridy = 0;
c.insets= new Insets(10, 10, 10, 10);
add(ciara,c);
c.gridx = 2;
c.gridy = 0;
add(can,c);
can.setSize(500,700);
can.setBackground(Color.gray);
can.addMouseListener(new MouseListener() {
public void drawCenteredCircle(Graphics2D g, int x, int y, int r) {
x = x-(r/2);
y = y-(r/2);
g.fillOval(x,y,r,r);
}
public void mouseClicked(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
p.c.add(new Ciara());
x_zac = e.getX();
y_zac = e.getY();
}
public void mouseReleased(MouseEvent e) {
x_kon = e.getX();
y_kon = e.getY();
repaint();
vypocty.vypocet_bodov(x_zac, y_zac, x_kon, y_kon, p, poc_ciar);
poc_ciar++;
}
});
//can.setVisible(true);
p=p1;
kruh.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cokreslim=1;
}
});
ciara.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cokreslim=0;
}
});
}
public void paint(Graphics g){
g=can.getGraphics();
g.setColor(Color.red);
if (cokreslim==0)
g.drawLine(x_zac,y_zac,x_kon,y_kon);
else
g.drawOval(x_zac-(50/2),y_zac-(50/2),50,50);}}`
当代码中有绘画方法时,按钮不显示。但是当我把它取下来的时候,一切都很好
屏风:用油漆法
无涂料法
。。。。。当我点击画布时,会显示一个按钮
谢谢首先,您应该调用
super.paint(g)
…这非常重要,因为它的工作之一是绘制子组件
话虽如此,您应该避免重写paint
,尤其是像JFrame
这样的顶级容器,相反,您应该创建一个自定义组件,该组件从JComponent
之类的扩展(例如JPanel
),并重写它的paintComponent
方法
您还应该避免对包含其他组件的组件进行绘制,例如,除非您计划绘制某种背景图像
相反,分开你的容器,这样你的画就不会在其他组件下结束…除非你是为了这个,否则你应该继续
请仔细查看和了解更多详细信息