假设我制作了一个简单的图形应用程序。它有两个类,一个是主类,另一个是扩展JPanel的名为“panel”的类。主类只是一个包含JPanel的JFrame。其内容如下:
public static Panel panel = new Panel();
public static void main(String[] args) {
JPanel p = new Panel();
JFrame fr = new JFrame();
fr.setSize(600, 600);
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fr.setLocationRelativeTo(null);
fr.setVisible(true);
fr.add(p);
while (true) {
fr.repaint();
if (panel.test) panel.g2d.drawRect(30, 30, 40, 40);
}
}
第二个类使用Graphics2D来创建JPanel的内容。它也有一些变量,这些变量在油漆组件()方法中被更改。以下是它的内容:
Graphics2D g2d;
boolean test = false;
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g2d = (Graphics2D) g;
test = true;
g2d.setColor(Color.RED);
g2d.drawRect(10, 10, 20, 20);
}
然而,这里的问题是:在执行了油漆组件()方法后,test
和g2g
都不会改变。尽管油漆组件()方法绘制了它的矩形,但主方法的当循环中的代码永远不会最终绘制矩形。在主方法中,test
和g2g
似乎总是分别是false
和null
。我在这里错过了什么?在油漆组件()方法之外还有使用图形2D吗?
尝试用相同的代码验证此方法:
@Override
public void paintComponents(Graphics grphcs)
{
super.paintComponents(grphcs);
//add code here
}
而且我也建议不要使用JPanel指针来awt Panel变量。所以改变:
`JPanel p = new Panel(); to `JPanel p = new JPanel();`
当(true)块时,去掉那个块,它是不需要的,而且是有害的,因为它有踩在GUI线程上的风险。相反,在调用JFrame上的setViable(true)
之前,请添加您的JPanel。
此外,创建Graphics2D字段并尝试在paintComponent之外使用它进行绘制会引发NullPointerException。请理解,您不能完全控制Swing图形,不应尝试提取图形对象或以这种方式绘制图形。您需要阅读Swing图形教程,了解如何正确使用Swing组件进行绘制。
所以我要回答,
在paintComponent()方法之外是否还有其他方法可以使用graphics2D?
不可以。你可以通过使用BuffereImage的图形对象来解决这个问题,但是你仍然需要将BuffereImage绘制到你的JPanel或JComponent的paintComponent方法中。
问题内容: 我只是实现了继承JPanel的类,如下所示 Orpanel类正在加载图像并调整其自身大小。 这是问题。 调用JFrame的setContentpane(Orpanel的实例)使其工作正常,但是当我将Orpanel附加到JFrame时,调用add()方法而不是setContentpane(我知道setcontentpane并不意味着attach ..反正),它就行不通了。 终于弄清楚了当
我在更改联系人对象中的变量值时遇到问题。我正在尝试制作一个联系人列表,但我无法更改变量trach方法的值。我有editTouch方法调用change eName方法,这两个方法都传递了ArrayList对象trach引用,所以它不应该在main方法中更改值trach ArrayList时出现问题,但问题是当我想更改对象的名称时它不会更改它。我这里缺少什么吗?
我在同一个包中有两个java文件。我想将一个变量的更新值从一个文件传递到另一个文件。我编写了以下代码。在1班。java:- class2.java:- 问题是最终值打印是的,不应该打印。输出应该很好。请帮我。
问题内容: 我有一个ng- view以外的NavbarCtrl。我有一个与服务对话以使用户登录的登录控制器。用户登录后,我希望导航栏更新为用户的电子邮件地址。但是,对我而言,一旦用户登录,我似乎无法让Navbar范围更新加载到我的“ Auth”服务中的数据。 这是我的主要index.html: 而我的服务: 还有我的Login和Navbar控制器: 从我的研究中,我会认为$ scope.user
我在使用GetCircleArea()方法时遇到问题。请帮忙。我坐在这里,不知道该怎么办了。 非常感谢。寻找答案!
问题内容: 我在测试代码中有一个数组 要求arr [0] .GetId() 服务器是接口。ServerInstance是实现接口方法的结构,即 我有一个像 这正在更新结构的变量“ Id”。我确定值会更新为- 但这并没有反映在第3行的通话中 _*_更新* 范例 http://play.golang.org/p/zUqJ0hEjxv 问题答案: 您在添加结构时将其复制,而不是在示例中放置指向结构本身的