想改进这个问题吗?更新问题,使其仅通过编辑这篇文章来关注一个问题。
我有一个关于Java的问题,因为我了解不来用Java绘制几何图形,下面的代码你能帮我吗?
这是代码:
public class Gioco {
public static void main (String args [])
{
PaintRect();
}
public static void PaintRect() {
g.drawRect(100,100,300,300);
g.drawLine(100,100,100,100);
g.setBackground(Color.BLACK);
System.out.println("Trasut");
credits.setText("Kitebbiv");
credits.setBackground(null);
credits.setEditable(false);
credits.setFocusable(false);
credits.setBounds(0,0,100,100);
credits.setForeground(Color.BLACK);
panel.add(credits);
g.getPaint();
}
如何创建三角形、正方形和矩形的JFrame?更正我的代码谢谢
在我开始写我的答案之前,我需要鼓励你仔细阅读:如何创建一个有效的最小、完整和可验证的示例和一个简短、自足、正确的示例。
>
从您(现已删除)的代码中,我看到您还没有完成自定义绘画的Swing教程,或者您甚至没有注意它,这行会给您带来问题
static Graphics2D g = new Graphics2D()
过度使用静态
修饰符会伤害你,静态
不是一个跨方法的魔法词,可以让你的变量在程序的任何地方都可以访问,你应该创建一个你的程序实例并从那里调用方法(它们不是静态的),请参阅为什么静态变量被认为是邪恶的?,你真的应该回去学习要点,然后使用GUI甚至使用Swing自定义绘画为您的学习增加更多复杂性。
你正在使用setBounds()方法,这表明(我可以在你删除的代码中确认)你正在使用一个空布局:
panel.setLayout(null);
您真的应该考虑检查布局管理器
您使用的是一种不推荐使用的方法,而应该使用方法。
在手动设置JFrame的大小时,应该使用布局管理器并调用方法JFrame#pack()
,该方法将计算JFrame的首选大小,或覆盖组件的getPreferredSize()
。
在您删除的代码上,您的鼠标侦听器连接到了一个按钮,而您需要使用一个动作侦听器,请参阅如何使用动作来了解这一点。
您没有将程序放在事件调度线程(EDT)上,这可能会使程序冻结,因为Swing不是线程安全的。您可以通过如下方式编写主方法来纠正此问题:
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
//Your constructor here
}
});
}
你应该更礼貌一点:“纠正我的代码谢谢”听起来像是命令,我会这么说的,你能帮我吗?这听起来像是请求某人帮助你,因为他们可以,而不是因为他们必须帮助你,以上几点都可以纠正你的代码。
在所有上述内容(您应该仔细阅读)之后,我们可以继续进行编码部分:
为了绘制矩形,我们需要了解一些关于矩形的知识:
draw(Shape)
,其中形状是矩形2D的一个实例
要绘制正方形,我们需要知道:
你一定是在说...“但是你用来绘制正方形的方法和矩形是一样的!”,嗯...是的,我们是,区别在于我们要传递一个
宽度
和
高度
正方形的大小相等,矩形的大小不同。
要绘制三角形,您需要知道:
现在,将所有这些放在一起,我们应该将所有代码放在
JGroup
的覆盖方法中,称为
油漆组件()
,如教程所示(参见第#1点)。它应该看起来像这样:
@Override protected void paintComponent(Graphics g) { super.paintComponent(g); //ALWAYS call this method first! g.drawRect(10, 10, 50, 50); //Draws square g.drawRect(10, 75, 100, 50); //Draws rectangle g.drawPolygon(new int[] {35, 10, 60}, new int[] {150, 200, 200}, 3); //Draws triangle }
但是我们还需要在我们的JPanel上重写另一个方法(请参阅:我应该避免在Swing中使用setPreferred | Maximum | MinimumSize吗?普遍的共识是肯定的),否则我们的JFrame将比我们想要的小,所以它应该是这样的:
@Override public Dimension getPreferredSize() { return new Dimension(300, 300); }
不要忘了在这些方法中调用Override!
只有这些方法,我们已经完成了绘制形状的程序,但我知道如果我不发布整个代码,您最终会在一个不起作用或导致html" target="_blank">编译错误的地方编写上述方法,因此产生以下输出的整个代码(实际上是MCVE或SSCCE(请参阅本答案中的第一段以了解每个意思))是:
import java.awt.Dimension; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; public class ShapesDrawing { private JFrame frame; private JPanel pane; public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new ShapesDrawing().createAndShowGui(); } }); } public void createAndShowGui() { frame = new JFrame(getClass().getSimpleName()); pane = new JPanel() { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); //ALWAYS call this method first! g.drawRect(10, 10, 50, 50); //Draws square g.drawRect(10, 75, 100, 50); //Draws rectangle g.drawPolygon(new int[] {35, 10, 60}, new int[] {150, 200, 200}, 3); //Draws triangle g.dispose(); } @Override public Dimension getPreferredSize() { return new Dimension(300, 300); } }; frame.add(pane); frame.pack(); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
我真的希望你能阅读我在这里发布的每一个链接,因为这是值得的
如果需要填充形状,则调用fillRect和fillPolygon,而不是drawRect和drawPolygon:
@Override protected void paintComponent(Graphics g) { super.paintComponent(g); //ALWAYS call this method first! g.drawRect(10, 10, 50, 50); //Draws square g.fillRect(150, 10, 50, 50); //Fills a square g.drawRect(10, 75, 100, 50); //Draws rectangle g.fillRect(150, 70, 100, 50); //Fills a square g.drawPolygon(new int[] {35, 10, 60}, new int[] {150, 200, 200}, 3); //Draws triangle g.fillPolygon(new int[] {185, 150, 215}, new int[] {150, 200, 200}, 3); //Fills triangle g.dispose(); }
根据@MAD程序员的评论:
我们是否可以避免使用“绘制/填充多边形”(draw/fillPolygon)而使用更新的形状API…提供了更多功能,并且通常更易于使用:P
这是使用Shapes API更新的
油漆组件
方法:
@Override protected void paintComponent(Graphics g) { super.paintComponent(g); //ALWAYS call this method first! Graphics2D g2d = (Graphics2D) g; g2d.draw(new Rectangle2D.Double(10, 10, 50, 50)); g2d.fill(new Rectangle2D.Double(150, 10, 50, 50)); g2d.draw(new Rectangle2D.Double(10, 75, 100, 50)); g2d.fill(new Rectangle2D.Double(150, 75, 100, 50)); g2d.draw(new Polygon(new int[] {35, 10, 60}, new int[] {150, 200, 200}, 3)); g2d.fill(new Polygon(new int[] {185, 150, 215}, new int[] {150, 200, 200}, 3)); g2d.dispose(); g.dispose(); }
产生以下输出:
我必须在正方形上画一个三角形,带星号,预期输出如下图所示。 指令是这样的:编写一个C程序,从用户那里读取一个数字n,并允许使用“*”字符打印一个带有屋顶的房子。房子应该是一个n×n正方形和屋顶两条45度的对角线形成屋顶(如果n是奇数,屋顶在顶部完美地关闭)。我创建了一个三角形和正方形,但我不能把它们结合起来。三角形
本文向大家介绍python 打印直角三角形,等边三角形,菱形,正方形的代码,包括了python 打印直角三角形,等边三角形,菱形,正方形的代码的使用技巧和注意事项,需要的朋友参考一下 三角形 等腰直角三角形1 2.7 python:打印直角三角形 coding=utf-8 方式一 方式二 #打印实心等边三角形 #打印菱形 #实心正方形 #空心正方形 知识点说明: python ,end=''备注
现在,我们的WebGL包装器已经构建好,让我们在屏幕上绘制一个简单的三角形,来创建我们的第一个WebGL应用。它将作为创建更复杂的3D模型的典型步骤的良好基础。本节,我们将介绍位置缓冲区的概念,它其实就是用来定义3D模型的位置和形状的顶点的数组。 图9-1 创建三角形平面 操作步骤 按照以下步骤使用WebGL渲染一个2D三角形: 1. 链接到glMatrix库和WebGL包装器: <script
我有一个多边形的顶点列表,我试图在一个较大的三角形内创建一个等边三角形网格,以输入多边形的当前顶点为中心。 内部三角形边的大小由确定,它将容器边划分为相等的部分。最后,我想在Python的列表中存储所有这些三角形(包括原来的大三角形)顶点的坐标。 我提出的一个方法是: null
本文向大家介绍Android实现圆角矩形和圆形ImageView的方式,包括了Android实现圆角矩形和圆形ImageView的方式的使用技巧和注意事项,需要的朋友参考一下 Android中实现圆角矩形和圆形有很多种方式,其中最常见的方法有ImageLoader设置Option和自定义View。 1.ImageLoader加载图片 ImageLoader.getInstance().displa
问题内容: 我正在像这样扩展JFrame: 但是,屏幕上只画了一个正方形,有人知道为什么吗? 我的广场课也看起来像这样: 问题答案: JFrame的contentPane默认使用BorderLayout。当您向其添加一个Square时,默认情况下会添加BorderLayout.CENTER并覆盖以前添加的所有Square。您将需要阅读所有可用于Swing GUI的布局管理器。 例如,从这里开始:在