java - 无法看到 Paint() 方法中的图形内容

标签 java swing jframe awt

我正在类MyCanvas.java内执行所有Graphics内容,例如g.drawLine()

public class MyCanvas extends JComponent{ 
   public void paint(Graphics g){...}
}

我的 Main.java 类是

class Main{
 public static void main(String[] args){
   JFrame window = new JFrame();

   window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   window.setBounds(30, 30, 1000, 350);
   window.getContentPane().setLayout(new FlowLayout());

   MyCanvas mc = new MyCanvas();
   JScrollPane jsp = new JScrollPane(mc);
   jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

   window.getContentPane().add(jsp);
   window.getContentPane().setBackground(Color.WHITE);
   window.setVisible(true);
 }
}

但是,JFrame 仅显示白色纯背景,它不显示 paint(Graphics g) 中的任何 Graphics 内容。

请注意,如果我从上面的 Main.java 中删除 JScrollPane,那么它会完美地显示所有内容。

class Main{
 public static void main(String[] args){
   JFrame window = new JFrame();

   window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   window.setBounds(30, 30, 1000, 350);

   window.getContentPane().add(new MyCanvas());
   window.getContentPane().setBackground(Color.WHITE);
   window.setVisible(true);
 }
}

我的逻辑哪里出了问题?添加 JScrollPane 时有什么问题吗?请帮忙。谢谢。

最佳答案

class MyCanvas extends JComponent{ 
   public void paint(Graphics g){...}
}

应该是:

class MyCanvas extends JComponent{ 
   @Override
   public void paintComponent(Graphics g){...}
}

通过使用paintComponent,我们尊重绘画链。另外,请务必添加 super.paintComponent(g); 作为重写方法中的第一个语句,以确保绘制 BG 颜色和边框等。

关于java - 无法看到 Paint() 方法中的图形内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23191116/

相关文章:

java - 使用java图形沿着圆弧路径移动对象

java - 如何在 JScrollPane 中将组件居中?

java - 使用 setSelectedIndices 进行 JList 搜索始终选择第一项

java - 如何在 Java 中获取 JFormattedTextField 的长度?

java - 如何解决 SQLServerException : Invalid object name?

java - 如何在 Telegram 中以编程方式从 Android 应用程序共享 GPS 位置?

java - Android:如何将位图图像传递到 ArrayList<Bitmap> 并检索它

java - 如何使用 Jtable 中该行中第一个单元格的单元格编辑器编辑一行中的所有单元格?

java - JFrame GridBagLayout 组件定位

java - Jmeter HLS 插件.ts 内容空白