我试图绘制一个简单的矩形,但我认为paintComponent方法没有被调用。这是带有main方法的类的代码:
package painting;
import java.awt.*;
import javax.swing.*;
public class Painting {
public static void main(String[] args) {
JFrame jf;
jf = new JFrame("JUST DRAW A RECTANGLE");
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setLayout(null);
jf.setLocationRelativeTo(null);
jf.setSize(600,600);
jf.setVisible(true);
Mainting maint = new Mainting();
jf.add(maint);
}
}
和带有paintComponent()的类
package painting;
import java.awt.*;
import javax.swing.*;
public class Mainting extends JPanel {
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawRect(0, 0 , 200, 200);
System.out.println("haha");
g.setColor(Color.red);
}
}
这是什么问题,我不知道…
虽然已经提供的答案可能会导致出现矩形,但这种方法并非最佳。此示例旨在显示一种更好的方法。阅读代码中的注释以获取详细信息。
请注意,应该在EDT上启动Swing / AWT GUI。这留给读者练习。
import java.awt.*;
import javax.swing.*;
public class Painting {
public static void main(String[] args) {
JFrame jf = new JFrame("JUST DRAW A RECTANGLE");
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// null layouts cause more problems than they solve. DO NOT USE!
//jf.setLayout(null);
jf.setLocationRelativeTo(null);
/* if components return a sensible preferred size,
it's better to add them, then pack */
//jf.setSize(600, 600);
//jf.setVisible(true); // as mentioned, this should be last
Mainting maint = new Mainting();
jf.add(maint);
jf.pack(); // makes the GUI the size it NEEDS to be
jf.setVisible(true);
}
}
class Mainting extends JPanel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.drawRect(10, 10, 200, 200);
System.out.println("paintComponent called");
/* This does nothing useful, since nothing is painted
before the Graphics instance goes out of scope! */
//g.setColor(Color.red);
}
@Override
public Dimension getPreferredSize() {
// Provide hints to the layout manager!
return new Dimension(220, 220);
}
}
首先,请不要因为创建一个问题而将我置于火刑柱上,而其他具有类似名称和内容的人却存在。我把它们都看了一遍,但没有找到解决办法。 调用repaint()绝对不会调用paintComponent(),不管我似乎尝试了什么。下面是与问题相关的所有代码: 按照预期,“创建的级别面板和设置的内容窗格”被打印到控制台。 从不打印“油漆组件级油漆”。“计时器重新绘制”每2秒打印一次,正如预期的那样。
问题内容: 我只是实现了继承JPanel的类,如下所示 Orpanel类正在加载图像并调整其自身大小。 这是问题。 调用JFrame的setContentpane(Orpanel的实例)使其工作正常,但是当我将Orpanel附加到JFrame时,调用add()方法而不是setContentpane(我知道setcontentpane并不意味着attach ..反正),它就行不通了。 终于弄清楚了当
在试图制作一个非常简单的子弹地狱游戏来学习java时,我遇到了一个障碍: repaint()没有调用油漆组件()。 这是整个程序,目前只需将我每秒创建50次的图像绘制到JFrame上的JPanel上。 在使用断点和println方法进行了一些调试之后,我可以确认正在读取正确的图像,gameTimerAction中的计时器每秒被调用50次,并且repaint()根本没有调用paintComponen
问题内容: 在过去的两天里,我试图 理解 Java如何处理图形,但是在此方面却惨败。我的主要问题是确切了解如何/何时调用paint()(或较新的paintComponent())。 在下面的代码中,我将看到何时创建事物,除非我自己手动添加对它的调用或JFrame.paintAll()/ JFrame.paintComponents()的调用,否则永远不会调用paintComponent()。 我将
问题内容: 我有一个非常简单的Servlet和一个非常简单的HttpSessionListener: 我的方法从未被调用(没有日志输出),最终我在调用getSession()的那一行上得到一个 我尝试拨打电话时也没有问题,但存在相同的问题。 我不明白- 注释不足以调用我的侦听器吗?Eclipse甚至在下方将其显示为侦听器。 问题答案: 原来这是愚蠢的Eclipse问题之一… Project-> C
我正在使用一个简单的并每隔毫秒调用: 问题是虽然计时器在正确的时间结束,但是方法并没有每毫秒被调用一次。每次都少了几毫秒。 我使用日志检查它,发现的值在最后是597,而它应该是999,因为每次调用时它都会得到1。有精度误差吗?