显示JComponent对象-Java
在使用Java和Swing的最初几天里,我遇到了一个我不理解的问题。下面是我的代码 导入javax.swing.*显示JComponent对象-Java,java,swing,Java,Swing,在使用Java和Swing的最初几天里,我遇到了一个我不理解的问题。下面是我的代码 导入javax.swing.* import java.awt.Color; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Font; import java.awt.Graphics; import java.awt.SystemColor; import java.awt.Toolkit; public clas
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.SystemColor;
import java.awt.Toolkit;
public class MyFrame
{
public static void main(String [] args)
{
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
Frame f = new Frame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
}
}
class Frame extends JFrame{
Frame()
{
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension size = kit.getScreenSize();
int screenwidth = size.width/4;
int screenheight= size.height/4;
setSize(screenwidth,screenheight);
setLocationByPlatform(true);
World panel = new World();
panel.setForeground(Color.BLUE);
add(panel);
setVisible(true);
}
}
class World extends JComponent{
public void paintComponent(Graphics g)
{
g.drawString("String1", 70,70);
}
public void paint(Graphics c)
{
Font font = new Font("Arial",Font.BOLD,16);
c.setFont(font);
c.drawString("String2", 30, 40);
}
}
我不明白我的第二节课“世界”的动作。我原以为我得到了String1和String2,但在我的窗口上,我只能看到String2。原因是什么?可能是因为父类的paint()方法通常调用paintComponent()方法。由于您正在重写paint()方法而不调用super.paint(),因此它不再到达调用paintComponent()的代码
在paint()方法中还有其他不应该使用的东西,因此通常只重写paintComponent()是个好主意。出于这个原因,您应该避免重写
paint
。您已断开绘制链,阻止调用paintComponent
。还要记住,JComponent
在默认情况下是透明的,因此未能调用super.paintComponent
将导致出现问题。查看和了解更多详细信息…甚至调用super.paintComponent()
+1,请参阅Swing教程中的一节。阅读整个章节,以获取有关定制绘画的正确方法的示例。