【发布时间】:2014-07-01 23:57:32
【问题描述】:
我试图在 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{
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();
}
}
}
【问题讨论】:
-
不要直接在
JFrame上绘画,而是使用JPanel。 -
如果我将其更改为 JPanel,当我启动程序时,程序会在 1-2 秒后自行结束,而不会显示 JPanel。另外,我不能将 repaint() 与 JPanel 一起使用。能详细点吗?
-
我发布了一个更详细的答案
-
1) 正如@BitNinja 所说,您在 JPanel 中绘画,然后将 JPanel 添加到 JFrame 中,然后显示。 2) 在您尝试覆盖的方法之前,您应该始终使用
@Override注释。如果你这样做了,你会发现 JFrame 没有paintComponent(...)方法。 -
感谢您帮助我 :) 我开始明白了。
标签: java swing jframe paintcomponent repaint