我正在尝试通过阅读和从我在网上找到的教科书中做例子来学习Java。我能够很容易地在书中做一个例子,但是想要更进一步。当我为一个名为“同心圆”的程序编写代码时。我注意到我的圆圈没有缩小到窗户的大小,我觉得它看起来很糟糕(如果我把窗户做得太小,圆圈不会缩放,你只能看到一块圆圈。我调整了我的代码,它似乎有点缩放,但是当我把窗口太小或太大时看起来很糟糕。我希望我的12个圆圈适合窗口尺寸,无论窗口的大小。我觉得我是这样的尽管如此,但似乎无法绕过它。任何和所有的帮助都非常感谢,提前感谢!
import java.awt.Graphics;
import javax.swing.JPanel;
public class Circles extends JPanel
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);
int width = getWidth();
int height = getHeight();
int x = width / 12;
int y = height / 12;
int buffersize = 0;
for (int i = 0; i < 12; i++)
{
g.drawOval(width / 2 - buffersize, height / 2 - buffersize, x + buffersize * 2, y + buffersize * 2);
buffersize += 10;
}
}
}
驱动程序类
import javax.swing.JFrame;
import javax.swing.JOptionPane;
/**
*
* @author
*/
public class ConcentricCirclesTest
{
public static void main(String[] args)
{
//create a panel that will contain our drawing
Circles panel = new Circles();
//create a new frame to house the panel
JFrame application = new JFrame();
//set the frame to exit when closed
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
application.add(panel);
application.setSize(350, 350);
application.setVisible(true);
}
}
答案 0 :(得分:0)
如果你想要你的圆圈是圆形的(而不是椭圆形),那么首先你需要知道哪个更窄,宽度或高度。使用if...else
的语法快捷方式,您需要以下内容:
int smallest = width < height ? width : height;
接下来,你需要考虑你的圈子会有多远。如果您只有100个像素可以绘制它们,那么尝试绘制12个更大(或更小)10个像素的圆圈是不合适的。同样,如果你有500个像素的空间。如下所示:
float spacing = smallest / 12f;
请注意,您可以获得意外的结果,将int
与另一个for
分开。
然后在g.drawOval(0 + ((spacing / 2) * i), 0 + ((spacing / 2) * i),
smallest - ((spacing / 2) * i), smallest - ((spacing / 2) * i));
循环中
spacing
我希望如此清楚。基本上,每次迭代时,边界矩形(或方形)变小def output = ""
def objectFromDb = fetchObjectFromDb()
def output += objectFromDb.getContent() // use toString() if needed
out << output
。
好的,这将需要tweeking所以它不会在左下方绘制,我认为最后一个圆圈将是0乘0但我希望这有一些帮助。祝你好运!