- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的计算机科学课上,我们正在学习 Java,我们已经在类(class)中学习了面向对象及其用途。几天前,我们开始了一个项目,但是我的老师并没有承担基本的面向对象的任务,而是决定通过立即创建图形来挑战我和其他一些人,而没有真正教我们。
我们的任务是创建一个“分子”程序,该程序接受一个整数来创建一个数组,并为数组中的每个可用部分创建一个随机的 x 和 y 坐标以及半径的大小。使用这些变量,将创建一个椭圆形。我的老师还告诉我们应该使用 JFrame 或 JPanel 来完成此操作,我选择了 JFrame。
在下面的代码中,您可以看到我对此的尝试以及我陷入困境的地方。我已经注释掉了设置不同颜色的部分,因为这对于这种情况并不重要。
/**
* Name: Dylan Eisen
* Date: May 1, 2017
* Project: Object Oriented
* Program: Molecules.java
*/
import java.awt.*;
import java.util.*;
import javax.swing.*;
public class Molecules extends JFrame
{
static Graphics g;
public Molecules(Graphics g, int x, int y, int size)
{
super.paint(g);
}
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.print("Enter the number of elements: ");
int num = in.nextInt();
int x = 20, y = 20, size = 20;
object elements[] = new object[num];
for(int i = 0; i < elements.length; i++)
{
x = (int)(Math.random()*1600);
y = (int)(Math.random()*900);
size = (int)(Math.random()*100);
elements[i] = new object(g, x, y, size);
}
Molecules f = new Molecules(g, x, y, size);
f.setSize(1600, 900);
f.setVisible(true);
//f.getContentPane().setBackground(Color.BLACK);
f.setTitle("Molecules Program - Dylan Eisen");
}
}
class object
{
Graphics g;
int x, y, size;
public object(Graphics g, int x, int y, int size)
{
this.x = x;
this.y = y;
this.size = size;
}
void paint(Graphics g)
{
//g.setColor(Color.WHITE);
g.fillOval(x, y, size, size);
}
}
如果有人可以帮助我,同时向我解释我哪里出了问题,以及将来如何解决这个问题,那将非常有帮助!
最佳答案
If anyone could help me but also explain to me where I am going wrong, and how to fix this in the future, it would be really helpful!
第一个问题是,您似乎不了解在 Swing 中绘画实际上是如何工作的。绘画有点黑魔法,看起来 Swing “神奇地”调用了 paint
方法。它并不太复杂,但我强烈建议您查看 Painting in AWT and Swing和 Performing Custom Painting更好地了解绘画过程的工作原理以及如何与之集成。
My teacher also told us that we should do this using either JFrame or JPanel, I chose JFrame.
我建议使用 JPanel
作为基本组件,您可以将其添加到以后想要的任何容器中,这提供了更灵活的解决方案。
作为一般建议,您应该覆盖 JPanel
的 paintComponent
。如果您发现自己重写了 paint
,那么您可能做错了什么。
您可能还会发现 JFrame
存在其他问题,因为它的绘制过程不是双缓冲的,并且也可能受到框架本身包含的其他组件的干扰
JFrame
实际上是 JRootPane
的容器,其中包含 contentPane
、JMenuBar
和 >玻璃 Pane
当您覆盖 JFrame
的 paint
时,其他组件可以在不通知您的情况下绘制您的内容(它们可以独立绘制)
一般来说,Graphics
上下文是一系列可以生成图像的例程的抽象概念。 Swing 通过 paint
方法传递用于绘制窗口的 Graphics
上下文,您永远不应该维护对此上下文的引用,并且只应在 paint 时使用它
方法被调用。这意味着您的 object
类不需要需要 Graphics
上下文的构造函数,它应该只在绘制方法/周期的上下文中绘制。
object
是一个非常非常糟糕的类名,因为 Java 定义了它自己的 Object
类,默认情况下所有其他类都从该类扩展(如果它们不指定父类)
我还强烈建议您查看Code Conventions for the Java Programming Language 。这将使其他人更容易阅读您的代码,也让其他人更容易阅读您的代码
关于java - JPanel 面向对象图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43881024/
我正在创建一个多区域 AlwaysOn Sql Availability 组。我在东部有 2 个虚拟机,在西部有 1 个虚拟机。我需要使用面向公众的负载平衡器对这些进行负载平衡。是否可以使用存在于不同
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是 Smalltalk 技术的新手。我的编程经验是使用 C 和 C++。我想了解smalltalk的设计方法论。谁能推荐一些用smalltalk开发的简单的实时应用程序,可以帮助像我这样的初学者探索
现在我已经对 web2py 比较熟悉了,我想试试 Django。 主要区别是什么? 考虑到 web2py 知识,最有效的入门方法是什么? (一定有一些python应用框架的知识,不是吗?) 编辑 另外
我之前发过一个问题,Moving away from VSS ,其中我向使用 VSS 的 Delphi 开发人员询问了最佳的 VCS 控件。大多数开发人员似乎将 svn 与 TortoiseSVN 一
引用this question ,收集对 Delphi 初学者真正有帮助的网站链接可能会很好。 第一个答案指向Delphi Basics ,这是一个非常好的网站。 但一定还有更多。 所以:请为这个社区
我已经构建了一个 saas 产品,其中 Angular 4 与 golang Rest api 集成,并将构建上传到了 aws ec2 实例上。我的项目是一个基于 Multi-Tenancy 的应用程
我是 .NET 开发人员,在此之前使用过 VB6。我已经非常熟悉这些环境,并在垃圾收集语言的上下文中工作。但是,我现在希望通过 native C++ 增强我的技能,但发现自己有点不知所措。具有讽刺意味
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
由于我在数学方面没有任何出色的技能,所以我问您是否存在我应该在未来可能会改变的类(class)中使用的算法。 考虑以下场景: “角色”类具有以下字段: private boolean admin; p
我有许多面向“列”的 csv 文件,我需要对其进行预处理才能最终索引它们。 这是面向时间的数据,每个“设备”都有大量的列(最多 128 列),例如: LDEV_XXXXXX.csv
我想就重构技巧的最佳资源展开讨论,着眼于前端 JavaScript 重构。 一个我尊重其意见的 friend 建议这个 book ,尽管它使用 Java 中的示例。我明白 OO 重构的原则应该翻译成另
我不明白如何使用 Jquery/javascript 处理对象。 以及如何创建私有(private)方法/变量?我在论坛上看到关闭,但我尝试过但没有用。以及如何查看方法/变量是否是私有(private
我已经使用 MATLAB 多年并且非常熟练。我习惯了 MATLAB 调试,您可以在其中跳过行并查看变量及其变化方式,这就是我学习编码的方式。我现在正在研究使用 FORTRAN、C++ 和 Python
我正在学习如何实现“单一 Activity - 多个 fragment ”架构。据我所知,这是如今很普遍的方法,你可以找到很多关于这个主题的文章。例如这个 http://vinsol.com/blog
目前是否有任何简单的方法可以在 Apache Tomcat Servlet 容器前面设置 YAWS Web 服务器,类似于流行的 Apache httpd + Tomcat 设置? 最佳答案 我不相信
我是一个相当有能力的 Ruby 脚本编写者/程序员,但一直感到要扩展到 C++ 的压力。我没能找到任何与“C++ for Ruby Programmers”相关的网站。 This site Pytho
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我在表上有一个名为 cart_product_fti 的全文索引 每当我使用它时,我都必须准确列出索引中的所有字段: MATCH (foo,bar,etc) 我的想法是,如果稍后我决定向索引添加/删除
我是一名优秀的程序员,十分优秀!