我正在尝试使用图形2D绘制一条线,但然后该线出现在所有的线上
JFrame中的其他组件因此使它们不可见.我该如何解决这个问题?
这是代码:
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
class Success extends JFrame{
public Success(){
JPanel panel=new JPanel();
getContentPane().add(panel);
setSize(450,450);
JButton button =new JButton("press");
panel.add(button);
}
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
Line2D lin = new Line2D.Float(100, 100, 250, 260);
g2.draw(lin);
}
public static void main(String []args){
Success s=new Success();
s.setVisible(true);
}
}
解决方法:
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
class Success extends JFrame{
public Success(){
JPanel panel=new JPanel();
getContentPane().add(panel);
setSize(450,450);
JButton button =new JButton("press");
panel.add(button);
}
public void paint(Graphics g) {
super.paint(g); // fixes the immediate problem.
Graphics2D g2 = (Graphics2D) g;
Line2D lin = new Line2D.Float(100, 100, 250, 260);
g2.draw(lin);
}
public static void main(String []args){
Success s=new Success();
s.setVisible(true);
}
}
进一步提示
>在EDT上创建GUI.有关详细信息,请参见Concurrency in Swing.
>按照@nIcEcOw的建议使用JPanel,覆盖paintComponent(Graphics)而不是paint().再次,首先调用super方法.
>不要扩展框架,只使用一个实例.使用pack()根据组件所需的空间设置大小.
标签:graphics2d,java,swing,jframe
来源: https://codeday.me/bug/1002/1840679.html