图形在Java中不起作用
我试图在java中搞乱一些图形,但是我无法让它工作。JFrame带有我创建的按钮,但是JFrame只是灰色的,没有我想要它画的红线图形在Java中不起作用,java,swing,jframe,paintcomponent,repaint,Java,Swing,Jframe,Paintcomponent,Repaint,我试图在java中搞乱一些图形,但是我无法让它工作。JFrame带有我创建的按钮,但是JFrame只是灰色的,没有我想要它画的红线 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class Shapes extends JFrame implements ActionListener{ JButt
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Shapes extends JFrame implements ActionListener{
JButton button = new JButton("click");
public Shapes() {
setVisible(true);
setSize(500, 500);
button.addActionListener(this);
button.setSize(20, 20);
setLayout(new FlowLayout());
add(button);
repaint();
}
public static void main(String[] args){
Shapes s = new Shapes();
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.red);
g2.drawLine(5, 10, 10, 20);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == button){
repaint();
}
}
}
两件事:
1) 。您并不想在顶级容器(如JFrame
)上进行自定义绘制。相反,您希望使用JPanel
class Panel extends JPanel
{
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.red);
g2.drawLine(5, 10, 10, 20);
}
}
并将其添加到您的JFrame
:add(newpanel())代码>(如果需要,也可以创建一个对象)
2) <代码>设置可见(真)代码>应该是您在设置窗口时所做的最后一件事。因此,请更改您的构造函数:
public Shapes() {
setSize(500, 500);
button.addActionListener(this);
button.setSize(20, 20);
setLayout(new FlowLayout());
add(button);
add(new Panel()) // added from part 1
repaint();
setVisible(true);
}
有关详细信息,请浏览不要直接在JFrame
上绘制,请使用JPanel
来代替。如果我将其更改为JPanel,当我启动程序时,程序仅在1-2秒后自动结束,而不显示JPanel。此外,我不能对JPanel使用repaint()。你能详细解释一下吗?我发布了一个更详细的答案1)正如@BitNinja所说的,你在你的JPanel中画画,然后把你的JPanel添加到一个JFrame中,然后显示出来。2) 在尝试重写的方法之前,应始终使用@Override
注释。如果你这样做了,你会发现JFrame没有paintComponent(…)
方法。谢谢你的帮助:)我开始得到它了。1+,但别忘了建议调用super.paintComponent(g)如果你的答案已经解决了你的问题,请点击点击复选标记来考虑。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。