Во время моих первых дней работы с Java и Swing я столкнулся с одной проблемой, которую я не понимаю. Вот мой код ниже.Displaiyng Объекты JComponent - Java
импорт 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 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. Какова причина ?
По этой причине вы должны избегать «крашения». Вы нарушили цепочку лакокрасочных покрытий, чтобы не вызывать «paintComponent». Также помните, что 'JComponent' прозрачен по умолчанию, поэтому вызывать вызовы' super.paintComponent' не вызовет проблем. Взгляните на [Выполнение пользовательской живописи] (http://docs.oracle.com/javase/tutorial/uiswing/painting/) и [Живопись в AWT и Swing] (http://www.oracle.com/technetwork/ java/painting-140037.html) для получения дополнительной информации ... – MadProgrammer