- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要帮助弄清楚如何使用java中的draw方法在嵌套for循环中绘制棋盘/被子状图案。我的实验室作业如下。您必须创建 QuiltPattern 类并声明该类的两个对象。此类的构造函数将接受一个参数,该参数设置对象的特征(如颜色),在绘制被子时交替这些对象。确保您的被子横向至少有 5 个 block ,向下至少有 7 个 block 。 QuiltPattern 类应包含一个名为 Draw() 的方法,用于在屏幕上的特定位置绘制图案。您必须使用嵌套循环来绘制被子。我已经写好了所有内容,但是我在绘制像被子/棋盘一样的对象时遇到了困难。我似乎无法让它对齐,到目前为止我只有两行偏移。任何帮助或建议让它在嵌套循环中工作将不胜感激。我一直在尝试寻找与此类似的东西,但运气不佳。我究竟做错了什么?
这是我的 QuiltPanel:
import javax.swing.*;
import java.awt.*;
public class QuiltPanel extends JPanel
{
int x = 0, y = 0, count = 0;
private Quilt squareOne, squareTwo;
public QuiltPanel()
{
squareOne = new Quilt(25, Color.blue, x+50, y);
squareTwo = new Quilt(25, Color.green, x+25, y);
setPreferredSize(new Dimension(750, 500));
setBackground(Color.black);
}
public void paintComponent(Graphics page)
{
super.paintComponent(page);
for ( count = 0; count <= 10; count = count+1)
{ if ( count % 2 == 0)
{ if ( count <= 5)
{ squareOne.draw(page);
squareOne = new Quilt(25, Color.blue, x, y);
}
else
{ squareOne.draw(page);
squareOne = new Quilt(25, Color.blue, x, y+25);
}
}
else
{ if ( count <= 5)
{ squareTwo.draw(page);
squareTwo = new Quilt(25, Color.green, x, y);
}
else
{ squareTwo.draw(page);
squareTwo = new Quilt(25, Color.green, x, y+25);
}
}
x=x+25;
}
}
}
这是我的被子类:
import java.awt.*;
public class Quilt
{
private int height, width, x, y;
private Color color;
public Quilt(int size, Color newColor, int upperX, int upperY)
{
width = size;
height = size;
color = newColor;
x = upperX;
y = upperY;
}
public void draw(Graphics page)
{
page.setColor(color);
page.fillRect(x, y, width, height);
}
public void setHeight(int size)
{
height = size;
}
public void setWidth(int size)
{
width = size;
}
public void setColor(Color newColor)
{
color = newColor;
}
public void setX(int upperX)
{
x = upperX;
}
public void setY(int upperY)
{
y = upperY;
}
public int getHeight()
{
return height;
}
public int getWidth()
{
return width;
}
public Color getColor()
{
return color;
}
public int getX()
{
return x;
}
public int getY()
{
return y;
}
}
如果您需要我的 QuiltPattern (JFrame):
import javax.swing.*;
import java.awt.*;
public class QuiltPattern
{
public static void main(String[] args)
{
JFrame frame = new JFrame("QuiltPattern");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new QuiltPanel());
frame.getContentPane().add(new QuiltPanel());
frame.pack();
frame.setVisible(true);
}
}
最佳答案
您的 Quilt 类应该是 QuiltPattern 类。所以我只是将该代码从 Quilt 复制并粘贴到 QuiltPattern,正如程序中所说,QuiltPattern 将执行绘图,并且它将有 2 个具有不同绘图属性的对象。
最好将主类分开。我创建了一个新类 QuiltMain 来初始化框架和面板。 (这都是您的代码)。
更改了 QuiltPattern(以前称为 Quilt)的构造函数以接受 2 个参数颜色和大小,因为正方形的位置在逻辑上应传递给 draw() 方法本身。
最后是创建棋盘图案的循环。一般有3种选择。
选项1。
int initX = getWidth() / 2 - (columnCount * squareSide) / 2;
int initY = getHeight() / 2 - (rowCount * squareSide) / 2;
int squareCount = rowCount * columnCount;
for(int i = 0; i < squareCount; i++) {
int rowI = squareCount / rowCount;
int colJ = squareCount % columnCount;
//draw at (initX + colJ * squareSide, initY + colI * squareSide)
}
选项 2。
int centerX = getWidth() / 2;
int centerY = getHeight() / 2;
for(int colJ = -rowCount/2; colJ < rowCount/2; colJ++) { //condition will include <= when rowCount is odd
for(int rowI = -columnCount/2; rowI < columnCount/2; rowI++) {//condition will include <= when columnCount is odd
//draw at (centerX + colJ * squareSide, centerY + colI * squareSide)
}
选项 3:
int initX = getWidth() / 2 - (columnCount * squareSide) / 2;
int initY = getHeight() / 2 - (rowCount * squareSide) / 2;
for(int colJ = 0; colJ < rowCount; colJ++) {
for(int rowI = 0; rowI < columnCount; rowI++) {
//draw at (initX + colJ * squareSide, initY + colI * squareSide)
}
我选择了选项 3,因为它看起来最简单、最合适。
工作代码:
被子主
import javax.swing.JFrame;
public class QuiltMain {
public static void main(String[] args) {
JFrame frame = new JFrame("QuiltPattern");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new QuiltPanel());
frame.getContentPane().add(new QuiltPanel());
frame.pack();
frame.setVisible(true);
}
}
被子图案
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class QuiltPattern {
private int height, width, x, y;
private Color color;
public QuiltPattern(int size, Color newColor) {
width = size;
height = size;
color = newColor;
}
public void draw(Graphics page, int x, int y) {
page.setColor(color);
page.fillRect(x, y, width, height);
}
public void setHeight(int size) {
height = size;
}
public void setWidth(int size) {
width = size;
}
public void setColor(Color newColor) {
color = newColor;
}
public void setX(int upperX) {
x = upperX;
}
public void setY(int upperY) {
y = upperY;
}
public int getHeight() {
return height;
}
public int getWidth() {
return width;
}
public Color getColor() {
return color;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
被子面板
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JPanel;
class QuiltPanel extends JPanel {
int x = 0, y = 0;
int rowCount = 7;
int columnCount = 5;
private QuiltPattern squareOne, squareTwo;
public QuiltPanel() {
squareOne = new QuiltPattern(25, Color.blue);
squareTwo = new QuiltPattern(25, Color.green);
setPreferredSize(new Dimension(750, 500));
setBackground(Color.black);
}
public void paintComponent(Graphics page) {
super.paintComponent(page);
int count = 0;
int squareSide = squareOne.getWidth();
boolean firstOne = true;
int quiltWidth = columnCount * squareSide;
int quiltHeight = rowCount * squareSide;
int initX = (getWidth() - quiltWidth) / 2;
int initY = (getHeight() - quiltHeight) / 2;
for(int colJ = 0; colJ < columnCount; colJ++) {
for(int rowI = 0; rowI < rowCount; rowI++) {
int x = colJ * squareSide + initX;
int y = rowI * squareSide + initY;
if(firstOne) {
squareOne.draw(page, x, y);
} else {
squareTwo.draw(page, x, y);
}
firstOne = !firstOne;
}
}
}
}
关于java - 使用绘制方法时的嵌套循环,无法弄清楚如何正确设置它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33911978/
SQLite、Content provider 和 Shared Preference 之间的所有已知区别。 但我想知道什么时候需要根据情况使用 SQLite 或 Content Provider 或
警告:我正在使用一个我无法完全控制的后端,所以我正在努力解决 Backbone 中的一些注意事项,这些注意事项可能在其他地方更好地解决......不幸的是,我别无选择,只能在这里处理它们! 所以,我的
我一整天都在挣扎。我的预输入搜索表达式与远程 json 数据完美配合。但是当我尝试使用相同的 json 数据作为预取数据时,建议为空。点击第一个标志后,我收到预定义消息“无法找到任何内容...”,结果
我正在制作一个模拟 NHL 选秀彩票的程序,其中屏幕右侧应该有一个 JTextField,并且在左侧绘制弹跳的选秀球。我创建了一个名为 Ball 的类,它实现了 Runnable,并在我的主 Draf
这个问题已经有答案了: How can I calculate a time span in Java and format the output? (18 个回答) 已关闭 9 年前。 这是我的代码
我有一个 ASP.NET Web API 应用程序在我的本地 IIS 实例上运行。 Web 应用程序配置有 CORS。我调用的 Web API 方法类似于: [POST("/API/{foo}/{ba
我将用户输入的时间和日期作为: DatePicker dp = (DatePicker) findViewById(R.id.datePicker); TimePicker tp = (TimePic
放宽“邻居”的标准是否足够,或者是否有其他标准行动可以采取? 最佳答案 如果所有相邻解决方案都是 Tabu,则听起来您的 Tabu 列表的大小太长或您的释放策略太严格。一个好的 Tabu 列表长度是
我正在阅读来自 cppreference 的代码示例: #include #include #include #include template void print_queue(T& q)
我快疯了,我试图理解工具提示的行为,但没有成功。 1. 第一个问题是当我尝试通过插件(按钮 1)在点击事件中使用它时 -> 如果您转到 Fiddle,您会在“内容”内看到该函数' 每次点击都会调用该属
我在功能组件中有以下代码: const [ folder, setFolder ] = useState([]); const folderData = useContext(FolderContex
我在使用预签名网址和 AFNetworking 3.0 从 S3 获取图像时遇到问题。我可以使用 NSMutableURLRequest 和 NSURLSession 获取图像,但是当我使用 AFHT
我正在使用 Oracle ojdbc 12 和 Java 8 处理 Oracle UCP 管理器的问题。当 UCP 池启动失败时,我希望关闭它创建的连接。 当池初始化期间遇到 ORA-02391:超过
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve
引用这个plunker: https://plnkr.co/edit/GWsbdDWVvBYNMqyxzlLY?p=preview 我在 styles.css 文件和 src/app.ts 文件中指定
为什么我的条形这么细?我尝试将宽度设置为 1,它们变得非常厚。我不知道还能尝试什么。默认厚度为 0.8,这是应该的样子吗? import matplotlib.pyplot as plt import
当我编写时,查询按预期执行: SELECT id, day2.count - day1.count AS diff FROM day1 NATURAL JOIN day2; 但我真正想要的是右连接。当
我有以下时间数据: 0 08/01/16 13:07:46,335437 1 18/02/16 08:40:40,565575 2 14/01/16 22:2
一些背景知识 -我的 NodeJS 服务器在端口 3001 上运行,我的 React 应用程序在端口 3000 上运行。我在 React 应用程序 package.json 中设置了一个代理来代理对端
我面临着一个愚蠢的问题。我试图在我的 Angular 应用程序中延迟加载我的图像,我已经尝试过这个2: 但是他们都设置了 src attr 而不是 data-src,我在这里遗漏了什么吗?保留 d
我是一名优秀的程序员,十分优秀!