这不是一个问题,而是要求确认a)我不是疯了,而且b)我的数学错误。
如果我画一个矩形(0,0,10,10),左上角是像素(0,0),右下角是(10,10)。这意味着每行实际占用11个像素,方法与元素0-10的数组长度为11相同。
另一方面,setBounds(0,0,10,10)将左上角像素设置为(0,0),将右下角像素设置为(9,9),这是一个真正的10像素x 10像素框。
实际意义是你不能在一个10宽的组件内绘制一个10宽的矩形,因为一个10宽的矩形实际上是11宽,最右边的像素将被切断。是吗?
下面的代码通过在460宽组件内创建460宽的矩形来演示行为。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.ArrayList;
public class TestBox extends JPanel {
public static void main(String[] args){
JFrame window = new JFrame("TestBox");
TestBox content = new TestBox();
window.setContentPane(content);
window.pack();
Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize();
window.setLocation( (screensize.width - window.getWidth())/2,
(screensize.height - window.getHeight())/2 );
window.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
window.setResizable(false);
window.setVisible(true);
}
private Box box;
public TestBox(){
setLayout(null);
setPreferredSize( new Dimension(500,500) );
setBackground(new Color(200,200,200));
box = new Box();
add(box);
box.setBounds( 20, 20, 460, 460 );
}
private class Box extends JPanel {
public void paintComponent( Graphics g ){
g.setColor(Color.BLACK);
g.drawRect( 0, 0, 460, 460 );
}
}
}
答案 0 :(得分:3)
当你致电<script src="js/dependencies/d3.min.js"></script>
时,最右侧绘制的像素将位于x = 9,因此右下方绘制的像素位于(9,9),而不是(10,10)。考虑g.drawRect(0,0,10,10)
。这将在坐标(0,0)处绘制单个像素。
哎呀 - 抱歉。我在考虑g.fillRect(),而不是g.drawRect()。是的,你是对的,你可以证明如果将背景设置为绿色,将面板大小设置为3,3,然后将颜色设置为红色,g.drawRect(0,0,2,2)你将得到一个红色方块中心绿色像素 - 右下角的红色像素位于(2,2)。
更重要的是,g.drawRect(0,0,0,0)将绘制一个像素。