问题描述
这是我年终项目的一小部分,我正在尝试在 JFrame 中添加带有 JLabel 的直线。如果我删除 JLabel,则该行将显示,否则不会显示。我只知道 java swing,因此我对 java 图形没有任何经验。
提前致谢:)
import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
public class Draw extends JFrame {
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokelater(new Runnable() {
public void run() {
try {
Draw frame = new Draw();
frame.setVisible(true);
} catch (Exception e) {
e.printstacktrace();
}
}
});
}
/**
* Create the frame.
*/
public Draw() {
setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100,100,569,461);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5,5,5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel lbl = new JLabel("Show ");
lbl.setBounds(263,90,49,14);
contentPane.add(lbl);
}
@Override
public void paint(Graphics g) {
g.drawLine(100,0);
g.drawArc(200,200,120,180);
}
}
解决方法
正如评论中已经说过的,不要覆盖 #paint(Graphics g)
的 JFrame
方法。而是覆盖 #paintComponent(Graphics g)
的 contentPane
方法。
contentPane = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
//Don't forget to call the super method
super.paintComponent(Graphics g);
//Draw the line
g.drawLine(100,100,0); //Maybe adapt the line's position
}
};
不知道有没有必要打电话给:
super.paintComponent(Graphics g);
也许这也是由 #paintChildren(Graphics g);
类的 Component
完成的。