请注意类的构造函数
Main,使其成为您的习惯,以遵循本示例中所示的顺序。首先向中添加组件,
Jframe然后再进行调用,例如
pack(),setSize() or setVisible(...),而不是在此之前。
始终把它当作习惯,每当您覆盖
paintcomponent()方法时,也要覆盖
getPreferredSize()方法。
并始终像
pack()/setVisible(...)在EDT-
事件调度线程中那样发出呼叫。请阅读Swing中的Concurrency,以获取有关该主题的更多详细信息。
import java.awt.Dimension;import java.awt.Graphics;import javax.swing.JButton;import javax.swing.Jframe;import javax.swing.JPanel;public class Main extends Jframe{ public static void main(String[] args) { new Main(); } public Main(){ setTitle("Sample"); setDefaultCloseOperation(EXIT_ON_CLOSE); setContentPane(new SamplePanel2()); pack(); setVisible(true); }}class SamplePanel2 extends JPanel{ public SamplePanel2(){ add(new JButton("Hi")); add(new SamplePanel()); }}class SamplePanel extends JPanel { public SamplePanel(){ } @Override public Dimension getPreferredSize() { return (new Dimension(300, 300)); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawString("HHHHHHHHHHHH", 100, 100); }}


