- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在练习 Java 中的 GUI,并制作了一个程序,可以根据用户输入按程序生成随机形状。但是,它似乎无法正常工作。该程序目前看起来像这样(线条而不是矩形和椭圆形):
但是,正如上面所建议的,程序应该有一些填充的、一些未填充的矩形、椭圆形和线条。这些水平线并不代表输出的样子。
这是下面的代码。
DrawPanelTest.java(主文件)
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import java.awt.BorderLayout;
public class DrawPanelTest {
public static void main(String[] args) {
String amount = JOptionPane.showInputDialog("How many shapes should exist?");
int intAmount = Integer.parseInt(amount);
DrawPanel drawPanel = new DrawPanel(intAmount);
JLabel text = new JLabel("Lines: " + drawPanel.getLineAmount() + ", Ovals: " + drawPanel.getOvalAmount()
+ ", Rectangles: " + drawPanel.getRectangleAmount());
JFrame jFrame = new JFrame();
jFrame.setDefaultCloseOperation(3);
jFrame.add(drawPanel);
jFrame.add(text, BorderLayout.SOUTH);
jFrame.setSize(600, 600);
jFrame.setVisible(true);
}
}
DrawPanel.java
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import javax.swing.JPanel;
public class DrawPanel extends JPanel {
private Random random = new Random();
private Shape[] shapes;
private int lineAmount;
private int ovalAmount;
private int rectangleAmount;
public DrawPanel(int amount) {
shapes = new Shape[amount];
for (int i = 0; i < shapes.length; i++) {
Color color = new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256));
int choice = random.nextInt(3);
switch (choice) {
case 0:
shapes[i] = new Line(random.nextInt(300), random.nextInt(300), random.nextInt(300), random.nextInt(300),
color);
lineAmount++;
break;
case 1:
shapes[i] = new Oval(random.nextInt(300), random.nextInt(300), random.nextInt(300), random.nextInt(300),
color, random.nextBoolean());
ovalAmount++;
break;
case 2:
shapes[i] = new Rectangle(random.nextInt(300), random.nextInt(300), random.nextInt(300),
random.nextInt(300), color, random.nextBoolean());
rectangleAmount++;
break;
}
}
}
public int getLineAmount() {
return lineAmount;
}
public int getOvalAmount() {
return ovalAmount;
}
public int getRectangleAmount() {
return rectangleAmount;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
for (Shape shape : shapes) {
shape.draw(g);
}
}
}
形状.java
import java.awt.Color;
import java.awt.Graphics;
public abstract class Shape {
private int x1;
private int y1;
private int x2;
private int y2;
private Color color;
public Shape() {
setX1(0);
setY1(0);
setX2(100);
setY2(100);
setColor(0, 0, 0);
}
public Shape(int x1, int y1, int x2, int y2, Color color) {
setX1(x1);
setY1(y1);
setX2(x2);
setY2(y1);
setColor(color);
}
public void setX1(int newX1) {
if (newX1 >= 0) {
x1 = newX1;
} else {
x1 = 0;
}
}
public int getX1() {
return x1;
}
public void setY1(int newY1) {
if (newY1 >= 0) {
y1 = newY1;
} else {
y1 = 0;
}
}
public int getY1() {
return y1;
}
public void setX2(int newX2) {
if (newX2 >= 0) {
x2 = newX2;
} else {
x2 = 0;
}
}
public int getX2() {
return x2;
}
public void setY2(int newY2) {
if (newY2 >= 0) {
y2 = newY2;
} else {
y2 = 0;
}
}
public int getY2() {
return y2;
}
public void setColor(int r, int g, int b) {
color = new Color(r, g, b);
}
public void setColor(Color newColor) {
color = newColor;
}
public Color getColor() {
return color;
}
public abstract void draw(Graphics g);
}
BoundedShape.java
import java.awt.Color;
import java.math.*;
public abstract class BoundedShape extends Shape {
private boolean filled;
public BoundedShape() {
super();
setFill(false);
}
public BoundedShape(int x1, int y1, int x2, int y2, Color color, boolean fill) {
super(x1, y1, x2, y2, color);
setFill(fill);
}
public void setFill(boolean fill) {
if (fill == true || fill == false) {
filled = fill;
} else {
throw new IllegalArgumentException("fill has to be either true or false");
}
}
public boolean getFill() {
return filled;
}
public int getUpperLeftX() {
return Math.min(super.getX1(), super.getX2());
}
public int getUpperLeftY() {
return Math.min(super.getY1(), super.getY2());
}
public int getWidth() {
return Math.abs(super.getX2() - super.getX1());
}
public int getHeight() {
return Math.abs(super.getY2() - super.getY1());
}
}
Line.java
import java.awt.Color;
import java.awt.Graphics;
public class Line extends Shape {
public Line() {
super();
}
public Line(int x1, int y1, int x2, int y2, Color color) {
super(x1, y1, x2, y2, color);
}
@Override
public void draw(Graphics g) {
g.setColor(super.getColor());
g.drawLine(super.getX1(), super.getY1(), super.getX2(), super.getY2());
}
}
矩形.java
import java.awt.Color;
import java.awt.Graphics;
public class Rectangle extends BoundedShape {
public Rectangle() {
super();
}
public Rectangle(int x1, int y1, int x2, int y2, Color color, boolean filled) {
super(x1, y1, x2, y2, color, filled);
}
public void draw(Graphics g) {
g.setColor(super.getColor());
if (super.getFill() == false) {
g.drawRect(super.getUpperLeftX(), super.getUpperLeftY(), super.getWidth(), super.getHeight());
} else if (super.getFill() == true) {
g.fillRect(super.getUpperLeftX(), super.getUpperLeftY(), super.getWidth(), super.getHeight());
}
}
}
椭圆形.java
import java.awt.Color;
import java.awt.Graphics;
public class Oval extends BoundedShape {
public Oval() {
super();
}
public Oval(int x1, int y1, int x2, int y2, Color color, boolean filled) {
super(x1, y1, x2, y2, color, filled);
}
public void draw(Graphics g) {
g.setColor(super.getColor());
if (super.getFill() == false) {
g.drawOval(super.getUpperLeftX(), super.getUpperLeftY(), super.getWidth(), super.getHeight());
} else if (super.getFill() == true) {
g.fillOval(super.getUpperLeftX(), super.getUpperLeftY(), super.getWidth(), super.getHeight());
}
}
}
提前致谢,麻卜迪36
最佳答案
在 Oval
和 Rectangle
的 draw()
方法中,您调用 super.getWidth()
并super.getHeight()
。但由于 Shape
中构造函数中的拼写错误,您的高度始终为 0:
您调用setY2()
并传入y1
,因此y2 == y1
,因此abs(y2 - y1) = 0
。
public Shape(int x1, int y1, int x2, int y2, Color color) {
setX1(x1);
setY1(y1);
setX2(x2);
setY2(y1); // change this to setY2(y2)
setColor(color);
}
现在高度将不再为 0,您将看到二维形状。
关于java - DrawRect、DrawOval、DrawLine、FillRect 和 FillOval 仅在提供的代码中绘制一条水平直线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59628903/
我目前正在研究一个项目欧拉问题(www.projecteuler.net),但遇到了一个绊脚石。其中一个问题提供了一个 20x20 的数字网格,并要求直线上 4 个数字的最大乘积。这条线可以是水平的、
我有两个表,我需要从每个表中选择一列。 这必须在单个查询中完成。 好消息是这两列以正确的方式排序,并且它们都包含相同数量的行。 现在,我知道我可以通过 rowid 加入两个表,但它很慢,因为它必须进行
我想在我的 iPad 应用程序中实现一个布局,该布局具有一个可左右滚动而不是上下滚动的合适 View : 所以而不是 第 1 行第 2 行第 3 行(垂直滚动)这将是 :第 1 行、第 2 行、第 3
我有五个尺寸的图像:600x30、600x30、600x30、600x30、810x30。它们的名称分别是:0.png、1.png、2.png、3.png、4.png。 如何使用 ImageMagic
我正在寻找一个选项来滚动多个列表(水平),如附件中的图片所示。您可以向左或向右滑动以进入下一个 ListView 。顶部应该有一些按钮可以单击或滚动 我尝试将 ListViews 放入类似此代码的内容
这些值之间是否存在数学关系?如果我知道 hFOV 和 vFOV,我可以计算对角 FOV 而不涉及焦距等其他值吗? 我的第一个想法是使用毕达哥拉斯定理,但也许这是错误的。 最佳答案 感兴趣的物理量是传感
我正在尝试在 game_width=640 和 game_height=480 的窗口内绘制网格。网格单元的数量是预定义的。我想在水平和垂直方向上均匀分布单元格。 void GamePaint(HDC
你好,我已经发布了我的 iphone 应用程序 Micro-Pitch,现在正在将它移植到 android 上。我不知道如何在 ScrollView 中画线,想知道我做错了什么。 这是我的 Scrol
如果您访问我的网站:www.ryancoughlin.com - 如果您在页面右侧看到 Google、Yahoo 等 RSS 按钮。我试图让它们均匀对齐,它们的图像高度都相同,我一直试图让它们均匀对齐
我想将此 Material 水平居中: 最佳答案 将 text-align:center 添加到您的 anchor 。我假设您的 zoom1 具有 display
我正在努力做到这一点,以便我的旋转木马可以与其他文本共享一个水平行,但由于某种原因它无法正常工作,当它设置为 40% 时它占据了 100% 的宽度。 我将在下面发布代码和屏幕截图。 在上图中,它显示了
问题来了。我正在尝试放置一些 彼此相邻的元素。 div 的宽度s 未指定,取决于它们的内容。我正在使用下面的 CSS 代码来定位 彼此相邻: #div{ height: 50px; f
我正在尝试使用这样的 Bootstrap 并排打印表格 但是当我尝试打印预览时,我得到了这个 我的代码如下。我尝试了所有可能的解决方案,但我不知道为什么我无法打印我看到的页面。请指导我解决这个问题。
我想知道是否可以在背景中使用两种不同的颜色,并通过 Bootstrap 在每一侧扩展 100%。 这是我的意思的截图, 左侧为红色,右侧为深色,为更大的屏幕放大 100%。有什么简单的解决方案吗? 最
我正在尝试制作一个包含所有事件的滚动触发的整个网站。我只需要帮助来实现这种效果: 我有一个网站,其中包含一些填满所有视口(viewport)的 div,我希望用户能够向下滚动到一个命名的 div,然后
我的代码是 Show All Show Valid Show Pending Save Clear Download As CSV 我希望那些输入日期和按钮在 class="buttons" di
我在玩这个想法: 在这个 block 中我有 2 作为按钮和 并尝试了 float荷兰国际集团他们让他们粘在一起。实现这种效果的主要思想是操纵 ul 的宽度/显示状态。或者只是菜单部分。 Log
这个问题在这里已经有了答案: How can I horizontally center an element? (134 个回答) 关闭 4 年前。
我遇到了一个 CSS 问题,需要帮助。我在目录中有许多不同大小的图像,我正在动态列出它们以显示以下 View :(我仅显示两个图像作为示例) 这是我的 HTML:
这个问题在这里已经有了答案: 关闭 9 年前。 Possible Duplicate: How can I make a horizontal ListView in Android? 我已经多次使
我是一名优秀的程序员,十分优秀!